Skip to content

feat(baton): discontinue title-scan; declared work_verb is the sole classification signal (#332)#333

Merged
montfort merged 1 commit into
mainfrom
feat/baton-declared-work-verb
Jun 27, 2026
Merged

feat(baton): discontinue title-scan; declared work_verb is the sole classification signal (#332)#333
montfort merged 1 commit into
mainfrom
feat/baton-declared-work-verb

Conversation

@montfort

Copy link
Copy Markdown
Contributor

Implements the architecture decision in #332, registered after the Sentinel adopter calibration (#331). The Baton-side prototype.

What

The declared work_verb (+ design_provenance), captured at authoring, becomes the sole authoritative classification signal. Title-scan is removed from the classification path entirely. A unit with no declared verb is unclassifiable → routed up to frontier conservatively, with a nudge to declare the verb. Never guessed.

  • signals.rs — removed Cue/scan_cues/CUE_TABLE/matches_at_word_start; added WorkVerb (design/implement/audit/operate) + DesignProvenance (new/upstream), controlled-vocabulary.
  • classify.rsclass: Option<TaskClass>; verb→class with implement + design_provenance=upstreamoperator (residual-cognitive-load); undeclared → None. Declared = High confidence.
  • route.rs — undeclared → frontier (conservative, R1).
  • telemetry.rsconflict_fractionundeclared_fraction (the actionable nudge); saving now provably rests on declared units (low_confidence_savings_fraction → 0).
  • units.rs — harvest work_verb/design_provenance from charter frontmatter + follow-up lines.

Why (adopter evidence)

The Sentinel calibration proved title-substring classification unsafe: high+medium precision 0.57 with 4 errors downward, all from object-vs-verb collisions (a module named Audit), incidental tokens (*.go filenames, commit hashes, make-target names). The title is unconstrained, schema-less, often-bilingual free text; reinforcing the scan per adopter is an unbounded keyword treadmill (the #321 anti-pattern). Fake savings are worse than an honest gap.

Verification

  • cargo test -p straymark-baton ✓ — 78 tests (suite rewritten for the declared-verb model); clippy clean; no trace of scan_cues/Cue left.
  • Sentinel dogfood (route --dry-run, read-only, git status intact): the legacy corpus declares no verbs → 100% undeclared → all frontier → 0 saving → "not routable" + "declare a work_verb" nudge. The truthful clean-cut behaviour — the gap is an action, not a fake number.

Scope boundary (deferred on purpose)

  • Framework graduationwork_verb/design_provenance as first-class governance fields (schemas, templates, validator nudge) is a fw-X.Y.Z change, gated on schema ratification (the adopter asked not to instrument against an unratified schema).
  • Finer-grained declaration (batch/task have no frontmatter slot), forward-validation (StrayMark's job, varied corpus), and B2 auto-assist for design_provenance are tracked under Decisión: descontinuar title-scan; work_verb declarado como única señal de clasificación #332.

Closes the prototype step of #332.

🤖 Generated with Claude Code

…ignal (#332)

Implements decision #332 (registered after Sentinel calibration #331). The
declared work_verb (+ design_provenance), captured at authoring, is now the sole
authoritative classification signal. A unit with no declared verb is
unclassifiable -> routed up to frontier conservatively + a nudge to declare the
verb. Never guessed from the title.

Why: the Sentinel calibration proved title-substring classification unsafe
(high+medium precision 0.57, 4 errors *downward*) due to object-vs-verb collisions
(a module named Audit), incidental tokens, and an unbounded per-adopter keyword
treadmill (#321 anti-pattern). Fake savings are worse than an honest "declare the
verb" gap.

Removes signals::{Cue,scan_cues,CUE_TABLE,matches_at_word_start}. classify returns
Option<TaskClass> (None = undeclared); implement + design_provenance=upstream
degrades to operator (residual cognitive load). telemetry: undeclared_fraction
replaces conflict_fraction; saving now provably rests on declared units. units
harvests work_verb from charter frontmatter + follow-up lines.

Suite rewritten (78 tests), clippy clean. Sentinel dogfood (read-only): the legacy
corpus declares no verbs -> 100% undeclared -> frontier -> 0 saving + nudge. No
fake savings. Framework graduation (first-class field + validator) deferred to a
fw bump, gated on schema ratification.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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