Skip to content

Commit 3c65a65

Browse files
committed
docs: restore trimmed design record after audit review
Fix stray fence in architecture.md; mark Step 1 open questions resolved; restore apply-engine citations, Q6 SARIF de-dup shape, and profiling note.
1 parent e6ab158 commit 3c65a65

3 files changed

Lines changed: 15 additions & 15 deletions

File tree

docs/plans/github-marketplace-action.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -133,7 +133,7 @@ These are the design questions the plan-PR resolves before impl starts. Each get
133133

134134
**Resolution (Q-B grill):** **α + skip-on-non-PR**. On `pull_request` events the Action runs `codemap audit --base ${{ github.base_ref }} --ci` (SARIF + non-zero exit + quiet). On any other event (`push`, `schedule`, `workflow_dispatch`, …) the Action no-ops with `echo "codemap action: no PR context, skipping"` and exits 0 — there's no meaningful default without a base ref, and firing β-style opinionated recipes on push events surfaces findings consumers didn't ask for. β is a worse α (no PR-scoped diff). γ is reserved until multi-recipe SARIF composition is proven; current `action.yml` rejects `mode: aggregate` with a v1.x message. δ over-engineers a config concept that doesn't exist. Consumers wanting push-event runs pass an explicit `command:` input.
135135

136-
- **Q6 — SARIF rule.id taxonomy under `mode: aggregate`.** _(Deferred to v1.x — superseded Q1 ripple that promoted this to a v1.0 blocker.)_ Single-recipe `--format sarif` is shipped (`rule.id = codemap.<recipe-id>`). Aggregate runs (multiple recipes in one Action invocation) need a stable convention for combining results — likely concat-into-one-sarif-file with rule definitions de-duplicated by `recipe-id`. Verify in GitHub Code Scanning before enabling `mode: aggregate`; fall back to one-SARIF-per-recipe with `category:` if dedup misbehaves.
136+
- **Q6 — SARIF rule.id taxonomy under `mode: aggregate`.** _(Deferred to v1.x — superseded Q1 ripple that promoted this to a v1.0 blocker.)_ Single-recipe `--format sarif` is shipped (`rule.id = codemap.<recipe-id>`). Aggregate runs (multiple recipes in one Action invocation) need a stable convention for combining results — likely concat-into-one-sarif-file with rule definitions de-duplicated by `recipe-id` (each rule appears once in `tool.driver.rules[]`; each finding's `ruleId` matches). Verify in GitHub Code Scanning before enabling `mode: aggregate`; fall back to one-SARIF-per-recipe with `category:` if dedup misbehaves.
137137
- **Q7 — Versioning + `@v1` tag strategy.** Convention: floating `@v1` major tag updated on every minor/patch release; `@v1.2.3` for pin-to-exact. `action.yml` lives at repo root; `dist/` is **not** required for composite actions (only for JS actions).
138138

139139
**Resolution: floating major `@v1` + changesets-driven release.** Cohort norm (`actions/checkout@v4`, `actions/setup-node@v4`, `oven-sh/setup-bun@v2`, …); Renovate/Dependabot-friendly (major tags are the unit they bump on); enforces semver discipline (any input/output break is a v2 bump, never within v1.x).

docs/plans/perf-triangulation-rollout.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,7 @@ Every distinct finding across the five source audits, with per-audit priority. E
8484

8585
The audit's predicted optimisation (per-file `Map.get` hoist saving the ~38ms it estimated from ~1.26M skipped lookups × ~30ns each) was **wrong** — tested both `ORDER BY file_path, id` SQL and JS-side `Map<file, Ref[]>` grouping variants on this repo (340 files) and a 2.1k-file external corpus; both showed 0 to slight regression. V8 already optimises hot `Map.get`; JS-side grouping overhead exceeded any savings.
8686

87-
**Profile-driven actual win:** Bindings-phase profiling revealed `bindings_ms` decomposes as `resolveBindings ≈ 17%` + `persistBindings.insert ≈ 83%` on a 2k-file corpus — the bottleneck was 243k row INSERTs with `foreign_keys=ON` + `synchronous=NORMAL` per row, NOT the resolver loop. Extending the existing bulk-INSERT PRAGMA-OFF window (already used during parallel parse+insert) through the bindings/cycles/re-exports phase saved **-33% `bindings_ms`** on the 2k-file corpus and **-27% here**. Behavior-preserved (stable-snapshot SHA bit-identical on both corpora).
87+
**Profile-driven actual win:** Bindings-phase profiling (`bindings_ms` decomposition instrumentation; no longer a public env var) revealed `bindings_ms` decomposes as `resolveBindings ≈ 17%` + `persistBindings.insert ≈ 83%` on a 2k-file corpus — the bottleneck was 243k row INSERTs with `foreign_keys=ON` + `synchronous=NORMAL` per row, NOT the resolver loop. Extending the existing bulk-INSERT PRAGMA-OFF window (already used during parallel parse+insert) through the bindings/cycles/re-exports phase saved **-33% `bindings_ms`** on the 2k-file corpus and **-27% here**. Behavior-preserved (stable-snapshot SHA bit-identical on both corpora).
8888

8989
The "deeper optimisations (TypedArrays, no-imports fast-path)" the original audit gated on a larger corpus are still untested and may be similarly off — see § Methodology gaps below.
9090

docs/research/codemap-richer-index-synthesis-2026-05.md

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -71,16 +71,16 @@ A1 and A4 share an author but diverge on the agent-angle weighting and AST-engin
7171

7272
These have **6/6** support (counting A1 and A4 separately because their conclusions diverge on emphasis even when the author overlaps). They are the load-bearing claims for the synthesised path; nothing in the disagreement map should override them.
7373

74-
| # | Claim | Supported by |
75-
| --- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
76-
| C1 | The doc reframe (**shipped 2026-05**): [`roadmap.md`](../roadmap.md) Floors now split verdict-shaped lints from the substrate-shaped `codemap apply` executor. The old single "no fix engine" row conflated two product classes. | A1, A2, A3, A4, A5, A6 |
77-
| C2 | The reframe shape: **"No verdict-shaped fix engine"** (preserved — `knip` / `eslint --fix` / `jscpd` own that class) AND **"Substrate-shaped diff executor IS in scope"** (the shipped reality; recipes propose, engine executes, agent confirms). | A1, A2 (implicit), A3 (implicit), A4, A5, A6 |
78-
| C3 | `calls.{line_start, column_start}` is the **highest-ROI single substrate addition.** Closes the rename-preview substrate gap; unblocks app-wide rename of call sites; foundation for replace-deprecated-call recipes; foundation for diagnostic-push hotspot rendering when LSP plan ships. | A1, A2, A3, A4, A5, A6 |
79-
| C4 | **Re-export source locations** are needed (whether as `exports.{line_start, column_start}` columns or a separate `export_locations` table). Re-export alias chains and barrel-safe rewrites both need it. | A1, A2, A3, A4, A5, A6 |
80-
| C5 | More diff-shape recipes are needed in the bundled catalog. Today the count is 1 (`rename-preview`); consensus floor is 3–5 more. Specific candidates with multi-source agreement listed in [§ 4.3](#43-recipe-additions). | A1, A2, A3, A4 (item #4), A5, A6 (implicit) |
81-
| C6 | **Moat A applies to writes by analogue.** Reviewer test: _"is this fix also expressible as `query --recipe <id>` + `apply <recipe-id>`?"_ Pass → moat-clean. Fail → verdict shape; reject. The recipes are the API for writes, same as for reads. | A1, A2, A3, A4, A5, A6 |
82-
| C7 | **Dry-run-first + explicit confirmation gate is correct** and stays. Phase-1-validates-before-phase-2-writes pattern preserved; non-TTY without `--yes` rejected. | A1, A2, A3, A4, A5, A6 |
83-
| C8 | **Watch + apply + reindex is the agent loop.** Default-ON watch on long-running transports keeps reads fresh; codemap-specific structural verification (the index reflects disk truth) is sufficient for the agent path; full typecheck/lint/tests verifier is consumer-side. | A1, A4, A6 explicit; A2, A3, A5 don't contradict |
74+
| # | Claim | Supported by |
75+
| --- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------ |
76+
| C1 | The doc reframe (**shipped 2026-05**): [`roadmap.md`](../roadmap.md) Floors now split verdict-shaped lints from the substrate-shaped `codemap apply` executor (`apply-engine.ts`, `cmd-apply.ts`, `rename-preview.sql`; see [`glossary.md`](../glossary.md) Substrate-shaped fix executor). The old single "no fix engine" row conflated two product classes. | A1, A2, A3, A4, A5, A6 |
77+
| C2 | The reframe shape: **"No verdict-shaped fix engine"** (preserved — `knip` / `eslint --fix` / `jscpd` own that class) AND **"Substrate-shaped diff executor IS in scope"** (the shipped reality; recipes propose, engine executes, agent confirms). | A1, A2 (implicit), A3 (implicit), A4, A5, A6 |
78+
| C3 | `calls.{line_start, column_start}` is the **highest-ROI single substrate addition.** Closes the rename-preview substrate gap; unblocks app-wide rename of call sites; foundation for replace-deprecated-call recipes; foundation for diagnostic-push hotspot rendering when LSP plan ships. | A1, A2, A3, A4, A5, A6 |
79+
| C4 | **Re-export source locations** are needed (whether as `exports.{line_start, column_start}` columns or a separate `export_locations` table). Re-export alias chains and barrel-safe rewrites both need it. | A1, A2, A3, A4, A5, A6 |
80+
| C5 | More diff-shape recipes are needed in the bundled catalog. Today the count is 1 (`rename-preview`); consensus floor is 3–5 more. Specific candidates with multi-source agreement listed in [§ 4.3](#43-recipe-additions). | A1, A2, A3, A4 (item #4), A5, A6 (implicit) |
81+
| C6 | **Moat A applies to writes by analogue.** Reviewer test: _"is this fix also expressible as `query --recipe <id>` + `apply <recipe-id>`?"_ Pass → moat-clean. Fail → verdict shape; reject. The recipes are the API for writes, same as for reads. | A1, A2, A3, A4, A5, A6 |
82+
| C7 | **Dry-run-first + explicit confirmation gate is correct** and stays. Phase-1-validates-before-phase-2-writes pattern preserved; non-TTY without `--yes` rejected. | A1, A2, A3, A4, A5, A6 |
83+
| C8 | **Watch + apply + reindex is the agent loop.** Default-ON watch on long-running transports keeps reads fresh; codemap-specific structural verification (the index reflects disk truth) is sufficient for the agent path; full typecheck/lint/tests verifier is consumer-side. | A1, A4, A6 explicit; A2, A3, A5 don't contradict |
8484

8585
These eight are the **non-negotiable spine** of any synthesis path. Every step in [§ 6](#6-synthesised-12-step-path-with-open-implementation-questions) preserves them.
8686

@@ -527,10 +527,10 @@ The minimum synthesis preserving every consensus claim (§ 2) and resolving ever
527527

528528
**Source ancestry:** C1, C2; all six positions.
529529

530-
**Open questions:**
530+
**Open questions (resolved on ship):**
531531

532-
1. Two distinct rows or one row with two clauses? Bias toward two distinct rows — they're independent product-class decisions and each should grep / cite cleanly.
533-
2. Lift any salvageable text from the existing row 45 ("Adjacent to Moat A" framing)? Yes — both new rows reference Moat A.
532+
1. Two distinct rows or one row with two clauses? **Shipped: two distinct rows** in [`roadmap.md`](../roadmap.md) Floors.
533+
2. Lift any salvageable text from the existing row 45 ("Adjacent to Moat A" framing)? **Yes** — both new rows reference Moat A.
534534

535535
### Step 2 — Three more diff-shape recipes (S × 3)
536536

0 commit comments

Comments
 (0)