Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
---
id: itd-3
slug: modular-rules-loader
spec_id: null
spec_id: spc-1
kind: standalone
suggested_kind: null
reclassification_history: []
Expand Down Expand Up @@ -63,7 +63,54 @@ This is also the keystone for retiring `~/ABCDevelopment/.claude/` entirely. Wit

## Audit Notes

_Empty. Populated by intent-fidelity-reviewer when intent moves to shipped/._
> _Manual fidelity audit — the `intent-fidelity-reviewer` agent is not yet built,
> so this audit was performed by hand. Judge: Claude Opus 4.8; date 2026-07-11;
> reviewed against the merged loader (the rules-loader design + implementation).
> Per-criterion verdicts per the itd-1 discipline, then a three-bucket prose
> audit. `spec_id: spc-1` is reserved for itd-3; the future native spec store
> adopts it rather than re-minting._

### Per-criterion verdicts

1. **MET.** COMMITTING's `recall`/`aliases` cover "commit", "PR", and "git add";
the prompt-router hook injects the domain on the turn.
2. **MET (exceeded).** A no-match renders zero model-facing tokens — bettering the
`< 200` threshold. The "header only" mechanism was replaced by out-of-band
diagnostics (signed-off delta D3).
3. **MET_WITH_CONCERNS.** Dedup is MET (inject on turn 1, skip 2–3). "Forced
refresh on prompt 5" was deliberately replaced by event-driven refresh on
`SessionStart(compact)` plus a fixed-N backstop (default 15, configurable) —
signed-off delta D1.
4. **MET.** A `*ROADMAP` star-command injects the domain regardless of keyword
match (it overrides a dormant state, not the kill switch).
5. **INCONCLUSIVE.** The marker block is delivered and sized (~40 lines) and ahoy
installs it, but the live "fresh clone + installed plugin + new session"
behaviour cannot be observed in-repo (the hook only fires in an installed
plugin).
6. **NOT_MET.** The shipped defaults are a concise curated set (eight domains)
drawn from the working conventions plus the Pass-1 mapping in
`research/legacy-harvest.md`; a completeness-audited rule-by-rule port of the
legacy methodology file was not performed. This is the one genuine gap.

**Rollup:** 3 MET · 1 MET_WITH_CONCERNS · 1 INCONCLUSIVE · 1 NOT_MET.

### Three-bucket audit

- **Honoured.** Just-in-time recall injection replacing the monolithic
force-load (the core promise); binary-bundled defaults plus a per-repo
override; per-domain dedup; star-command activation; the kill switch and
dormant state; the `abcd rules [domain]` diagnostic verb; the OPINIONS domain
pointing at the canonical conventions; a fail-closed, non-blocking trust
boundary; a marker block under 50 lines.
- **Diverged (every item a maintainer-signed delta).** D3 — zero no-match tokens
plus out-of-band diagnostics instead of a `< 200`-token header. D1 —
event-driven refresh with a fixed-N backstop instead of forced-every-5. D2 —
the shipped `{schema_version, disabled, domains{}}` per-field-override shape
instead of the earlier `extends`/`overrides` sketch. D4 — no `.abcdignore`.
- **Missing / outstanding.** A completeness-audited harvest of the legacy
methodology file into the defaults (criterion 6). Live installed-plugin session
verification (criterion 5). Neither blocks the shipped promise; both are
recorded here as follow-ups.

## References

Expand Down
4 changes: 2 additions & 2 deletions .abcd/development/plans/2026-07-11-itd-3-rules-loader.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ any implementation. Reached via the [prefer-sota](../principles/prefer-sota.md)
process: an adversary challenged generic just-in-time rule-injection SOTA (CARL,
AGENTS.md, Cursor rules, Skills) for THIS repo's fit, then a `sota-researcher`
verdict was taken on the fit-surviving hypothesis. This doc is the design of
record for [itd-3](../intents/planned/itd-3-modular-rules-loader.md); it does not
record for [itd-3](../intents/shipped/itd-3-modular-rules-loader.md); it does not
authorise a build. Adopting a planned intent is a maintainer decision — the four
deltas from the intent (§7) are the sign-off surface.

Expand All @@ -30,7 +30,7 @@ rules **point at** `.abcd/development/principles/` rather than copying them.
`internal/core`; the capability lives in the core and renders through the
vendor-neutral `abcd rules` verb.
- **CARL's global `~/.carl/carl.json` source** — collides with per-repo-only
([the intent's "What's Out of Scope"](../intents/planned/itd-3-modular-rules-loader.md);
([the intent's "What's Out of Scope"](../intents/shipped/itd-3-modular-rules-loader.md);
`~/.abcd/` holds only machine-wide state). No `~/.abcd/rules.json`. Ever.
- **CARL's MCP server + `add_rule`/`toggle_domain` verbs, and the Python hook** —
each is a new runtime/dependency (ask-first). Rule *mutation* is a file-edit of
Expand Down
6 changes: 3 additions & 3 deletions .abcd/development/research/legacy-harvest.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Decision interview conducted 2026-05-04 in conversation. Outcomes captured below

## Pass 1 — Methodology rules

Source: `~/ABCDevelopment/.claude/CLAUDE.md`. Disposition: split into CARL-style domain rules per [`itd-3-modular-rules-loader`](../intents/planned/itd-3-modular-rules-loader.md), shipped as `scripts/abcd/defaults/rules.json` in the plugin.
Source: `~/ABCDevelopment/.claude/CLAUDE.md`. Disposition: split into CARL-style domain rules per [`itd-3-modular-rules-loader`](../intents/shipped/itd-3-modular-rules-loader.md), shipped as `scripts/abcd/defaults/rules.json` in the plugin.

| § | Section | Verdict | Domain mapping | Notes |
|---|---|---|---|---|
Expand Down Expand Up @@ -208,7 +208,7 @@ abcdDev/
}
```

Merge semantics, conflict policy, and diagnostic surface (`abcd rules show`, `abcd rules diff`, `abcd rules lint`) defined in [`itd-3-modular-rules-loader`](../intents/planned/itd-3-modular-rules-loader.md).
Merge semantics, conflict policy, and diagnostic surface (`abcd rules show`, `abcd rules diff`, `abcd rules lint`) defined in [`itd-3-modular-rules-loader`](../intents/shipped/itd-3-modular-rules-loader.md).

## Migration sequence

Expand Down Expand Up @@ -277,7 +277,7 @@ If the first phase starts feeling too heavy, the candidates for moving to a late
## References

[itd-1]: ../intents/disciplines/itd-1-acceptance-gates.md "itd-1 — Acceptance gates"
[itd-3]: ../intents/planned/itd-3-modular-rules-loader.md "itd-3 — Modular rules loader"
[itd-3]: ../intents/shipped/itd-3-modular-rules-loader.md "itd-3 — Modular rules loader"
[itd-7]: ../intents/drafts/itd-7-rp-workspace-portability.md "itd-7 — RP workspace portability"
[itd-17]: ../intents/drafts/itd-17-model-effectiveness-tracking.md "itd-17 — Model effectiveness tracking (a later phase)"
[itd-23]: ../intents/drafts/itd-23-spec-kit-interop.md "itd-23 — Spec Kit interop (a later phase)"
Expand Down
2 changes: 1 addition & 1 deletion .abcd/development/research/related-work.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ Architecture in one paragraph:

### Where abcd overlaps

abcd's 978-line `~/ABCDevelopment/.claude/CLAUDE.md` is exactly the failure mode CARL addresses. Most sessions need none of those rules; every session pays for all of them. The plugin-bundled defaults + per-repo `.abcd/rules.json` model proposed in [`itd-3-modular-rules-loader`](../intents/planned/itd-3-modular-rules-loader.md) is structurally identical to CARL.
abcd's 978-line `~/ABCDevelopment/.claude/CLAUDE.md` is exactly the failure mode CARL addresses. Most sessions need none of those rules; every session pays for all of them. The plugin-bundled defaults + per-repo `.abcd/rules.json` model proposed in [`itd-3-modular-rules-loader`](../intents/shipped/itd-3-modular-rules-loader.md) is structurally identical to CARL.

### Why not depend on CARL

Expand Down
8 changes: 8 additions & 0 deletions .abcd/work/DECISIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -184,3 +184,11 @@ parallel-agent merge contention bites.
no-match + out-of-band diagnostic log (supersedes the "<200-token header"
acceptance criterion); **D4** `.abcdignore` rejected for v1. Build proceeds
phased/TDD from Phase 1 (`internal/core/rules`).
- 2026-07-11 — itd-3 **shipped manually** ahead of the intent-lifecycle pipeline.
Moved `planned/ → shipped/` by hand with `spec_id: spc-1` (reserved — the future
native spec store adopts spc-1 for itd-3, never re-mints it) and a hand-authored
`## Audit Notes` (the `intent-fidelity-reviewer` agent does not exist yet; judge
= Claude Opus 4.8). Rollup 3 MET / 1 MET_WITH_CONCERNS / 1 INCONCLUSIVE / 1
NOT_MET; every divergence is a signed-off D1–D4 delta, the one gap is the AC6
legacy-harvest completeness. Inbound links repointed planned→shipped by hand —
the link-drift-on-move the future reconcile pass automates.
Loading