Skip to content

Commit 8bb8aa7

Browse files
docs: adopt docs-governance suite + agents-tier-system + add fallow ongoing tracker (#25)
## Summary Adds durable, project-agnostic agent infrastructure to codemap's `.agents/` tree, plus an ongoing fallow capability tracker grounded in real hands-on usage data. Three commits, reviewable independently: 1. **`docs(research): add fallow ongoing tracker`** — `docs/research/fallow.md` complementing the dated three-tool scan from PR #23. Stays in Open state per [`docs/README.md` Rule 8](https://github.com/stainless-code/codemap/blob/main/docs/README.md). 2. **`docs(agents): add docs-governance suite + agents-tier-system + comment hygiene rules`** — 3 new skills, 3 new rules, 1 modified rule, 6 new `.cursor/` symlinks. 3. **`docs(agents): add pr-comment-fact-check rule + skill`**. No `templates/agents/` changes — these rules and skills are for codemap maintainers only, **not pushed onto npm consumers**. ## What's new ### 4 new skills (Tier 3 — discoverable, no always-on cost) | Skill | What it does | | ----- | ----- | | `docs-governance` | Repo-wide docs blueprint: 5 lifecycle types, existence test, anchor-preservation discipline, surface-tier prescriptions. Codemap-active tiers: **Tier B** (`docs/`) + **Tier 0** (`.agents/`). | | `docs-lifecycle-sweep` | The doc janitor — walks any doc surface, classifies each file Tier A/B/C with evidence, surfaces a report for user approval, executes lift / delete / slim. | | `audit-pr-architecture` | PR-architecture audit framework: 6-step recipe (codemap reindex → derive boundary queries from `architecture.md` → `fallow audit` → cross-check STOP signals → cross-check `architecture.md` → write audit doc). STOP-signal table calibrated for codemap's `src/cli` + `src/application` + `src/adapters` + `src/db.ts` shape. | | `pr-comment-fact-check` | Triage and fact-check PR review comments (human or bot — Bugbot, CodeRabbit, Copilot) against the actual code, project rules, and skills. Process: pull → group → fact-check → categorize → apply/reply/resolve. Hallucination patterns grounded in `docs/roadmap.md § Non-goals`. Resolve-on-merge-gate exception trimmed to a short subsection — verified live that codemap's `main` doesn't require conversation resolution (`gh api repos/stainless-code/codemap/branches/main/protection` confirms `required_conversation_resolution.enabled: false`). | ### 4 new rules | Rule | Tier | | ----- | ----- | | `agents-tier-system` | **Tier 2** (auto-attached to `.agents/**` + `.cursor/**`). Carries the durability sub-rules: no specific filenames / hashes / line numbers as canonical examples — they rot. | | `concise-comments` | **Tier 1** (always-on, globbed to `ts/tsx/css/html/md`). Examples in "Keep" are codemap-shape (SQLite quirks, parser idiosyncrasies, oxc-resolver returning null). | | `preserve-comments` | **Tier 1** (always-on, globbed to `ts/tsx/css/html`). Pairs with `concise-comments`. | | `pr-comment-fact-check` | **Tier 1** (always-on, intent-triggered priming). Cross-links `docs-governance` since fact-checking comments about docs uses the same anchor-preservation discipline. | ### 1 modified rule - `docs-governance.md` — slimmed from `alwaysApply: true` to **Tier 2** (`globs: "docs/**, .agents/**", alwaysApply: false`). Now explicitly the priming layer pointing at the new skill. Cited Rule numbers (1–9) in `docs/README.md` left untouched per the anchor-preservation discipline. ### 8 new `.cursor/` symlinks Per [`agents-first-convention`](https://github.com/stainless-code/codemap/blob/main/.agents/rules/agents-first-convention.md): `.agents/` is source of truth, `.cursor/` is symlinks. (4 rules + 4 skills.) ## How the new pieces fit together ```text docs/README.md ← Rules 1–9 cited from across docs/ + .agents/ │ ├── doc-touching edit primes → │ .agents/rules/docs-governance.md ← Tier 2 (auto-attached to docs/**, .agents/**) │ │ │ └── deep reference → │ .agents/skills/docs-governance/SKILL.md │ ├── operationalised by → │ │ .agents/skills/docs-lifecycle-sweep/SKILL.md │ └── audit substrate prescriptions used by → │ .agents/skills/audit-pr-architecture/SKILL.md │ ├── any rule/skill edit primes → │ .agents/rules/agents-tier-system.md ← Tier 2 (auto-attached to .agents/**, .cursor/**) │ ├── any code edit primes → │ .agents/rules/concise-comments.md ← Tier 1 (always-on, scoped via globs) │ .agents/rules/preserve-comments.md ← Tier 1 (always-on, scoped via globs) │ └── PR-comment intent primes → .agents/rules/pr-comment-fact-check.md ← Tier 1 (always-on, intent-triggered) │ └── deep reference → .agents/skills/pr-comment-fact-check/SKILL.md ``` Plus the `docs/research/fallow.md` ongoing tracker, complementing PR #23's dated competitive scan. ## Test plan - [x] `bun run check` passes locally (build, format:check, lint:ci, test, typecheck, test:golden — 185 tests across 18 files, 19 golden scenarios). Re-run after the third commit; still green. - [x] All `.cursor/` symlinks resolve (`ls -la .cursor/rules/ .cursor/skills/`). - [x] Cited Rule numbers in `docs/README.md` unchanged (`rg "Rule [0-9]+" docs/ .agents/` shows the same anchors as before). - [x] Branch protection check verified live for `pr-comment-fact-check` skill's "merge-gate exception" subsection (codemap's `main` has `required_conversation_resolution.enabled: false`, so the default flow applies). - [ ] Reviewer spot-checks `audit-pr-architecture` STOP-signal table (§ 4) and `pr-comment-fact-check` hallucination patterns (1–4 are codemap-thesis-shaped) since those are the most opinionated sections. - [ ] CI green. ## No changeset Only `.agents/`, `.cursor/`, and `docs/` touched. None of those ship to npm consumers (`package.json` `files`: `CHANGELOG.md`, `dist`, `templates`). Prior pure-docs / pure-agents commits in this repo (e.g. `f9726a9`, `8a8a791`) shipped without changesets — same precedent here.
1 parent 55d9c92 commit 8bb8aa7

19 files changed

Lines changed: 1148 additions & 41 deletions
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
---
2+
description: Tier system for .agents/ rules and skills — context-targeted attachment via the right Cursor frontmatter mode. Apply when authoring a new rule or skill, or when reviewing an existing one's attachment cost.
3+
globs:
4+
- ".agents/rules/**"
5+
- ".agents/skills/**"
6+
- ".cursor/rules/**"
7+
- ".cursor/skills/**"
8+
alwaysApply: false
9+
---
10+
11+
# `.agents/` tier system
12+
13+
Cursor rules support three attachment modes. Each new rule must consciously pick one.
14+
15+
| Mode | Frontmatter | Cost per turn | Use for |
16+
| ----------------- | ----------------------------------------------------- | ------------------------------------------- | ----------------------------------------------------------------------------- |
17+
| **Always-on** | `alwaysApply: true` | full rule body always loaded | cross-cutting **practices** — define how we work, not what we build |
18+
| **Auto-attached** | `alwaysApply: false` + `globs:` | zero unless a matching file is in scope | technical **patterns** — what we write under `.agents/**`, `src/cli/**`, etc. |
19+
| **Discoverable** | `alwaysApply: false` + `description:` only (no globs) | zero unless description matches user intent | intent-driven **workflows** — the user said "do X" |
20+
21+
## Tiers in this repo
22+
23+
### Tier 1 — Always-on practices (~10 rules max)
24+
25+
Genuinely cross-cutting. Apply to every turn regardless of file:
26+
27+
- `agents-first-convention``.agents/` source-of-truth + `.cursor/` symlinks discipline
28+
- `codemap` — STOP-before-grep
29+
- `concise-comments` — sweep your own new comments before reporting
30+
- `concise-reporting` — extreme concision in agent reports
31+
- `lessons` — read at session start, append after corrections
32+
- `no-bypass-hooks` — never `--no-verify` on `git commit`
33+
- `pr-comment-fact-check` — fires the fact-check skill on PR-comment intent triggers
34+
- `preserve-comments` — never silently delete TODOs / commented-out code
35+
- `tracer-bullets` — small end-to-end slices, not horizontal layers
36+
- `verify-after-each-step` — run the project's checks per milestone, not at commit time
37+
38+
### Tier 2 — Auto-attached technical rules (this rule's tier)
39+
40+
Glob-attached. Each is a thin priming layer (~30–50 lines: top-N principles + `Reference` section pointing at the deep-dive skill).
41+
42+
Skills get a paired Tier-2 rule when they have **always-on principles** that should fire whenever the relevant files are in scope (e.g. when codemap grows a TS-specific style rule, it would attach to `**/*.{ts,tsx}`).
43+
44+
Today's Tier-2 rules:
45+
46+
- `agents-tier-system` (this rule) — auto-attaches when authoring under `.agents/**` or `.cursor/**`.
47+
- `docs-governance` — primes the docs framework when authoring under `docs/**` or `.agents/**` (paired with [`docs-governance` skill](../skills/docs-governance/SKILL.md)).
48+
49+
### Tier 3 — Discoverable skills (no rule)
50+
51+
Pure intent-triggered. The skill description is detailed enough that Cursor surfaces it on relevant phrases. No always-on cost.
52+
53+
Skills stay rule-less when the work is **explicitly invoked** by the user, not pattern-triggered (e.g. `audit-pr-architecture`, `docs-lifecycle-sweep` in this repo; `improve-codebase-architecture`, `gritql-codemods`, `ubiquitous-language` in larger codebases).
54+
55+
## Authoring guidelines
56+
57+
### Adding a new rule
58+
59+
1. **Decide the tier** before writing.
60+
2. **Tier 1 needs justification** — does it really apply to every turn? If it only applies in certain files / certain intents, demote to Tier 2 or Tier 3.
61+
3. **Tier 2 globs** — write the broadest pattern that's still meaningfully scoped. `**/*.ts` is acceptable for TS-wide rules. Filename heuristics (`*recipe*.ts`) are brittle for content-driven concerns and should be a last resort.
62+
4. **Tier 3 description** — write the description as if Cursor is grepping for trigger phrases. Include the verbs and nouns the user is likely to say ("rename", "delete", "convert", "consolidate") and the symbols / patterns the agent will see in code.
63+
5. **Pair with a skill** — every Tier-1 / Tier-2 rule should link to a skill in its `Reference` section for the deep dive. The rule is priming; the skill is reference.
64+
6. **Author the source under `.agents/rules/<name>.md` and symlink from `.cursor/rules/<name>.mdc`** per the [`agents-first-convention`](./agents-first-convention.md) rule.
65+
66+
### Adding a new skill
67+
68+
1. **Decide if it needs a rule.** If the skill has always-on principles (any `NEVER` / `ALWAYS` clauses, any "MUST be used when") — pair it with a Tier-1 or Tier-2 rule.
69+
2. **If skill-only**, write the description with explicit trigger phrases. Cursor's discovery is description-match-based.
70+
3. **Author under `.agents/skills/<name>/SKILL.md` and symlink from `.cursor/skills/<name>`** per the [`agents-first-convention`](./agents-first-convention.md) rule.
71+
72+
## Authoring discipline: durability
73+
74+
Rules and skills are **more durable** than the artifacts they describe. They outlive specific files, specific commit hashes, specific code shapes. Authoring them as if they were short-lived is the most common way they go stale.
75+
76+
Three concrete sub-rules:
77+
78+
1. **Don't cite specific audit / plan / research filenames as canonical examples.** Audits and plans are mortal under [`docs-lifecycle-sweep`](../skills/docs-lifecycle-sweep/SKILL.md) (Tier C delete or Tier B slim). The first time the doc janitor retires a file your skill named, the skill's example rots. Use shape placeholders (`<YYYY-MM-DD>-<topic>.md`, `<topic>.md`) and describe the **shape** of what the next reader should look for ("the most recent audit under `docs/audits/`"), not which file does it today. **Reference docs (`README.md`, `architecture.md`, `glossary.md`, `roadmap.md`, `agents.md`) ARE durable** — citing them by name is fine; they live forever per their lifecycle type.
79+
2. **Don't cite specific commit hashes or PR numbers as the only path to context.** Hashes and PR URLs are stable but opaque. If the context matters, summarise it inline. Hashes are good as **secondary** anchors ("the seed datapoint, commit `<hash>`") not primary ones.
80+
3. **Don't cite specific source-code line numbers.** Same drift as above; lines move on every edit. Reference symbols by name. (Same hazard as [`docs/README.md` Rule 7](../../docs/README.md) — universal, not codemap-specific.)
81+
82+
When in doubt: if the prose still reads correctly six months from now after every doc you didn't write got rewritten or deleted, the skill is durable. If it reads as a stale snapshot, slim the citations to placeholders.
83+
84+
## Audit prompts
85+
86+
When reviewing an existing rule:
87+
88+
- **Is it Tier 1?** Check: does it apply on every turn? If it only applies to TS files, flip to Tier 2 with a glob.
89+
- **Is it Tier 2?** Check: are the globs well-scoped? Could broader globs catch content-driven cases? Could narrower globs save context without losing coverage?
90+
- **Is it skill-only?** Check: does the skill have any "always" / "never" clauses? If yes, it deserves a rule.
91+
92+
## Reference
93+
94+
- File-layout convention: [`agents-first-convention.md`](./agents-first-convention.md).
95+
- The docs-governance pair this tier system was first applied to in this repo: [`docs-governance.md` rule](./docs-governance.md) (Tier-2 priming) + [`docs-governance` skill](../skills/docs-governance/SKILL.md) (deep reference).

.agents/rules/concise-comments.md

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
---
2+
description: Sweep your own new comments at the end of every change. Keep what code can't say; cut the rest.
3+
globs: "**/*.{ts,tsx,css,html,md}"
4+
alwaysApply: true
5+
---
6+
7+
# Concise Comments
8+
9+
After you finish a change — before reporting back — re-read the comments **you** authored in that turn. Keep only the ones that carry information the code itself cannot.
10+
11+
## Decision test
12+
13+
For every comment you wrote, ask: **"Could a teammate (human or AI) re-derive this from the code in under 30 seconds?"**
14+
15+
- **Yes** → delete it. The code is the documentation.
16+
- **No** → keep it, slim to one sentence if possible.
17+
18+
## Keep
19+
20+
- **Why**, not what — design intent, trade-offs, the rejected alternative.
21+
- **Non-obvious constraints** — SQLite quirks, parser idiosyncrasies, race conditions, ordering requirements.
22+
- **Cross-references** that save grep time — `mirrors X`, `see NOTE(foo)`, `tracked at docs/roadmap.md § Y`.
23+
- **Domain → code translations** — schema-column ↔ JS-field aliases, BE / external-API field aliases.
24+
- **Sentinels and magic values**`null because oxc-resolver returns null on unresolved`, `0 because SQLite rejects undefined`.
25+
26+
## Cut
27+
28+
- Restating the function/variable name (`/** Site id. */ sid: number`).
29+
- Restating the next line of code (`// Reset to page 1` above `setPage(1)`).
30+
- Generic library practice (`// Memoise this` above `useMemo`).
31+
- Section headers in short files (`// === Helpers ===`).
32+
- Author / date stamps (git tracks this).
33+
- Multi-line prose where one clause does the job.
34+
35+
## Reconcile with `preserve-comments`
36+
37+
[`preserve-comments`](./preserve-comments.md) protects **existing** comments — never delete those without asking.
38+
39+
This rule applies only to comments **you authored in the current turn**. You own them; they earn their keep, or you cut them before handing the work back.
40+
41+
If you slim or delete a pre-existing comment, that requires explicit user confirmation per [`preserve-comments`](./preserve-comments.md) Rule 4 — this rule does not override that.
42+
43+
## When to sweep
44+
45+
- **Always before final report** — make it the last thing you do.
46+
- **After every comment-touching edit during a long session** — don't accumulate noise across turns.
47+
- **If you find yourself writing 3+ lines of prose for one decision** — stop, ask whether a one-liner with a code reference would do.
48+
49+
## Length budget (rule of thumb)
50+
51+
- **0 lines** — when the code is self-explanatory.
52+
- **1 line** — default for kept comments.
53+
- **2–3 lines** — only when context is genuinely irreducible (e.g. a parser-shape gotcha with two failure modes).
54+
- **>3 lines** — extract to a `docs/` file and link to it.

.agents/rules/docs-governance.md

Lines changed: 37 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,56 @@
11
---
2-
description: Always follow the docs governance in docs/README.md when touching files under docs/. Specifically: cite Rules by number, update File Ownership and Single Source of Truth tables when adding/removing docs, fold new content into existing files unless it passes the Existence Test.
3-
alwaysApply: true
2+
description: Repo-wide docs framework primer. Use when authoring or editing any docs/, plans/, research/, or other doc-bearing surface in the repo. Defines surface tiers (repo-wide / per-tooling-area), the 5 lifecycle types, the existence test, anchor-preservation discipline, and the delete-and-lift plan lifecycle. Skill at `.agents/skills/docs-governance/SKILL.md` carries the full reference.
3+
globs: "docs/**, .agents/**"
4+
alwaysApply: false
45
---
56

6-
# Docs Governance
7+
# Docs governance
78

8-
`docs/README.md` is the source of truth for how the docs folder is organized and edited. Read it first whenever you touch anything under `docs/`.
9+
Before authoring or editing any doc in this repo, **read the [`docs-governance` skill](../skills/docs-governance/SKILL.md)** for the full reference. This rule is the priming layer.
910

10-
## Quick checklist
11+
The canonical Rules (1–9) live in [`docs/README.md`](../../docs/README.md) — cite them by number; never restate them.
1112

12-
When you change a doc, these checks must pass before the PR ships:
13+
## Surface tiers (which subset of governance applies)
1314

14-
- **Rule 1 — One source of truth.** No prose duplicated across files. Cross-reference by relative path instead.
15-
- **Rule 2 — Shipped items leave the roadmap.** When a backlog item lands, move its description to its canonical home (architecture / why-codemap / README) and remove it from `roadmap.md`.
16-
- **Rule 3 — Plans get their own file.** Don't embed plans in `roadmap.md`. Create `docs/plans/<feature-name>.md` and link from the roadmap entry.
17-
- **Rule 4 — Tables stay current.** When you add or delete a doc, update the **File Ownership** and **Single Source of Truth** tables in `docs/README.md` in the same PR.
18-
- **Rule 5 — Relative cross-references.** `[architecture.md § Section](./architecture.md#section)` — never absolute paths or repo URLs for in-tree docs.
19-
- **Rule 6 — No inventory counts in narrative.** Don't hardcode counts of files / symbols / recipes. Use qualitative descriptors or a `codemap query` example. Decision values (cache TTLs, `SCHEMA_VERSION`) are fine.
20-
- **Rule 7 — No line-number references.** Cite by function name, section heading, or `codemap query` lookup. Methodology tables in `benchmark.md` are exempt.
21-
- **Rule 8 — Close research notes.** When a `research/` scan's adopt items ship, slim it to a "What shipped" appendix linking to canonical homes. Rejected items keep a `Status: Rejected (date) — <reason>` header.
22-
- **Rule 9 — New term ⇒ glossary.** Every PR that introduces a new domain noun (table name, recipe id, parser name, schema column) updates `docs/glossary.md` in the same PR. Disambiguations (e.g. `FileRow` TS shape vs `files` SQLite table) take priority.
15+
| Tier | Substrate | Examples |
16+
| ------------------------------- | ------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |
17+
| **B** — repo-wide cross-cutting | `docs/` at repo root | `docs/architecture.md`, `docs/glossary.md`, `docs/roadmap.md`, `docs/agents.md`, `docs/plans/`, `docs/research/`, future `docs/audits/` |
18+
| **0** — per-tooling-area | `.agents/`, `.cursor/`, `scripts/`, `templates/agents/` | Governed by [`agents-first-convention`](./agents-first-convention.md) + [`agents-tier-system`](./agents-tier-system.md); no per-area README needed |
2319

24-
## Document Lifecycle (full text in `docs/README.md`)
20+
(Tier C — per-feature governance — and Tier A — per-shared-component — don't apply yet; see [`docs-governance` § Doc-bearing surface tiers](../skills/docs-governance/SKILL.md#doc-bearing-surface-tiers) for when they would.)
2521

26-
Four doc types: **Reference** (lives forever), **Roadmap** (single file, items move in/out), **Plan** (created on commit, deleted on ship), **Research** (created for evaluations, closed per § Closing research).
22+
## Five lifecycle types (universal)
2723

28-
Backlogs / frameworks / decisions don't get their own file — they fold into one of the four.
24+
| Type | Folder | Closing |
25+
| ------------- | ----------------------------------------------------- | ------------------------------------------------------------------- |
26+
| **Reference** | root (`architecture.md`, `glossary.md`, etc.) | Lives forever; kept current |
27+
| **Roadmap** | root (`roadmap.md`, single file) | Lives forever |
28+
| **Plan** | `plans/<name>.md` | **Delete + lift** when work ships (no "Slim & keep in plans/") |
29+
| **Audit** | `audit.md` (single) OR `audits/<topic>.md` (multi) | Substrate variants — see skill |
30+
| **Research** | `research/<tool>.md` OR `research/<topic>-YYYY-MM.md` | Adopted (lift + delete) / Rejected (keep with status header) / Open |
2931

30-
### Existence test (apply on every doc-touching PR)
32+
## Top three disciplines
3133

32-
A file earns its place if it meets at least one of:
33-
34-
1. Source code or another doc cites it (grep finds the path).
35-
2. It documents durable policy or framework unavailable elsewhere.
36-
3. It tracks open work.
37-
4. It carries unique historical context that `git log` + `architecture.md` cannot reconstruct.
38-
39-
If none → fold any salvageable content into roadmap / architecture / glossary, fix cross-refs, **delete the file**.
34+
1. **Anchor preservation** — slim READMEs keep cited rule numbers and section anchors. Grep before any slim: `rg "Rule [0-9]+" docs/` and `rg "<doc-path>(#[a-z-]+)?"`.
35+
2. **Anti-bloat meta-rule** — don't add a rule until there's content that needs it. Same for ownership-table rows.
36+
3. **Repo-level vs in-source** — repo-wide tool evaluations + adoption (fallow, future plugins) live in `.agents/`, not as permanent `docs/research/` files. A `docs/research/` file may motivate the adoption, but the rule + skill earn the permanent home.
4037

41-
### Top-level cap
38+
## Existence test (apply on every doc-touching PR)
4239

43-
Adding a new top-level doc requires:
44-
45-
1. The topic doesn't fit any existing root-level doc.
46-
2. The new file passes the existence test on day one.
47-
3. **File Ownership** table in `docs/README.md` updated in the same PR.
48-
49-
When in doubt, default to absorbing into the closest existing root-level file.
40+
A file earns its place if it meets at least one of:
5041

51-
## Why this exists
42+
1. Source code cites it (JSDoc, error message, comment grep-anchor)
43+
2. It documents durable policy unavailable elsewhere
44+
3. It tracks open work (audit findings, plan, roadmap items, evaluation)
45+
4. It carries unique historical context that `git log` + reference docs can't reconstruct
5246

53-
- Avoids the slow rot that hits any docs folder where any contributor (human or agent) can drop a new top-level file at any time.
54-
- Gives reviewers cite-able rule numbers ("violates Rule 4") instead of vague "this should go elsewhere" feedback.
55-
- Keeps `git log` legible by making doc files have predictable lifecycles.
47+
If none → fold + delete.
5648

5749
## Reference
5850

59-
- [`docs/README.md`](../../docs/README.md) — full text of all rules, the lifecycle, and the existence test.
60-
- Adapted from PaySpace `analytics/docs/README.md` governance pattern.
51+
- Full reference: [`.agents/skills/docs-governance/SKILL.md`](../skills/docs-governance/SKILL.md)
52+
- Doc janitor (operational sweep — apply the spec mechanically, classify Tier A / B / C, delete dead weight): [`.agents/skills/docs-lifecycle-sweep/SKILL.md`](../skills/docs-lifecycle-sweep/SKILL.md). Fire on intent ("clean up stale docs", "compact audits") or proactively after closing a Plan / Audit / Research file.
53+
- Audit framework: [`.agents/skills/audit-pr-architecture/SKILL.md`](../skills/audit-pr-architecture/SKILL.md). Fire on intent ("audit this PR's architecture", "structural review of #N") or proactively when a PR moves ≥5 files between top-level `src/` modules.
54+
- Canonical Rules: [`docs/README.md`](../../docs/README.md) — Rules 1–9 cited from across `docs/` and `.agents/`. Don't renumber without a coordinated re-grep + edit pass.
55+
- File-layout: [`agents-first-convention`](./agents-first-convention.md)
56+
- Rules vs skills tier system: [`agents-tier-system`](./agents-tier-system.md)

0 commit comments

Comments
 (0)