Skip to content

docs(plans): C.9 framework plugin layer — plan PR (skeleton)#59

Merged
SutuSebastian merged 1 commit intomainfrom
plan/c9-plugin-layer
May 4, 2026
Merged

docs(plans): C.9 framework plugin layer — plan PR (skeleton)#59
SutuSebastian merged 1 commit intomainfrom
plan/c9-plugin-layer

Conversation

@SutuSebastian
Copy link
Copy Markdown
Contributor

Summary

Opens the C.9 framework plugin layer plan PR per the parallel-plan-PR shape locked in by the just-merged research note (PR #58docs/research/non-goals-reassessment-2026-05.md § 5).

Why now (T+0): the research note's § 5 ship sequence parks (b) C.9 impl at T+2w → +5w in the shipping cadence. The plan PR opens at T+0 in parallel with (a) FTS5 + Mermaid shipping so impl is unblocked when its slot arrives — avoids the deferral trap where XL items become "next quarter" while every new recipe layered on the noisy dependencies substrate inherits untested-and-dead's false-positive class.

Motivator: closed-dead-subgraph case — N-file packs where every file imports a sibling (non-zero dependencies fan-in for all) but none is reachable from a real entry point. Today's untested-and-dead recipe false-positives Next.js app/**/page.tsx for the same reason — framework entry points aren't recognized as live without per-framework awareness.

What's in the skeleton

  • 5 pre-locked decisions (L.1–L.5) carried from the research note with anchor-deep cross-references — entry-point hints only (no edge injection), static config only, moat-A clean (no verdict-shaped verb), moat-B aligned (substrate growth), no edge injection in v1.
  • 9 open decisions (Q1–Q9) — plugin contract shape, discovery, schema delta, reachability algorithm, bundled starters, conflict resolution, recipe composition, community API, backwards-compat. Each gets a Resolution subsection as it crystallises (mirrors the research-note § 6 pattern).
  • High-level architecture — plugin loader + indexer hook + reachability sweep. Recipes consume the substrate.
  • 5 implementation slices (tracer-bullets) — schema delta → reachability recipe → contract+discovery → bundled starters → agent rule lockstep update.
  • Test approach — unit + golden queries + integration fixture under fixtures/golden/c9-fixture/.
  • 6-row risks/non-goals table — including the abandonment escape hatch (close as Status: Rejected per Rule 8 if needed).

Doc-governance compliance

  • Lives in docs/plans/c9-plugin-layer.md per Rule 3 — feature plans go in plans/, no -plan suffix (folder provides context).
  • docs/README.md File Ownership row updated in the same PR per Rule 4plans/ "Empty until the first plan lands" no longer accurate.
  • Cross-references use relative paths with section-deep anchors per Rule 5.
  • No inventory counts in narrative per Rule 6.

Test plan

  • bun run format:check passes
  • All anchor cross-refs to docs/research/non-goals-reassessment-2026-05.md resolve to existing section anchors
  • CodeRabbit review on the skeleton structure (rate-limited; will trigger)
  • Plan iteration via subsequent commits as Q1–Q9 crystallise

Iteration cadence

Per the parallel-plan-PR shape: each open decision (Q1–Q9) gets resolved via a separate commit on this branch as it crystallises, with a "Resolution (YYYY-MM-DD)" subsection added inline (mirrors the research-note § 6 resolved-vs-open pattern). The plan stays in iterative state until impl-ready; merges with the impl PR per the cadence at T+5w.

Out of scope (separate PRs)

  1. Impl itself — gated on this plan converging.
  2. docs/research/fallow.md cleanup under the new positioning — separate PR.
  3. docs/roadmap.md § Non-goals lockstep update — separate PR per Rule 10.
  4. Tier-2 rule for plan-PR inspiration discipline — separate PR.

Per the parallel-plan-PR shape locked in by the just-merged research
note (PR #58, docs/research/non-goals-reassessment-2026-05.md § 5):
this file iterates in parallel with (a) FTS5 + Mermaid shipping;
impl unblocks when its slot arrives in the cadence (T+2w → +5w per
the § 5 T-table).

Skeleton captures:

- 5 PRE-LOCKED DECISIONS (L.1-L.5) carried over from the research
  note, with cross-references to specific § 6 / § 3 / § 2.3 anchors
  so any future challenge to these decisions has to argue against the
  source, not just open them as "open" questions.
- 9 OPEN DECISIONS (Q1-Q9) covering the design surface that needs
  to crystallise during plan iteration: contract shape, discovery
  mechanism, schema delta, reachability algorithm, bundled starters,
  conflict resolution, recipe composition, community-plugin API,
  backwards-compat default semantics. Each gets a Resolution
  subsection as it crystallises (mirrors the research-note § 6
  resolved-vs-open pattern).
- 3-piece HIGH-LEVEL ARCHITECTURE: plugin loader + indexer hook +
  reachability sweep. No CLI changes; no new verb. Recipes consume
  the substrate (moat-A clean per L.3).
- 5 IMPLEMENTATION SLICES (tracer-bullets — schema delta first,
  reachability recipe second, plugin contract third, starter plugins
  fourth, agent rule lockstep update fifth per docs/README.md
  Rule 10).
- TEST APPROACH grounded in existing infrastructure (golden queries
  per docs/golden-queries.md, fixture under fixtures/golden/c9-fixture/
  reproducing the closed-dead-subgraph case).
- 6-row RISKS / NON-GOALS table including the abandonment escape
  hatch (close as Status: Rejected per docs/README.md Rule 8 if
  needed; design surface captured either way).

Plus docs/README.md File Ownership row updated for the plans/ entry —
"Empty until the first plan lands" is no longer accurate after this
file lands. Per docs/README.md Rule 4 (keep ownership tables current
in the same PR as the doc-file change).
@changeset-bot
Copy link
Copy Markdown

changeset-bot Bot commented May 4, 2026

⚠️ No Changeset found

Latest commit: b53db60

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. If these changes should result in a version bump, you need to add a changeset.

This PR includes no changesets

When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

Click here to learn what changesets are, and how to add one.

Click here if you're a maintainer who wants to add a changeset to this PR

@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 4, 2026

Warning

Rate limit exceeded

@SutuSebastian has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 42 minutes and 27 seconds before requesting another review.

To keep reviews running without waiting, you can enable usage-based add-on for your organization. This allows additional reviews beyond the hourly cap. Account admins can enable it under billing.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro

Run ID: 1aa301d3-7830-48cb-a552-362e0df3be9d

📥 Commits

Reviewing files that changed from the base of the PR and between 54e3a2c and b53db60.

📒 Files selected for processing (2)
  • docs/README.md
  • docs/plans/c9-plugin-layer.md
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch plan/c9-plugin-layer

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share
Review rate limit: 0/1 reviews remaining, refill in 42 minutes and 27 seconds.

Comment @coderabbitai help to get the list of available commands and usage tips.

SutuSebastian added a commit that referenced this pull request May 4, 2026
 (#61)

PR #58 (just merged) corrected codemap's positioning: not unique, but
in a specific niche of a SQLite-backed-code-index cohort with multiple
peers (srclight, Sverklo, ctxpp, KotaDB, codemogger, etc.). fallow is
one of many, not a yardstick.

Under the new positioning, fallow.md's framing ("adoption candidates
from fallow") is off-mission. Per docs-governance closure pattern
(competitive-scan-2026-04.md precedent), close the doc with a status
header pointing at the new canonical home + lift open items.

Closure rationale captured at the top:

- Status: Closed (2026-05) header explicit
- Cohort positioning summarized + cross-ref to research note for full
  framing
- Body preserved verbatim as historical record (Status snapshot below
  is the authoritative "what actually landed" log)
- New adoption candidates (if any) get authored against open specs +
  primitive sources per non-goals-reassessment-2026-05 § 4, not
  against fallow source tree
- Outstanding open items lifted to canonical homes:
  - C.9 plugin layer → in-flight PR #59 plan
  - C.10 LSP → covered by § 2.5 of research note (thin shim resolved)
  - C.11 coverage → shipped
  - Tier D defers (suppressions, fix engine, dupes, runtime intel) →
    aligned with § 3 ergonomic floors

Original framing preserved verbatim under "Original framing (preserved
verbatim from before 2026-05 closure)" subsection so historical readers
can see what the doc said in its open phase.

Per docs/README.md Rule 8 closing-research lifecycle. fallow.md stays
in repo (not deleted) — historical context git log alone can't
reconstruct.
@SutuSebastian SutuSebastian merged commit 33adbae into main May 4, 2026
10 checks passed
@SutuSebastian SutuSebastian deleted the plan/c9-plugin-layer branch May 4, 2026 12:31
SutuSebastian added a commit that referenced this pull request May 4, 2026
Per docs/research/non-goals-reassessment-2026-05.md § 5 ship sequence:
(a) is the next ship in the cadence track. This plan opens the design
surface so impl can iterate against pinned decisions; mirrors the
parallel-plan-PR shape from the (b) C.9 plan PR (#59).

Skeleton captures:

- 6 PRE-LOCKED DECISIONS (L.1-L.6) carried from the research note
  with deep cross-references:
  - L.1 FTS5 default OFF (backwards-compat per § 6 Q2)
  - L.2 Toggle BOTH config + CLI flag (per § 6 Q2)
  - L.3 Mermaid output mode is moat-A clean (per § 3 Moat A)
  - L.4 Mermaid bounded-input contract (per § 1.7)
  - L.5 Bundle one demo recipe text-in-deprecated-functions (per § 2.1)
  - L.6 Cold-start sub-100ms preserved (per § 3 ergonomic floor)

- 7 OPEN DECISIONS (Q1-Q7) covering the design surface that needs
  to crystallise before impl: source_fts schema (column shape +
  tokeniser), indexer integration point, --full rebuild semantics on
  toggle change, Mermaid edge-count threshold default, output target
  shape (normalised input contract for the formatter), CLI flag
  precedence vs config, and DB-size telemetry on first FTS5 populate.

- HIGH-LEVEL ARCHITECTURE split FTS5 + Mermaid + crosscut:
  - FTS5: schema bump + always-CREATE virtual table + Zod config field
    + --with-fts CLI flag + indexer write path + .codemap/.gitignore
    unchanged.
  - Mermaid: new formatMermaid() in output-formatters.ts (sibling of
    SARIF) + bounded-input check + plumbing through CLI / MCP / HTTP.
  - Crosscut: bundled recipe + schema-bump migration story (pre-v1
    patch changeset) + agent rule lockstep update per Rule 10.

- 7 IMPLEMENTATION SLICES (tracer-bullets) — substrate first
  (slice 1 ships FTS5 plumbing without recipe; proves end-to-end
  before recipe authoring), then demo recipe, then Mermaid formatter,
  then bound check, then MCP/HTTP plumbing, then docs/agents lockstep,
  then patch changeset.

- TEST APPROACH grounded in existing infrastructure (golden queries
  per docs/golden-queries.md; integration fixture under
  fixtures/golden/fts5-fixture/ with @deprecated function + TODO
  comment + low-coverage file proving the JOIN composes).

- 6-row RISKS / NON-GOALS table including the abandonment escape
  hatch (close as Status: Rejected per Rule 8 if needed).

docs/README.md File Ownership row updated for plans/ — Rule 4
discipline: keep ownership tables current in the same PR. (Note:
PR #59 also updates this row; rebase will combine both entries.)
SutuSebastian added a commit that referenced this pull request May 4, 2026
Per docs/research/non-goals-reassessment-2026-05.md § 5 ship sequence:
(a) is the next ship in the cadence track. This plan opens the design
surface so impl can iterate against pinned decisions; mirrors the
parallel-plan-PR shape from the (b) C.9 plan PR (#59).

Skeleton captures:

- 6 PRE-LOCKED DECISIONS (L.1-L.6) carried from the research note
  with deep cross-references:
  - L.1 FTS5 default OFF (backwards-compat per § 6 Q2)
  - L.2 Toggle BOTH config + CLI flag (per § 6 Q2)
  - L.3 Mermaid output mode is moat-A clean (per § 3 Moat A)
  - L.4 Mermaid bounded-input contract (per § 1.7)
  - L.5 Bundle one demo recipe text-in-deprecated-functions (per § 2.1)
  - L.6 Cold-start sub-100ms preserved (per § 3 ergonomic floor)

- 7 OPEN DECISIONS (Q1-Q7) covering the design surface that needs
  to crystallise before impl: source_fts schema (column shape +
  tokeniser), indexer integration point, --full rebuild semantics on
  toggle change, Mermaid edge-count threshold default, output target
  shape (normalised input contract for the formatter), CLI flag
  precedence vs config, and DB-size telemetry on first FTS5 populate.

- HIGH-LEVEL ARCHITECTURE split FTS5 + Mermaid + crosscut:
  - FTS5: schema bump + always-CREATE virtual table + Zod config field
    + --with-fts CLI flag + indexer write path + .codemap/.gitignore
    unchanged.
  - Mermaid: new formatMermaid() in output-formatters.ts (sibling of
    SARIF) + bounded-input check + plumbing through CLI / MCP / HTTP.
  - Crosscut: bundled recipe + schema-bump migration story (pre-v1
    patch changeset) + agent rule lockstep update per Rule 10.

- 7 IMPLEMENTATION SLICES (tracer-bullets) — substrate first
  (slice 1 ships FTS5 plumbing without recipe; proves end-to-end
  before recipe authoring), then demo recipe, then Mermaid formatter,
  then bound check, then MCP/HTTP plumbing, then docs/agents lockstep,
  then patch changeset.

- TEST APPROACH grounded in existing infrastructure (golden queries
  per docs/golden-queries.md; integration fixture under
  fixtures/golden/fts5-fixture/ with @deprecated function + TODO
  comment + low-coverage file proving the JOIN composes).

- 6-row RISKS / NON-GOALS table including the abandonment escape
  hatch (close as Status: Rejected per Rule 8 if needed).

docs/README.md File Ownership row updated for plans/ — Rule 4
discipline: keep ownership tables current in the same PR. (Note:
PR #59 also updates this row; rebase will combine both entries.)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant