feat: consolidate TraceDecay V2 PR8-PR13 delivery - #421
feat: consolidate TraceDecay V2 PR8-PR13 delivery#421ScriptedAlchemy wants to merge 6188 commits into
Conversation
|
e50f8f5 to
4f5ab66
Compare
|
@codex review |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 986f25cca6
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
5862bd6 to
53502de
Compare
642a33a to
5f2f610
Compare
76dee0f to
0258866
Compare
Record the 2026-07-27 audit in the authoritative V2 status files. Three delivered claims (Plan 16 worktree/store identity, Plan 38 cursor repair, Plans 18/23 end-to-end sanitization) lost their tests in 9e3ca9f. Filed as verification-coverage corrections, not retractions: the assertion is missing, the behavior is not withdrawn. Also record the six instances of gates attesting to something they never checked, the libtest empty-filter asymmetry that hides them, the six product defects fixed tonight with their SHAs, and Plan 11's corrected open-gap list including two items the widened accessibility matrix surfaced. None of tonight's commits has CI validation: PR #421 has been conflicting since 05:13 UTC, so no CI has run since 01:24 UTC. Every fix is recorded as locally verified only.
062285a to
b73f8bf
Compare
ef68e05 to
f92b7f9
Compare
Record the 2026-07-27 audit in the authoritative V2 status files. Three delivered claims (Plan 16 worktree/store identity, Plan 38 cursor repair, Plans 18/23 end-to-end sanitization) lost their tests in 9e3ca9f. Filed as verification-coverage corrections, not retractions: the assertion is missing, the behavior is not withdrawn. Also record the six instances of gates attesting to something they never checked, the libtest empty-filter asymmetry that hides them, the six product defects fixed tonight with their SHAs, and Plan 11's corrected open-gap list including two items the widened accessibility matrix surfaced. None of tonight's commits has CI validation: PR #421 has been conflicting since 05:13 UTC, so no CI has run since 01:24 UTC. Every fix is recorded as locally verified only.
1486ceb to
f44f5c5
Compare
Formatting only, no behavior change. These three files were left unformatted by the interactive-graph cutover and the ambiguity-refusal follow-up. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Cancelling in progress discards the only complete signal a long matrix produces: a run that is 40 minutes in and about to report is killed by the next push, so a busy branch can go a long time without ever completing a full matrix. Letting superseded runs finish costs runner time and buys an actual verdict. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Wire PerformanceBudgets, PerformanceComparisons, and AnalyticsControls into the Observatory page column, between the hook-hint funnel and store telemetry. The three views are self-contained: each owns its own read, so a refused budget projection cannot blank the consent controls beside it, and the page lifts no state on their behalf. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
The projection already carried every file's logical path: builder.rs serializes the whole SanitizedCodeFileV1 under the file record property. The interactive catalog then skipped every file-labelled entity, so the path was written on publish and never read back. symbols_in_file consequently demanded a FileOccurrenceId that no dashboard or MCP caller holds, leaving file-scoped reads unreachable from the published generation. - Index logical path to file occurrence while building the symbol catalog, ingesting file-labelled entities instead of skipping them. - Verify each file entity's identity against its payload, matching the check the symbol path already performs, and refuse a generation in which two distinct file occurrences claim one logical path as typed Corrupt rather than silently picking a winner. - Add symbols_in_logical_file, which answers an unknown path with an empty listing (a truthful "not in this generation") while keeping the zero-limit refusal and cancellation handling of its occurrence-keyed sibling. - Move file entity identity into the parent projection module beside symbol entity identity, so builder and reader share one definition. A re-derived copy would have been a second identity authority, which the graph identity ruling rejected. The scan budget and its Corrupt overrun guard are unchanged; file ingestion runs inside the same paging and cancellation checks as symbol ingestion. HANDOFF (GRAPH-CRATES lane; crates/tracedecay-graph-db, -code-index, -usecases). Committed under a wind-down order, not pushed. VERIFICATION STATUS - This commit is UNVERIFIED. Its build was queued as symbolgraph-10 (cargo test -p tracedecay-code-index --lib graph_projection) and had not reached the front of the shared queue when the order landed. It was written without a compiler. Highest-risk items to check first: the SanitizedCodeFileV1 deserialize bound in build_catalog, and the file_entity_id import now resolving from the parent module in both builder.rs and interactive.rs. - Everything already on the branch IS verified, at a pristine snapshot: code-index graph_projection::interactive::tests 18 passed / 0 failed, and usecases graph::queries::bounded_adjacency_tests 4 passed / 0 failed. That closes the previously uncompiled test halves of the strata paging fix and of degree ranking, including the tripwire asserting the pre-fix unpaged statement is still refused at 10 001 distinct cross-file pairs. - The shared worktree could NOT build these crates: crates/tracedecay-policy work_loop.rs:556 is dirty peer WIP missing four fields on the work proposal decision initializer, which fails every downstream crate. Verification ran in a pristine git archive snapshot instead. That break is not this lane's and was still present at commit time. REMAINING WORK - Graph identity bridge, hydration half: BLOCKED. nodes.symbol_occurrence_id does not exist in the canonical schema (runtime-core db/migrations.rs:115) or anywhere in the write path. The storage owner has neither acknowledged nor landed it. Until it does, the ruled join key and the indexer write-at-mint cannot be built. The ruling's binding condition that a read whose published generation moved past the binding answers a typed staleness refusal is also unimplementable without it. - Reader-side staleness, a real and separately actionable gap: the published generation watermark is checked only at reader construction (graph_projection.rs:284-309). Every read method then goes through read_cancellation (interactive.rs:699-711), which re-checks cancellation only and never re-reads the current generation marker. A reader held across a later publication keeps serving its pinned snapshot. There is also no dedicated staleness variant: GenerationMismatch is overloaded for both a foreign generation id and a moved marker. - Dashboard adjacency cutover: THREE of the four functions granted to this lane (caller_rows, callee_rows, neighborhood_edge_rows) no longer exist. The seam owner cut them over in bfad7ab, with the ruled typed ambiguity refusal following in a82d06e. Only subgraph_candidate_rows remains as SQL, called once at dashboard_graph.rs:599 inside the seeded subgraph path, which still assembles candidates and edges relationally via edge_rows_for_ids. That is the last adjacency read left to cut, and the interactive reader already has what it needs: impact for seeded expansion and edges_among for the induced edge set. - Remaining graph-db dead-code warnings are triaged and are NOT unfinished features: GraphDb::open, GraphDbOwner::open/is_closed and GraphDbRegistry::reopen/remove_closed_fault form one test-harness surface paralleling the wired production path (open_with_store_state, open_registered_graph, recover_verified_snapshot). They need cfg gating or deletion, not wiring. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Summary
This draft PR is the consolidated delivery branch for TraceDecay V2 PR8 through PR13.
The branch also contains the supporting rusqlite runtime cutover, worktree-aware incremental indexing, storage retention/Doctor integration, and direct product tests required by the canonical V2 plans.
Verification
cargo check --all-featurescargo test --all-featurescargo clippy --workspace --all-targets --all-features -- -D warningscargo fmt --all -- --checkCurrent status: implementation is still being consolidated from the shared checkout and CI is red. This PR remains draft until the working tree is committed, broad verification is stable, and the historical conventional-commit blocker is resolved. It must not be merged in its current state.
Safety boundaries
GitHub review ingestion is read-only. Semantic indexing never blocks exact/lexical/graph retrieval and publishes only complete compatible generations. Local coordination logs, private transcript evidence, secrets, and ad hoc artifacts are excluded from commits.