Add fits/entries map headers, entry-gates validator rule, and ticket_shape flag #870
Labels
No labels
P0
P1
P2
P3
bug
category/code-change
category/cross-repo
category/eval-run
category/investigation
category/no-test-target
category/owner-ruling
category/prose-artifact
category/recurring-chore
category/structure
category/umbrella
crc-refactor
create
delete
enhancement
filed-by/agent
filed-by/user
frozen
lint-rule
needs-info
needs-triage
next
plugin/cc-architect
plugin/os
plugin/os-adr
plugin/os-aidd-lint
plugin/os-backlog
plugin/os-context
plugin/os-doc-hygiene
plugin/os-sdlc
plugin/os-vault
project/cc-os
ready-for-agent
ready-for-human
recurring
review
rule-proposal
update
waiting
wayfinder:grilling
wayfinder:map
wayfinder:map
wayfinder:research
wayfinder:task
wayfinder:task
wontfix
worklist/deviations
worklist/lint-rule
worklist/new-implement-build
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Blocks
Depends on
Reference
jared/cc-os#870
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Problem
ADR-0258 decisions 6 and 7 need each map to say when it applies (
fits:) and which nodes a reroute may enter (entries:), and need the validator to prove that every path from an entry tomerge-readypasses therequired-workandsuitegates. TodayMap::Loader#build_map(adapter/map/loader.rb:24) reads onlyname,entry,nodes,terminals, anddispatch_cap. Also,Implementation::Open#ticket_map?(command/implementation/open.rb:48) selects the ticket-shape check and retired-test deletion by the basenamepoodr-ticket-implementation. ADR-0258 replaces that test with a map-level flag.Reproduce
n/a: design change, nothing to reproduce.
Approach
Mapgets three readers:fits(String or nil),entries(Array, default[]), andticket_shape?(from aticket_shape: trueheader, default false). The headers are optional at load. A map with noentriesis not reroutable; the reroute gate refuses it (later ticket).New validator check
check_entry_gates!: for each name inentries, the name must be a node, and every path from it to a terminal with outcomeimplementation_completemust pass a node whose gates include bothrequired-workandsuite. One way: walk from the entry without entering such a node; the rule fails if the walk reaches animplementation_completeterminal. An entry that carries both gates itself passes. It raisesInvalidMapErrorwith codes:unknown_entryand:entry_skips_required_gates. The rule runs only from declared entries.open.rbasksmap.ticket_shape?instead of the basename. Map headers:maps/poodr-ticket-implementation.yaml:fits:one sentence,ticket_shape: true,entries:the nodes whose paths pass suite-check (change-auditor, seam-designer, test-writer, test-reviewer, programmer, programmer-repair, behavior-verifier, refactorer, suite-check). Not contract-auditor: itspassedge goes tomerge-readywith no suite-check after it.#883 deletes
maps/coding.yamlandmaps/poodr-implementation.yaml(ADR-0259 decision 11), so the ticket map is the only shipped map. No exception to the rule is needed: a ticket with "Required work: none beyond the acceptance criteria" passes the ticket shape, andrequired-workwith no checks is a defined no-op. The rule that a map withentries:also needs the waiting-node reroute exit and the map-router node is in #885, because it needs the waiting node from #872.Required work:
fits,entries, andticket_shapeheaders in the loader — check: presententriesinplugins/os-sdlc/lib/os_sdlc/adapter/map/loader.rbcheck_entry_gates!inplugins/os-sdlc/lib/os_sdlc/model/map/validator.rb"poodr-ticket-implementation"inplugins/os-sdlc/lib/os_sdlc/command/implementation/open.rbticket_shape: trueinplugins/os-sdlc/maps/poodr-ticket-implementation.yamlentries:inplugins/os-sdlc/maps/poodr-ticket-implementation.yamlAcceptance criteria
merge-readyonly through a node gated[required-work, suite], when it loads, then it is valid andentrieslists that node.merge-readythat skips therequired-workgate, when it loads, then it fails withentry_skips_required_gatesand names the entry.unknown_entry.entriesis empty, andticket_shape?is false.ticket_shape: trueunder any file name, when implementation-open runs with a ticket body missing## Owner sketch, then it refuses the run; given a map without the flag, then it does not check the ticket shape.entriesare the nine nodes listed in Approach.Owner sketch
Origin
Parent: #859
Blocked by: #868, #883
Work started on branch ticket-870 (os-sdlc pipeline, map poodr-ticket-implementation).
Resolution
Done: fits/entries/ticket_shape map headers (Map::Headers), the entry-gates validator rule (Map::Validator::EntryGates), implementation-open asks map.ticket_shape?, poodr-ticket-implementation.yaml carries the headers. Deviation: implementation 1 was abandoned and re-opened as implementation 2 because the change-auditor submitted a placeholder handoff (summary: x) after its real handoff was refused, and the Runner accepted it.
Evidence: main
74f05b7d(Runner commit, implementation 2 implementation_complete, 13 dispatches, 1 retry; required-work and suite gates green), History row; bin/test on main: 9 suites passed.Follow-ups: none