Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
134 commits
Select commit Hold shift + click to select a range
a7b08f2
perf(code-index)!: shrink index artifacts, share across worktrees
ScriptedAlchemy Sep 23, 2026
713e496
refactor(storage)!: delete legacy store formats and upgrade paths
ScriptedAlchemy Sep 23, 2026
d69afda
refactor(hosts)!: one install path; drop backups and old cleanup
ScriptedAlchemy Sep 23, 2026
de31b69
refactor(daemon)!: collapse dual daemon, MCP and contract paths
ScriptedAlchemy Sep 23, 2026
e489a10
refactor(dashboard)!: generated contracts only; docs and SDK
ScriptedAlchemy Sep 23, 2026
c223ba3
docs(code-index): record lexical artifact revision 26 sizes
ScriptedAlchemy Sep 23, 2026
0c1e2d1
fix(fs)!: unlock file leases before close; continue legacy removal
ScriptedAlchemy Sep 23, 2026
d043d74
fix(mcp): drop notifications after a refused rmcp initialize
ScriptedAlchemy Sep 23, 2026
807fac2
refactor(automation)!: one wire form for skips and skill proposals
ScriptedAlchemy Sep 23, 2026
3107e58
test(dashboard): assert observed behavior, drop constant pins
ScriptedAlchemy Sep 24, 2026
7ec0b09
test(dashboard): decode doctor findings with storage kind statuses
ScriptedAlchemy Sep 24, 2026
08f9697
test(store): assert observed behavior instead of constant pins
ScriptedAlchemy Sep 24, 2026
692b986
test(catalog): assert literal wire forms, drop constant pins
ScriptedAlchemy Sep 24, 2026
3edd91b
test(extraction): assert literal extractor output, drop weak pins
ScriptedAlchemy Sep 24, 2026
b1e3e30
test(catalog): decode an LCM as_of cutoff through the shared adapter
ScriptedAlchemy Sep 24, 2026
a2d66e7
fix(extraction): keep BASIC underscore names, adjacent C docstrings
ScriptedAlchemy Sep 24, 2026
b80561b
test(extraction): pin literal output across per-language suites
ScriptedAlchemy Sep 24, 2026
a460ae6
docs(project): drop dead compile_fail examples and stale paths
ScriptedAlchemy Sep 24, 2026
ac1bf4f
test: pin literal observed results, drop self-referential checks
ScriptedAlchemy Sep 24, 2026
eedb4be
test(automation): prove current shapes load beside legacy refusals
ScriptedAlchemy Sep 24, 2026
364feb8
perf(sessions)!: prune settled cursor advance rows
ScriptedAlchemy Sep 24, 2026
ad010c7
test(tracedecay): assert literal results, drop inventories and floors
ScriptedAlchemy Sep 24, 2026
671f746
refactor(search-eval)!: evaluate on the production lexical artifact
ScriptedAlchemy Sep 24, 2026
4b100b2
refactor(fs)!: refuse unsafe roots instead of healing old layouts
ScriptedAlchemy Sep 24, 2026
9b18616
fix(mcp): treat params emptied by lifted _meta as absent
ScriptedAlchemy Sep 24, 2026
b2df675
test(mcp): pin literal protocol frames, send hooks as requests
ScriptedAlchemy Sep 24, 2026
067f3a6
refactor(retention)!: stop collecting per-scope segment directories
ScriptedAlchemy Sep 24, 2026
c6b5c59
test(code-index): pin literal page imports and test attribution
ScriptedAlchemy Sep 24, 2026
aff170d
fix(mcp): answer ping on stateless rmcp connections
ScriptedAlchemy Sep 24, 2026
1baebaf
test: assert observed behavior instead of pins and tombstones
ScriptedAlchemy Sep 24, 2026
4ad3656
test(hosts): write receipts at the current schema, drop backup check
ScriptedAlchemy Sep 24, 2026
7843ac5
test(transport): grade code parity by each surface's tool spelling
ScriptedAlchemy Sep 24, 2026
f785693
test(catalog): assert composed profile budgets, drop tripwires
ScriptedAlchemy Sep 24, 2026
fac6223
fix(automation)!: refuse managed skill records without timestamps
ScriptedAlchemy Sep 24, 2026
6dd079b
fix(daemon): close released store runtimes at shutdown
ScriptedAlchemy Sep 24, 2026
759c5a3
fix(hosts): unlock abandoned host config locks explicitly
ScriptedAlchemy Sep 24, 2026
04076d3
test(daemon): run the watchdog child under its current path
ScriptedAlchemy Sep 24, 2026
ef5fe39
fix(automation): report invalid skill records as one config error
ScriptedAlchemy Sep 24, 2026
e8cfabd
test(mcp): key the store template on the LCM schema version
ScriptedAlchemy Sep 24, 2026
e5a1f00
fix(dashboard): draw kinds from a fixed cool ordinal ramp
ScriptedAlchemy Sep 24, 2026
633844c
fix(dashboard): give workflows panel radii and subtle hairlines
ScriptedAlchemy Sep 24, 2026
08da172
test(dashboard): serve memory projection and similarity fixtures
ScriptedAlchemy Sep 24, 2026
73b66dd
feat(dashboard): explore three loom scene renderers
ScriptedAlchemy Sep 24, 2026
2bb6411
fix(dashboard): set shell and owned workspaces on 14px body type
ScriptedAlchemy Sep 24, 2026
8ded446
fix(dashboard): give observatory titles and lane select 44px targets
ScriptedAlchemy Sep 24, 2026
fbafa57
fix(dashboard): size loom tick pitch to its label
ScriptedAlchemy Sep 24, 2026
94b51f1
feat(dashboard): explore three brain field renderers
ScriptedAlchemy Sep 24, 2026
e553287
fix(dashboard): register the scatter series the memory projection draws
ScriptedAlchemy Sep 24, 2026
e8e1191
feat(dashboard): explore three cortex renderers
ScriptedAlchemy Sep 24, 2026
49b0bae
feat(dashboard): explore three delivery renderers
ScriptedAlchemy Sep 24, 2026
b81a3bd
fix(mcp): carry typed tool problems as MCP structured content
ScriptedAlchemy Sep 24, 2026
da4c2c6
simplify(automation): drop managed skill timestamp backfill
ScriptedAlchemy Sep 24, 2026
459cf07
test(mcp): assert typed dispatch refusals and exact format schema
ScriptedAlchemy Sep 24, 2026
6ab055c
feat(dashboard): one luminous loom scene with density zoom
ScriptedAlchemy Sep 24, 2026
1df028f
feat(dashboard): explore agents and work renderers
ScriptedAlchemy Sep 24, 2026
052849e
feat(dashboard): explore three trace renderers
ScriptedAlchemy Sep 24, 2026
0b84bab
feat(dashboard): brain registry as a measured point field
ScriptedAlchemy Sep 24, 2026
cf77177
fix(dashboard): restore agents and cortex files swept into 0b84bab7b8
ScriptedAlchemy Sep 24, 2026
eb3726f
feat(dashboard): explore three knowledge renderers
ScriptedAlchemy Sep 24, 2026
4ac9710
feat(dashboard): delivery lanes inbox and transit journey
ScriptedAlchemy Sep 24, 2026
dcca5df
feat(dashboard): code cortex as a relief field
ScriptedAlchemy Sep 24, 2026
ec7949c
feat(dashboard): trace as a symbol anatomy plate
ScriptedAlchemy Sep 24, 2026
1e91ac5
refactor(dashboard)!: delete the Sigma graph renderer
ScriptedAlchemy Sep 24, 2026
a757213
feat(dashboard): agents rings and timeline; fitted and matrix work views
ScriptedAlchemy Sep 24, 2026
d898388
docs(dashboard): drop comments naming the deleted trace renderer
ScriptedAlchemy Sep 24, 2026
9323d44
feat(loom): carry session parentage and edit timestamps on the wire
ScriptedAlchemy Sep 24, 2026
25167d6
feat(dashboard): agents topology reads per-node provider usage
ScriptedAlchemy Sep 24, 2026
46d0132
feat(dashboard): knowledge facts as provenance cameras
ScriptedAlchemy Sep 24, 2026
ee7a83f
test(cli): write probe scripts outside the forking test process
ScriptedAlchemy Sep 24, 2026
d89196b
feat(dashboard): loom branches from session parentage
ScriptedAlchemy Sep 24, 2026
933858a
fix(dashboard): restore the cortex relief field reverted by ee7a83f146
ScriptedAlchemy Sep 24, 2026
6688478
refactor(cli)!: drop the automation config scope flag
ScriptedAlchemy Sep 24, 2026
5db01ea
test(cli): route fixture daemons through published authority records
ScriptedAlchemy Sep 24, 2026
467a352
test(cli): follow one host install path and the git identity marker
ScriptedAlchemy Sep 24, 2026
fd4a8e9
test(transport): read MCP partial effects from structured content
ScriptedAlchemy Sep 24, 2026
434f18d
fix(windows): compare admitted roots in their published spelling
ScriptedAlchemy Sep 24, 2026
4e3da64
fix(windows): look up transcript checkpoints by identity key
ScriptedAlchemy Sep 24, 2026
145ca13
fix(windows): honor held handles in file lifecycle checks
ScriptedAlchemy Sep 24, 2026
81dbde3
test(windows): spell fixture roots the way Windows reads them
ScriptedAlchemy Sep 24, 2026
423f7c9
fix(test): mount the host CLI fixture provisioner on Windows
ScriptedAlchemy Sep 24, 2026
84ed7a7
test(lcm): keep the auxiliary-contract test off the real cursor-agent
ScriptedAlchemy Sep 24, 2026
4f9ee93
fix(dashboard): keep night ink inside the optical window in light
ScriptedAlchemy Sep 24, 2026
3e700a3
fix(dashboard): one hover, selection and grade language on canvases
ScriptedAlchemy Sep 24, 2026
127c7f2
fix(dashboard): 44px targets and 320px reflow on canvas workspaces
ScriptedAlchemy Sep 24, 2026
a761c4c
fix(dashboard): draw a withheld fact and count only undrawn ones
ScriptedAlchemy Sep 24, 2026
6e74ffe
fix(dashboard): contain the Brain field at 320
ScriptedAlchemy Sep 24, 2026
aef4760
fix(dashboard): night ink for the cortex HUD in light
ScriptedAlchemy Sep 24, 2026
9712d72
fix(dashboard): fit the cortex camera once, not from k = 1
ScriptedAlchemy Sep 24, 2026
fbce541
test(dashboard): pin the audit's clock and motion so captures repeat
ScriptedAlchemy Sep 24, 2026
7ab30b8
test(dashboard): rebaseline visual audit for the redesigned canvases
ScriptedAlchemy Sep 24, 2026
bfc5855
fix(dashboard): one Loom tab stop with an arrow-key event walk
ScriptedAlchemy Sep 24, 2026
1fbc75b
fix(dashboard): Work relation kinds ride end markers, not dashes
ScriptedAlchemy Sep 24, 2026
2ff3548
fix(dashboard): legend sentences in Plex Sans, values in Mono
ScriptedAlchemy Sep 24, 2026
89dd8d1
fix(dashboard): Delivery hint strip no longer covers the last lane
ScriptedAlchemy Sep 24, 2026
c74a0c2
fix(dashboard): stack the shell register below sm
ScriptedAlchemy Sep 24, 2026
338ffb7
fix(dashboard): reflow Loom's zoom and tail controls at 320
ScriptedAlchemy Sep 24, 2026
35c35a8
fix(dashboard): a camera frame with withheld facts comes first
ScriptedAlchemy Sep 24, 2026
13e57c4
test(dashboard): rebaseline after audit findings
ScriptedAlchemy Sep 24, 2026
65fce46
perf(rusqlite): retire external-source history incrementally
ScriptedAlchemy Sep 24, 2026
46abb5f
test(code-index): stage the orphan text artifact under the scope root
ScriptedAlchemy Sep 24, 2026
c761af6
fix(daemon): keep live operation streams across composition shutdown
ScriptedAlchemy Sep 24, 2026
bee48b9
perf(sessions)!: store message text once in lcm_raw_messages
ScriptedAlchemy Sep 24, 2026
1c4410d
fix(sessions): anchor summaries built from summaries
ScriptedAlchemy Sep 24, 2026
3c1b116
test(cli): let the fake codex plugin add accept --json
ScriptedAlchemy Sep 24, 2026
e1182fd
fix(global-db): type authority schema drift as a reset refusal
ScriptedAlchemy Sep 24, 2026
64f598d
test(sessions): project Claude fixtures through the host normalizer
ScriptedAlchemy Sep 24, 2026
b418065
fix(sessions)!: resolve summarizer binaries only through configuration
ScriptedAlchemy Sep 24, 2026
74146ce
fix(contracts): page callees at the lane budget; probe per-op pages
ScriptedAlchemy Sep 24, 2026
d36d4f2
fix(test): gate the systemd socket snapshot test to Unix
ScriptedAlchemy Sep 24, 2026
698bd75
build(git): check embedded SQL out with LF endings
ScriptedAlchemy Sep 24, 2026
a72d799
fix(test): gate the shell summarizer fixtures to Unix
ScriptedAlchemy Sep 24, 2026
dbb14c6
fix(daemon): release profile and scout store leases at shutdown
ScriptedAlchemy Sep 24, 2026
b0e807f
refactor(mcp)!: serve graph and port reads through their daemon owner
ScriptedAlchemy Sep 24, 2026
8806c07
feat(sessions): record edit times and tool-use ids on the wire
ScriptedAlchemy Sep 24, 2026
348d940
fix(windows): recover scope retention and long private archives (#1958)
ScriptedAlchemy Sep 24, 2026
ef36d93
test(windows): release fixture handles before mutation (#1970)
ScriptedAlchemy Sep 24, 2026
39523e5
perf(sessions)!: one summary authority for LCM reads
ScriptedAlchemy Sep 24, 2026
b0ee581
chore: merge master into simplify/delete-legacy-shims
ScriptedAlchemy Sep 24, 2026
7a05fc7
test(mcp): take the single fixture callers_coverage now returns
ScriptedAlchemy Sep 24, 2026
b0a219b
fix(runtime): page true relation counts and share tool trailers
ScriptedAlchemy Sep 24, 2026
48a675b
docs: tighten prose in branch-edited docs
ScriptedAlchemy Sep 24, 2026
f7bc4a3
style: describe current formats in comments, drop narration
ScriptedAlchemy Sep 24, 2026
ddcd564
test(dashboard): replace legend and palette pins with mechanisms
ScriptedAlchemy Sep 24, 2026
04dce9f
test: assert typed refusals instead of any Err
ScriptedAlchemy Sep 24, 2026
86f46cb
test: pin exact effects where tests could not fail
ScriptedAlchemy Sep 24, 2026
03c1565
test(query): assert the matched field under a field filter
ScriptedAlchemy Sep 24, 2026
c46389f
chore: merge master into simplify/delete-legacy-shims
ScriptedAlchemy Sep 24, 2026
e1ce35f
style: apply rustfmt to the branch's unformatted sources
ScriptedAlchemy Sep 24, 2026
8493c66
test(hosts): follow one install path in stock and CLI journeys
ScriptedAlchemy Sep 24, 2026
a770d90
test(mcp): pin broker half-close for owed and request-less peers
ScriptedAlchemy Sep 24, 2026
7b85689
fix(lint): box oversized results and clear workspace clippy denials
ScriptedAlchemy Sep 24, 2026
b3b4229
fix(hosts): edit JSON host configs in place, keep operator bytes
ScriptedAlchemy Sep 24, 2026
0b9171f
fix(hosts): edit Codex config.toml in place, keep operator bytes
ScriptedAlchemy Sep 24, 2026
37dcd39
Merge origin/master into simplify/delete-legacy-shims
ScriptedAlchemy Sep 25, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
4 changes: 2 additions & 2 deletions .cargo/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -70,8 +70,8 @@ rustflags = ["-C", "split-debuginfo=unpacked"]
# results, 8 threads, slow-timeout termination), the root fixture feature and
# `search-eval`, which is what compiles the evaluator acceptance suites (the
# root crate's dependency on the evaluator is optional so the Linux transport
# partition does not build the eval-only lexical projection; a `--workspace`
# run resolves the evaluator anyway). `.github/workflows/ci.yml` runs this
# partition does not link it; a `--workspace` run resolves the evaluator
# anyway). `.github/workflows/ci.yml` runs this
# exact alias, and its support binaries/archives are built with `--profile
# perf` so they share artifacts with it. Extra flags append: `cargo test-ci
# --locked -E 'binary(=x)'`.
Expand Down
7 changes: 4 additions & 3 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
# Force LF line endings for test fixtures. Tree-sitter grammars
# expect Unix line endings and produce wrong parse trees with CRLF.
tests/fixtures/** text eol=lf
# The embedded SQL fixture's definitions feed the exact configuration schema
# digest; checkout line-ending conversion must not change those definitions.
crates/tracedecay-global-db/src/configuration/store/tests/fixtures/configuration-registry-revision3.sql text eol=lf
# Embedded SQL is executed verbatim and its stored definitions feed exact
# schema-shape digests; a CRLF checkout rewrites those definitions and makes
# a released shape read as foreign.
*.sql text eol=lf
# The search-quality candidate workload pins each corpus document against the
# blob in the pinned source tree, and the packaged evaluator assets are pulled
# into the binary with include_bytes! under a pinned digest. One corpus
Expand Down
7 changes: 3 additions & 4 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -461,9 +461,8 @@ jobs:
# `tracedecay-search-eval`) with the root fixture feature. Journeys also
# enable `tracedecay/search-eval`, the only link from the root crate to the
# evaluator library. It stays off every other partition: an unconditional
# dependency unifies `tracedecay-query/search-eval` into every test
# target of the package, and the transport suites then compile the eval-only
# lexical projection. Every cargo invocation inside a job (the test build,
# dependency links the evaluator into every test target of the package.
# Every cargo invocation inside a job (the test build,
# the executables the suites spawn) is a cache hit against that job's
# resolution. `scripts/linux-test-partitions.py check` proves, from `cargo
# metadata`, that every test target in the workspace is selected by exactly
Expand Down Expand Up @@ -859,7 +858,7 @@ jobs:
# Acceptance tests execute the ordinary evaluator binaries, and
# `tracedecay/search-eval` is what compiles the suites that check the
# CLI receipt against the library. This lane builds `--workspace`, so
# the evaluator and `tracedecay-query/search-eval` already resolve here
# the evaluator already resolves here
# and the feature adds no compilation; the Linux partitions split the
# package selection, which is why it is per-partition there. Match the
# archive's features and perf profile to reuse dependency artifacts;
Expand Down
26 changes: 22 additions & 4 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,7 @@ rusqlite = { version = "0.40.1", default-features = false, features = ["backup",
# resolve the same object database and status implementation, so a feature
# added for one is never missing for the other.
gix = { version = "=0.87.1", default-features = false, features = ["revision", "blob-diff", "parallel", "sha1", "sha256", "status"] }
schemars = "1.2.1"

[profile.bench]
opt-level = 3
Expand Down
3 changes: 1 addition & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,6 @@ the installed cache is loaded.
tracedecay daemon install-service # install + start the daemon (required before init)
tracedecay init [path] # enroll a project and publish its first generation
tracedecay sync [path] # explicit administrative refresh
tracedecay sync --force [path] # explicit full generation refresh
tracedecay status [path] # graph stats, freshness, savings, cost
tracedecay tool # list every MCP tool
tracedecay tool search "<query>" # CLI symbol search
Expand All @@ -124,7 +123,7 @@ list and `tracedecay tool <name> --help` for one tool's parameters.

The MCP server exposes tools grouped around normal coding workflows:

- Discovery: `tracedecay_context`, `tracedecay_search`, `tracedecay_outline`, `tracedecay_files`
- Discovery: `tracedecay_context`, `tracedecay_search`, `tracedecay_source_outline`, `tracedecay_files`
- Graph traversal: `tracedecay_callers`, `tracedecay_callees`, `tracedecay_impact`, `tracedecay_affected`
- Code health: `tracedecay_complexity`, `tracedecay_dead_code`, `tracedecay_unmounted_files`, `tracedecay_coupling`, `tracedecay_test_risk`
- Git workflow: `tracedecay_diff_context`, `tracedecay_pr_context`, `tracedecay_changelog`, `tracedecay_test_map`
Expand Down
4 changes: 2 additions & 2 deletions SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ tracedecay builds a **local** code graph stored in the active project store. Rep
- Call relationships and dependency edges
- FTS5 search index
- Cross-session memory: durable facts, named entities, code-area notes, decisions, and feedback events in the holographic fact store. Those rows are local-only project data.
- A response cache for `tracedecay_read` (`read_cache` table): the rendered output served to the agent, stored as a BLOB keyed by file path, mode, and arguments. For full/line-range reads this rendered output contains source text. Rows are freshness-gated by file mtime and swept after a period of inactivity.
- A response cache for mode-aware source reads (`read_cache` table): the rendered output served to the agent, stored as a BLOB keyed by file path, mode, and arguments. For full/line-range reads this rendered output contains source text. Rows are freshness-gated by file mtime and swept after a period of inactivity.

Aside from the `read_cache`, the graph itself does **not** persist raw source code. It stores structural metadata only. The active project store is local-only. There is no cloud sync, remote database, or server-side storage.

Expand Down Expand Up @@ -148,7 +148,7 @@ The Windows-elevation `unsafe` documented in earlier versions was removed alongs
## Best Practices

- Add `.tracedecay/` to your `.gitignore` to avoid committing local store markers or repo-local databases.
- If your project contains sensitive code, be aware that the database stores symbol names and signatures, and the `read_cache` table can hold rendered source text from `tracedecay_read` responses. Keeping repo-local store directories ignored and treating profile-sharded stores as private user data keeps both out of version control.
- If your project contains sensitive code, be aware that the database stores symbol names and signatures, and the `read_cache` table can hold rendered source text from source-read responses. Keeping repo-local store directories ignored and treating profile-sharded stores as private user data keeps both out of version control.
- Keep tracedecay updated (`tracedecay upgrade`) to receive security fixes.
- Review the [CHANGELOG](CHANGELOG.md) before upgrading to understand what changed.

Expand Down
20 changes: 13 additions & 7 deletions benchmark_data/run_benchmarks.py
Original file line number Diff line number Diff line change
Expand Up @@ -342,14 +342,20 @@ def avg_ms(samples: list[int]) -> float | None:
]
out["find_symbol_avg_ms"] = avg_ms(find_us)

body_us = [
d
for q in queries
if (
d := handler_us(mcp.call_tool("tracedecay_body", {"symbol": q, "limit": 1}))
# Name-to-source is an exact lookup followed by `tracedecay_source_body`.
body_us: list[int] = []
for q in queries:
fresp = mcp.call_tool(
"tracedecay_find_exact_symbol", {"name": q, "limit": 1, "format": "json"}
)
is not None
]
try:
matches = json.loads(fresp["result"]["content"][0]["text"])["matches"]
node_id = matches[0]["id"]
except (KeyError, IndexError, TypeError, json.JSONDecodeError):
continue
bus = handler_us(mcp.call_tool("tracedecay_source_body", {"node_id": node_id}))
if bus is not None:
body_us.append((handler_us(fresp) or 0) + bus)
out["get_function_source_avg_ms"] = avg_ms(body_us)

impact_us: list[int] = []
Expand Down
28 changes: 6 additions & 22 deletions benchmark_data/transport-boundary/README.md
Original file line number Diff line number Diff line change
@@ -1,26 +1,10 @@
# Transport-boundary direct test fixture
# Transport-boundary compile baseline

> **Historical evidence only.** Preserve the real fixture and provenance in
> this directory. Current requirements come only from the
> `docs/plans/tracedecay-v2/` hierarchy; exact commands, test names/counts,
> snapshots, receipts, attestations, PR packets, and gate fields below are not
> rebuild instructions. Validate current transport behavior directly.

This directory supplies a checked-in real fixture to the direct product test
for the callable application transport boundary. It is not an acceptance packet,
snapshot, gate manifest, or separate evidence authority. Product acceptance
comes from direct tests and normal CI, with pending work reported as pending.

`goldens/application-surface-parity.json` is consumed by
`tests/api_application_parity.rs`. Together they require:

- identical request/result contracts and binding identities for Git preview,
Git apply, feedback diagnostics, feedback get, feedback expand, and feedback
list across CLI, MCP, and HTTP dispatch;
- all four feedback reads to reach a callable owner and conceal an unknown
request handle as `not_found_or_not_authorized`, never `unavailable`;
- HTTP and SSE to project the same canonical feedback payload; and
- concealed HTTP problems to omit binding identity.
> **Historical evidence only.** Current requirements come only from the
> `docs/plans/tracedecay-v2/` hierarchy; exact commands and fields below are
> not rebuild instructions.
> `crates/tracedecay/tests/product_surface_suite/api_application_parity.rs`
> verifies transport parity directly.

The compile workload remains executable, but its measurement is explicitly
pending execution. Static validation does not run Cargo:
Expand Down
Loading
Loading