Skip to content

Guide: pin the Ask-First inventory — derive it from Pass-B mined trade-offs #8

Description

@Carr1005

Problem

The §6 Boundaries "Ask First" tier is the spec's only mid-build guard: a standing list of changes the build agent must get human sign-off for during implementation (as opposed to the §0 gate, which asks each Decision Ledger question once at build start). The guide currently mandates only that the tier exists and "carries the course's spoken trade-offs" — it never says which trade-offs. So each regeneration composes the list from judgment, and its contents drift run to run.

Observed instance (agent-memory course): spec v1 and v2 both carried the entry "Moving an operation across the deterministic/agent-triggered line — ask first" (a Lesson-3 spoken trade-off). The v3 regeneration (1fa71b1, generated from guide fdf3b6f) kept five other Ask-First entries but dropped this one. The decision itself is still covered at build start (Ledger row D8) and its invariant is AC-tested — but the silent direction of drift (making an agent-triggered operation run deterministically every turn, e.g. always-summarize) violates no invariant and fails no AC, so the dropped entry was the only guard for it.

This is the same failure class already fixed for mined parameters and contradiction-carry (PR #7): whatever the guide doesn't pin, regeneration reproduces only by luck.

Proposed fix (two edits, course-agnostic)

1. §6 Boundaries template comment — add:

Ask First is derived, not composed. Its entries come mechanically from Pass B's mined spoken trade-offs: every trade-off the course argued aloud whose wrong side either (a) forces rework (re-embedding, re-ingesting, re-indexing, re-tuning) or (b) changes a behavior guarantee without failing any acceptance criterion MUST appear as an Ask-First entry, cross-referenced to its Ledger row when it has one. Write the section by walking the mined trade-off list, not from memory of what such sections usually contain — a mined trade-off absent from Ask First is a defect, not a style choice. (Criterion (b) is the load-bearing one: it captures exactly the silent changes — e.g. making an optional operation run automatically — that no test catches and only a human sign-off can.)

2. §14 checklist — extend the Boundaries bullet:

  • Always / Ask First / Never all populated. Ask First is checked against the Pass-B mined trade-off list: every mined trade-off that forces rework or changes a guarantee no AC tests appears as an entry (with its Ledger row cross-referenced); none dropped.

Deliberately not patching now

Decision: ship spec v3 as-is; this rides the next guide pass + regeneration (v4), not a hand-patch to any spec.md — spec files are generated artifacts, and the guide is the lever.

Related residuals from the v1/v2/v3 comparison (candidates for the same pass)

  • A store schema/index existence AC (v2's one unique win; v1 and v3 lack it).
  • Make the §4 app-config-wins rule explicitly govern contradicted-row defaults (v3 defaulted distance to Cosine where v1/v2 chose Euclidean, the final app's config).
  • The choice of lightweight substitute realization is still free variance across regenerations (v2: SQLite+Chroma; v3: SQLite-only).

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions