

Also from Kynth Studios


Also from Kynth Studios


Also from Kynth Studios
123456# Architecture Governance — Copilot Instructions78> Applied automatically when working with architecture records, ADRs, RFCs, and architecture markdown files. Loaded alongside copilot-instructions.md.910---1112## Architecture Review Board (ARB)1314### Trigger Conditions — When ARB Review is Mandatory1516The following changes **must not proceed to implementation** without a recorded ARB decision:1718| Trigger | Examples |19|---------|---------|20| New service or application | A new Spring Boot service, a new Lambda function used by > 1 team |21| New persistent data store | Adding DynamoDB table, RDS instance, ElasticSearch cluster, Redis for primary storage |22| New cloud provider | First use of Azure or GCP resources in an AWS-primary estate |23| Technology not on Approved List | Any language, framework, or SaaS tool with no existing approved usage in the estate |24| Cross-domain data sharing | A service in Domain A reading data owned by Domain B |25| Change to shared infrastructure | Changes to the VPC, Transit Gateway, API Gateway stage, or shared Route 53 zone |26| Data residency or sovereignty change | Moving data outside the approved region set (e.g., eu-west-1 to us-east-1 for EU data) |27| Vendor lock-in increase | Adopting a proprietary API where a vendor-neutral alternative exists and was not formally evaluated |2829### Submitting for ARB Review30311. Author an RFC using the `write-rfc.prompt.md` task prompt322. Open a pull request targeting `architecture/rfcs/` — do not merge without an ARB decision333. Tag `@arb-reviewer` and `@enterprise-architect` in the PR description344. ARB meeting cadence: fortnightly; P1 incidents can trigger an emergency ARB within 24 hours355. Record the outcome in `docs/architecture/decisions/governance-register.md`3637See `.github/agents/arb-reviewer.agent.md` and `.github/agents/enterprise-architect.agent.md`.3839---4041## ADR — Architecture Decision Record4243### Mandatory Format4445Every ADR file must be at `docs/decisions/ADR-{NNN}-{slug}.md` and contain all six sections:4647```markdown48# ADR-{NNN}: {Title — present tense, e.g., "Use DynamoDB for session storage"}4950Date: YYYY-MM-DD51Status: Proposed | Accepted | Deprecated | Superseded by ADR-{NNN}52Deciders: {Comma-separated names or teams}53Tags: {storage | compute | integration | security | ml | platform}5455## Context5657What is the problem or opportunity forcing a decision? Include constraints, non-functional58requirements, and any relevant business context. Minimum 3 sentences.5960## Decision6162State the decision as an active sentence: "We will use X because Y."63Be specific — name the exact technology, version, configuration, or pattern chosen.6465## Consequences6667### Positive68- {Concrete benefit with measurable expectation where possible}6970### Negative71- {Known cost, risk, or limitation that is accepted}7273### Neutral74- {Side effects that are neither clearly positive nor negative}7576## Alternatives Considered7778| Option | Pros | Cons | Reason Rejected |79|--------|------|------|----------------|80| Option A | ... | ... | ... |81| Option B | ... | ... | ... |8283## References8485- RFC: {link if applicable}86- Spike: {link to spike branch or document}87- ARB Decision: {link to governance register entry}88- External: {standards body reference, vendor documentation}89```9091### ADR Status Transitions9293```94Proposed → Accepted (after ARB approval or team decision for non-ARB changes)95Proposed → Rejected (ARB or team rejects; reasons must be recorded in Context)96Accepted → Deprecated (technology end-of-life or superseded without a direct replacement)97Accepted → Superseded by ADR-{NNN} (replaced by a new decision)98```99100Never delete an ADR — only transition its status. The record of rejected paths is as valuable as accepted ones.101102---103104## RFC — Request for Comments105106RFCs are required for any change that affects > 1 team or that the ARB must review. RFCs live at `architecture/rfcs/RFC-{NNN}-{slug}.md`.107108### Mandatory RFC Sections109110```markdown111# RFC-{NNN}: {Title}112113Author: {name}114Date: YYYY-MM-DD115Status: Draft | Under Review | Approved | Rejected | Withdrawn116ARB Review Required: Yes | No117Related ADRs: ADR-{NNN}, ...118119## Problem Statement120121Describe the specific problem being solved. Include evidence: error rates, latency p99 data,122cost data, or incident references. Do not describe the solution here.123124## Motivation125126Why does this problem need to be solved now? What is the cost of inaction?127128## Proposed Solution129130Describe the solution precisely. Include:131- Architecture diagrams (as Mermaid or PlantUML inline)132- Configuration examples133- API contracts (OpenAPI snippet or JSON Schema)134- Data model changes (ERD or table definitions)135136## Alternatives Considered137138For each rejected alternative, state: what it was, why it was considered, why it was rejected.139140## Drawbacks141142What are the known downsides or risks of the proposed solution?143144## Success Criteria145146| Criterion | Measurement | Target |147|-----------|------------|--------|148| Latency | p99 API response time | < 200ms |149| Availability | Error rate | < 0.1% |150151## Migration Plan152153Step-by-step migration path including rollback procedure. Identify any dual-write periods,154feature flags, or traffic shifting strategy.155156## Rollout Plan157158Phase 1: {scope, date, owners}159Phase 2: {scope, date, owners}160Rollback trigger: {specific condition that triggers rollback}161```162163---164165## Technology Lifecycle Classification166167All technologies used in the estate are classified using a four-tier model. The authoritative list is at `docs/architecture/tech-radar.md`.168169| Tier | Definition | Action Required |170|------|-----------|----------------|171| **Invest** | Actively adopt and grow usage; long-term support confirmed | Default choice when applicable |172| **Tolerate** | Acceptable for existing use; no new projects should start here | Plan migration to Invest-tier alternative; track in tech-debt register |173| **Migrate** | Active migration away; new features must not use | Create migration ADR; assign sprint allocation |174| **Eliminate** | No new usage; existing usage must be removed by sunset date | Hard gate in CI: flag usage in code scan |175176### Current Classification Examples (update `tech-radar.md` as the source of truth)177178| Technology | Tier | Notes |179|-----------|------|-------|180| Java 21 (LTS) | Invest | Target runtime for all JVM services |181| Spring Boot 3.x | Invest | Standard application framework |182| AWS CDK v2 (TypeScript) | Invest | Standard IaC |183| Python 3.12 | Invest | Standard for ML and data workloads |184| Java 11 | Tolerate | Existing services; migrate to Java 21 by Q4 2025 |185| Spring Boot 2.x | Migrate | Spring Boot 2 OSS support ended Nov 2023 |186| Java 8 | Eliminate | No new usage; sunset existing by Q2 2025 |187| Apache Commons Collections 3.x | Eliminate | Known CVEs; replace with Guava or JDK equivalents |188189---190191## Architecture Fitness Functions192193Fitness functions are automated checks that prevent architectural drift. They run in CI.194195### ArchUnit Rules (Java — `src/test/java/architecture/ArchitectureTest.java`)196197```java198// No cross-schema SQL joins — services must not query across domain boundaries199@ArchTest200static final ArchRule no_cross_schema_joins = noClasses()201 .that().resideInAPackage("..repository..")202 .should().dependOnClassesThat()203 .resideInAPackage("..repository..") // different bounded context204 .because("Cross-domain queries couple bounded contexts — use APIs or events instead");205206// No circular module dependencies207@ArchTest208static final ArchRule no_cycles = slices()209 .matching("com.enterprise.(*)..").should().beFreeOfCycles();210211// Domain layer must not depend on infrastructure212@ArchTest213static final ArchRule domain_independence = noClasses()214 .that().resideInAPackage("..domain..")215 .should().dependOnClassesThat()216 .resideInAnyPackage("..infrastructure..", "..adapter..");217218// Max efferent coupling per class: 20 dependencies219@ArchTest220static final ArchRule max_coupling = classes()221 .should(haveMaximumNumberOfDependencies(20));222```223224### Coupling Thresholds225226| Metric | Warning | Fail |227|--------|---------|------|228| Efferent coupling per class | > 15 | > 20 |229| Package cyclomatic complexity | > 10 | > 15 |230| Inter-service synchronous call chains | > 3 hops | > 5 hops |231| Shared database tables across services | Any | Any |232233---234235## Technical Radar Format236237The radar at `docs/architecture/tech-radar.md` uses four quadrants: Languages & Frameworks, Platforms, Tools, Techniques.238239Each entry follows this format:240241```markdown242### {Technology Name} — {Invest | Tolerate | Migrate | Eliminate}243244**Quadrant:** Languages & Frameworks | Platforms | Tools | Techniques245**Since:** YYYY-MM-DD246**Owner:** {team or person responsible}247**Context:** One paragraph — why this classification, what triggered any status change.248**Migration Path:** (only for Migrate/Eliminate) Link to ADR or migration guide.249```250251---252253## Governance Decision Register254255`docs/architecture/decisions/governance-register.md` records every ARB decision. Format:256257```markdown258| Date | RFC/ADR | Title | Decision | Deciders | Conditions |259|------|---------|-------|----------|----------|-----------|260| 2024-11-01 | RFC-014 | Adopt Kafka for event streaming | Approved | ARB Quorum | Must use MSK; Confluent Schema Registry required |261| 2024-09-15 | RFC-011 | Add GCP Vertex AI | Rejected | ARB Quorum | AWS Bedrock covers use case; revisit if gap proven |262```263264---265266## What Constitutes a Material Architectural Change267268A change is **material** if it meets any of the following criteria. Material changes require an ADR at minimum; many also require ARB review per the trigger table above.269270- Changes the public API contract of a service used by > 1 consumer271- Changes the data model of a shared entity in a way that is not backward compatible272- Introduces a new dependency on an external vendor API with data egress273- Changes the authentication or authorization model for any user-facing system274- Increases the blast radius of a failure (e.g., moves from stateless to stateful, adds shared mutable state)275- Changes the deployment topology (e.g., single-region to multi-region, monolith to microservice)276- Affects data retention, data classification, or PII handling277278---279280## Anti-Patterns — Flag These281282| Pattern | Action |283|---------|--------|284| ADR with no Alternatives Considered section | Incomplete — request alternatives before approving |285| RFC with no rollback plan | Block — rollback is mandatory for all RFC-gated changes |286| Technology in Migrate/Eliminate tier introduced in new service | Block — raise ARB exception request |287| Cross-domain database join in production code | Flag with ArchUnit rule violation; require RFC |288| Architecture decision made in a Slack thread with no ADR | Create ADR from Slack thread content; date = decision date |289
One repository carrying more than one format is the comparison this product exists for: does anyone actually write different content in each file, or is one a copy of the other?
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| doubts-suplab/eeik-bootstrap.clinerules/golden-rules.md · 1 | Cline rules | gitsecuritydo-not | 61/100 | today | |
| doubts-suplab/eeik-bootstrap.clinerules/project.md · 1 | Cline rules | teststylegit | 63/100 | today | |
| doubts-suplab/eeik-bootstrap.cursor/rules/architecture.mdc · 1 | Cursor rules | do-not | 52/100 | today | |
| doubts-suplab/eeik-bootstrap.cursor/rules/capabilities.mdc · 1 | Cursor rules | teststylegit | 58/100 | today | |
| doubts-suplab/eeik-bootstrap.cursor/rules/golden-rules.mdc · 1 | Cursor rules | gitsecuritydo-not | 61/100 | today | |
| doubts-suplab/eeik-bootstrap.cursor/rules/python.mdc · 1 | Cursor rules | lint-formatstyletypesapi+1 | 77/100 | today | |
| doubts-suplab/eeik-bootstrap.cursor/rules/security.mdc · 1 | Cursor rules | security | 39/100 | today | |
| doubts-suplab/eeik-bootstrap.github/copilot-instructions.md · 1 | Copilot instructions | lint-formatstyletesting-strategygit+2 | 54/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/a2a-protocol.instructions.md · 1 | Copilot instructions | styleagent-behaviour | 48/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/ai-governance.instructions.md · 1 | Copilot instructions | stylearchdo-notagent-behaviour | 61/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/angular.instructions.md · 1 | Copilot instructions | teststyletypestesting-strategy+4 | 69/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/autogen.instructions.md · 1 | Copilot instructions | typessecurityagent-behaviour | 50/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/aws-architecture.instructions.md · 1 | Copilot instructions | styletypessecurityperformance | 58/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/aws-data-ml-ai.instructions.md · 1 | Copilot instructions | deployment | 54/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/cdk-terraform.instructions.md · 1 | Copilot instructions | teststylearchtypes+2 | 96/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/cicd.instructions.md · 1 | Copilot instructions | stylesecuritydeploymentdo-not+1 | 65/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/containerisation.instructions.md · 1 | Copilot instructions | buildstylesecuritydo-not | 77/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/crewai.instructions.md · 1 | Copilot instructions | styleagent-behaviour | 48/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/data-engineering.instructions.md · 1 | Copilot instructions | teststyletypesgit+5 | 69/100 | today | |
| doubts-suplab/eeik-bootstrap.github/instructions/deployment.instructions.md · 1 | Copilot instructions | teststylegitdeployment | 77/100 | today |
Same format, overlapping stack, ranked by quality.
| Repository | Format | Stack | Covers | Score | Changed |
|---|---|---|---|---|---|
| HerringtonDarkholme/megarepo.github/copilot-instructions.md · 17 | Copilot instructions | setupbuildtestlint-format+7 | 100/100 | 14 days ago | |
| louislam/uptime-kuma.github/copilot-instructions.md · 90k | Copilot instructions | setupbuildtestlint-format+9 | 100/100 | 14 days ago | |
| chihebnabil/lovable-boilerplate.github/instructions/global.instructions.md · 65 | Copilot instructions | buildlint-formatstylearch+4 | 100/100 | 14 days ago | |
| pytorch/pytorch.github/copilot-instructions.md · 102k | Copilot instructions | setupbuildteststyle+5 | 100/100 | 14 days ago | |
| JCodesMore/ai-website-cloner-template.github/copilot-instructions.md · 32k | Copilot instructions | buildlint-formatstylearch+3 | 97/100 | 7 days ago | |
| bagisto/bagisto.github/copilot-instructions.md · 28k | Copilot instructions | setupbuildteststyle+5 | 97/100 | 14 days ago | |
| hiyouga/LlamaFactory.github/copilot-instructions.md · 74k | Copilot instructions | setupbuildtestlint-format+5 | 97/100 | 13 days ago | |
| darkmatter/nixmac.github/copilot-instructions.md · 25 | Copilot instructions | setupbuildtestlint-format+8 | 96/100 | 14 days ago |
A badge carrying the measured quality of the strongest agent config file in this repository, out of 100. It reads from this index every time somebody loads your page, so it changes when the measurement changes and there is nothing to keep up to date. Free, no account, and the value is not something you or we can set by hand.
[](https://rulestack.kynth.studio/configs/doubts-suplab-eeik-bootstrap-github-instructions-architecture-governance-instructions)Would rather not hotlink us? Every badge is also served in shields.io’s endpoint schema, so shields renders the image and your readers never talk to our domain:
Published by Toolproof, the masthead over this index and eight others. The method behind the number is at toolproof.kynth.studio/methodology, and the whole thing is readable as JSON with no key at /api.