Skip to content

D79 Wave 3: summaries consumed as orientation — closes #165 - #171

Merged
fazpu merged 2 commits into
mainfrom
feat/d79-consumption
Jul 29, 2026
Merged

D79 Wave 3: summaries consumed as orientation — closes #165#171
fazpu merged 2 commits into
mainfrom
feat/d79-consumption

Conversation

@fazpu

@fazpu fazpu commented Jul 29, 2026

Copy link
Copy Markdown
Member

The final wave of #165: section summaries become consumed orientation context in E1 prefixes and the E2 extraction bundle, per plan/designs/e0_files_design.md §4.1's consumption bullet and its two hard rules.

What ships

  • Shared orientation renderer (workers/section_orientation.py, contract d79-section-orientation-v1): target-first + nearest-ancestor one-liners under a 2048-char hard cap, from the CURRENT structure generation only, with a cross-generation guard — a chunk cut under a superseded skeleton degrades to no orientation rather than attaching a merely path-coincident section's summaries.
  • E1: the prefix prompt gains the orientation block with an output-constraining instruction (describe where the passage sits; never restate a summary's assertions) — E1_PREFIXER_VERSION 07c. Degraded generations contribute zero bytes; prefix carry-forward is untouched (no re-prefix fan-out on summary changes).
  • E2: the bundle gains the SECTION SUMMARIES element ((none) idiom when degraded) with orientation-only guidance in both Selection and Claimify prompts — E2_EXTRACTOR_VERSION 07f.
  • RULE 1 held — never a grounding source: no summary added-context kind exists; fact-injection probes prove summary-only poison text fails the gate under the illegal kind AND every legal kind (header/neighbour/prefix membership).
  • RULE 2 held — never a correctness input: extraction_input_hash unchanged by summaries; the new pure summary-seat-swap chain test proves the un-conflated D79 promise — new generation minted and pointer moved with zero Selection calls, zero ContextPrefix calls, and byte-identical hashes.

Review trail

Codex implemented; Grok and Opus reviewed independently — both APPROVE-WITH-FIXES, converging on the one substantive question: the summary→prefix second-order channel. Adjudication (recorded in the design + a dated D79 amendment): status quo on quotability, widening of reach — the prefix was always LLM text and always quotable; bottom-up summaries widen what can influence it; accepted as layer-3/4 audit territory with the output-constraining instruction as in-prompt mitigation. All other findings applied, including Opus's latent cross-generation mismatch (guard implemented, not just documented) and the de-tautologized reuse assertion.

Benchmarks, tool catalog, and recipes untouched — engine-side only.

fazpu and others added 2 commits July 29, 2026 11:14
Grok + Opus both APPROVE-WITH-FIXES; all findings applied:

- The summary->prefix second-order channel (Opus MAJOR, adjudicated
  "status quo on quotability, widening of reach"): the E1 instruction now
  constrains OUTPUT (describe where the passage sits; never restate a
  summary's assertions) and the accepted residual is recorded in the
  design consumption bullet and a dated D79 amendment, alongside the
  carried-prefix staleness corollary.
- Cross-generation orientation guard implemented, not just documented:
  ChunkForEmbedding carries section_id (loaded in the embedding SELECT),
  and render_section_orientation degrades to None when the chunk's section
  id does not match the current generation's row at that path — a
  coincident node path across a skeleton regeneration can no longer attach
  another section's summaries. Unit test included.
- Fact-injection probes extended to every LEGAL added_context kind
  (header/neighbour/prefix) with summary-only poison text.
- E2's degraded "(none)" rendering pinned by test; asymmetry with E1's
  zero-bytes documented as bundle-idiom consistency (adjudicated against
  the symmetry suggestion).
- Reuse test de-tautologized (reuse breadth pinned by count) and its
  docstring scoped honestly; NEW pure summary-seat-swap chain test proves
  the un-conflated D79 promise: new generation minted, pointer moved, zero
  Selection calls, zero ContextPrefix calls, byte-identical
  extraction_input_hash.

Fast gate local (ruff, pyright, targeted suites); the full matrix is CI's
job per the new split policy.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GKENhTLJg1HqhbdwCmmkbc
@fazpu
fazpu enabled auto-merge (squash) July 29, 2026 10:33
@github-actions

Copy link
Copy Markdown

Coverage report

Click to see where and how coverage changed

FileStatementsMissingCoverageCoverage
(new stmts)
Lines missing
  src/rememberstack/model
  chunks.py
  src/rememberstack/spine
  chunk_catalog.py
  src/rememberstack/workers
  e1.py
  e2.py
  section_orientation.py 83, 95, 97
Project Total  

This report was generated by python-coverage-comment-action

@fazpu
fazpu merged commit bbf9041 into main Jul 29, 2026
6 checks passed
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