Run issue-show and issue-edit through Ticket, Tracker, and the Forgejo host #1615
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.
Dependencies
No dependencies set
Reference
jared/cc-os#1615
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
The os-backlog code has no object that stands for a ticket, so each command repeats its own reads and writes. This slice proves the accepted object design end to end on the two simplest commands.
Approach
Build the tracer from sections 1 and 3 of
docs/system-design-format/proof/2026-11-06-os-backlog-domain-objects.md.Ticketuses ActiveModel (ADR-0307).Tracker#saveowns the write order: comments, add labels, remove labels, title and body, assignee, state. Other commands stay on the old code.Backlog::Trackeralready exists and only parses text. The newTrackerneeds that name, so this slice renames the old one toTracker::Address.Required work:
Ticketwithfind, setters,save,save!,valid?, andattributes— check: presentclass Ticketinplugins/os-backlog/lib/backlog/**/*.rbLabelList— check: presentclass LabelListinplugins/os-backlog/lib/backlog/**/*.rbTracker::Addressand add the newTracker— check: presentclass Addressinplugins/os-backlog/lib/backlog/**/*.rbMemoryhost for tests and theForgejohost — check: presentclass Memoryinplugins/os-backlog/lib/backlog/**/*.rbissue-showandissue-editthroughTicket.Acceptance criteria
ticket.labels, then the list holds a unique string.issue-showruns, then the JSON keysbody,labels,state, andtitlehold the same values as before the port.issue-editwith a body file, when it runs, then one read and one write occur and no create gate runs.savewrites it, then the write fails.saveruns it returns false, and whensave!runs it raises.Ticket, when a caller sendsstate=, then Ruby raises NoMethodError.Owner sketch
Non-goals
Do not rename a command before slice 9. Do not change
## Resolution,**Follow-ups:**, the body headings, the check form, the label names, or theissue-showJSON keys. Do not make a behavior change that this ticket does not name.Blocking edges
Blocked by #1614
Origin
docs/system-design-format/proof/2026-11-06-os-backlog-domain-objects.md, slice 2plugins/os-backlog/CONTEXT.md)VERDICT: CREATE
Work started on branch ticket-1615.
Resolution
Done: Added Ticket, LabelList, Tracker, Tracker::Address, and the Host role with Memory and Forgejo. issue-show and issue-edit run through Ticket on Forgejo; other hosts stay on the old path.
Evidence: Merged to main in
ebc9fbe2and94fec410(commits8eadad4e,ebc9fbe2). Suite on main: 407 runs, 0 failures, on seed 19992 and 6 random seeds. Lint gate passed. A real issue-show read Forgejo through the tracer. Contract audit corrections applied by hand.Follow-ups: Comments and state join Tracker#save in #1617 and #1618 (commented). Tracker forwarders go in #1621 (commented).