Memory comparisons from the main analysis

The matrix builder, table renderer, and analyzer read the retained sets produced by analyse-agentic-system. Their common input is each generated review under kb/agentic-systems/reviews/, its analysis-artifact path and SHA-256, and the byte-identical set retained under kb/agentic-systems/reports/retained/<run-id>/: the readers verify the set's manifest, ARTIFACT.yaml, take identity and the source register from the overview and the comparison profile from memory.md, and validate each member. Retained sets take part in collection-wide validation under the current contract; only the legacy reports/retained-archive/ is excluded, because its historical contracts differ. Publication and these readers also validate each selected set explicitly. They do not require local run state, source checkouts, legacy reviews, or a prior CSV. The memory report contract defines the scoped comparison fields and evidence assessments.

Run from the repository root:

uv run python scripts/build_systems_matrix.py
uv run python scripts/render_systems_table.py
uv run python scripts/analyze_matrix.py

The first two commands write memory-systems.csv and memory-systems-table.md in this directory. All three read the retained sets directly; the renderer and analyzer do not depend on the CSV being present. Repeat --review <main-review-path> to select a bounded population. Otherwise every generated main review is selected, and missing or invalid evidence blocks the operation. Select only one review per source identity; repeat runs do not count as distinct systems. Builder and renderer accept --output <path> for an isolated trial.

Each CSV row records the source, run, boundary, tier, compared scope, and the hashes of the review and the manifest (artifact_sha256). Axis values are JSON arrays with separate coverage assessment, JSON per-value evidence maps, and canonical-record columns. Each evidence entry retains its basis, supporting records and rationale. The members carry the source evidence. The table separates code-grounded and doc-grounded sets and links both the public review and the overview. Statistics count code-grounded wired, observed, or causally supported values, including supported positives under partial coverage; the remainder is not inferred absent. Weaker bases and coverage assessments are reported separately. Entropy and redundancy require known coverage and strong evidence for every member, treating the complete set as one category. Evidenced absences remain a separate category. Denominators describe this selected population only.

Existing reviews without a retained set and normalized comparison fields need regeneration through the main analysis before inclusion. Do not patch generated findings, reuse an old CSV value, or infer absence from an omission. Use an explicit review list to compare only regenerated inputs. The old matrix and table under kb/agent-memory-systems/ remain historical snapshots; these commands no longer rebuild them. Public landscape synthesis uses the same inputs through synthesize-agent-memory-landscape. It records the commit whose tree holds the selected reviews, retained sets, contracts and reader code instead of preparing a separate bundle; an analysis publishes only with its method committed and the worktree clean outside the publication outputs, so that commit identifies the method and inputs. Quantitative claims retain their population, evidence filters, and exclusions; qualitative claims require reading and citing the retained members.