Design the nominations key schema and intake filter #56
Labels
No Label
P0
P1
P2
P3
afk-ready
hitl
next
ready-for-agent
review
semi
waiting
wayfinder:grilling
wayfinder:map
wayfinder:research
wayfinder:task
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: jared/cc-os#56
Loading…
Reference in New Issue
No description provided.
Delete Branch "%!s(<nil>)"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Map: #49
Question
Design the
nominationskey schema and the intake filter. Already decided (see map #49 decisions): same file as rules; rejects hard-block only the exact glob+lifetime pair; variants pass through with the past rejection shown as judge context; rejects may carry a consider-instead pointer; consults are a resurfacing queue, never a filter.To design here:
{ "glob": "docs/research/**", "lifetime": "temporary", "verdict": "rejected", "why": "findings docs other artifacts link to, not disposable output", "consider_instead": "an extract-to-vault rule for standalone findings docs", "judged_on": "2026-07-15" }— confirm/adjust fields.nominationskey (writer-enforced, afterrules).Resolution — design approved (human sign-off 2026-07-15). KISS boundary reaffirmed first: every verdict with an actual answer (keep/temporary/delete-once-served/ignore) persists as a plain rule in the existing
rulesarray (#51). Thenominationskey holds only the two residues that cannot be rules: "the answer is no" (rejected) and "no answer yet" (consults).Schema — second top-level key, two sub-keys (approved over flat array w/ verdict field)
glob,lifetime,why, optionalconsider_instead,rejected_by: "judge" | "human",judged_on. Noverdictfield — the sub-key says it. Human declines at Step 5 also persist as rejections (rejected_by: "human"), approved — otherwise haiku can re-nominate what the human personally declined and the judge won't know.glob,question,evidence,cluster_key,asked_on. Deliberately no lifetime — the uncertainty about purpose is the point. Presence inconsults= open; no status field. Solves today's evaporation problem (consult verdicts die with the run's scratch dir; same question re-derived every run).rejectedwith the human's why; (c) defer → stays, resurfaces next run. Consults resurface in:calibrateonly (:check/:cleanunchanged, ADR-0039 boundary); they never filter anything (#52).Pipeline placement
New deterministic Step 3.5 "Nomination intake filter" (
NominationIntakeFilterincalibrate_helpers.py), between nomination collection (Step 3) and judge dispatch (Step 4):rejectedentry is dropped pre-judge, logged in the run summary.rulebook.pystays nomination-unaware — its contract is "which rule governs this path"; onlycalibrate_helpersreads the key. Additive to schema_version 1 (v1 loader ignores extra top-level keys).Boundary (sub-decision 4, approved)
Exact-path singleton keep rules leave only by hand-deletion (HITL, recorded reasoning) — no automated revisit path. Composes with the removals-are-HITL-only invariant; an automated revisit would be the one place a machine argues a keep back toward deletion, the exact failure mode the keep tier prevents.
Canonical ordering (sub-decision 5)
nominationsafterrules;consultsbeforerejected(pending-action queue reads first); each list glob-sorted; all writer-enforced by the same Step 6 writer that ordersrules(#53 — no hook). Calibrate reader warns on unrecognized nomination fields, mirroring the rules array's unknown-field discipline.Folds into the assemble ticket #58; nothing edited in the working tree by this ticket.