Skip to content

work-items: bug path, triage clusters, claim protocol, trackers and morning brief #7578

Closed
32 of 32 issues completed
Closed

Description

@kyle-sexton

Parent

Refs #7555. Source: PLAN Phase 11, topic poteto-review. Thread: work-items.

Depends on

Outcome

/work-items:work gains a bug path that reproduces before fixing; triage clusters shared signatures
under one parent; one claim protocol covers every worker; trackers ship as two bundled adapters plus
seeds; the morning brief moves into work-items with a Landed section.

Decisions

  • /work-items:work bug path: reproduce twice through the real surface or verify an existing fix
    against the prior commit, objection window, bounded fix with failing test first, draft PR only with
    before-and-after proof, never merge; seven-condition fix gate, each condition a named setting on by
    default, tighten-only (D43, Q527; Lauren's bug bot). Investigate-only mode, later startable from
    an incident thread (Q530).
  • Attended pickup shows "I read this item as: <goal; done when>" above "Proceed?" (D104, Q171;
    Matt's restate).
  • Triage cluster step: one parent per shared signature, symptom or suspect commit; only the parent
    gets agent-ready; defaults tuned on the first 20 clusters (D68, D70, Q55, Q76).
  • No ticket when unsure (one question or needs-info, a "seen again" note); filing_posture moves to
    work-items config (D68, Q56). Triage reads the glossary, ADRs and a scope statement first;
    outside-PR intake default off (Q524).
  • Stale reporter-info: repo setting, default off; only needs-reporter-info items whose reporter
    lacks write access; closed on the operator's yes; lanes never close (D110, Q545).
  • Work classes and their labels dropped; needs-human-implementation dropped; agents settle a
    missing classification (D76, Q505; owner's). The issue-work lane takes only agent-ready items
    (Q581).
  • One claim protocol for every worker, covering any agent write; work.authority dropped (D93, D94,
    Q515).
  • Lifecycle: automated pre-work posted with marker comments; desired-state/result-state pairs;
    prod-error intake; an idea issue gets an interview first (D94, Q522). One engine decides
    agent-readiness; wayfind map items stay out of /work-items:work (D108, Q535).
  • Trackers: github and local-markdown bundled; jira, gitea, linear seeds /work-items:setup
    copies; content hash fast-forwards an untouched copy, an edited copy shows the diff and stops (D86,
    Q514; combined). Tracker binding <home>/work-items.yaml, schema-checked; stop and ask when the
    tracker cannot be determined (Q534, Q551). Seam: add-recurrence now, compensate with the first
    two-way adapter (Q529).
  • /harness-ops:morning-brief moves to /work-items:morning-brief: read-only, Attention first,
    Landed section with 3 sampled PRs under "Read these", landed_at saved after a full read, per
    machine (D68, D72, D87, Q516). Setting: landed-PR sample size 3.
  • One read-only lifecycle-metrics skill (name via /naming:name-it-better): per-issue stage times and
    the five DORA delivery metrics as a team trend, never per person; called by morning-brief,
    go-faster, retro (Q521). Setting: deploy signal, default merge to main.
  • Cost per work item: lanes tag telemetry with the item URL, cloud lanes map ccr.session.id to items,
    /harness-ops:observability rolls up usage per item, never prices (D68, Q58, Q560).
  • /work-items:decompose: each Done-when check is false at the starting commit or the item says why
    (D95, Q523). Day job: Jira first, Teams second and read-only (Q59).
  • Research tags: Q560 OTEL routine; day-job Jira needs no local edits (D86); cluster thresholds on the
    first 20 clusters; forge history readable within API limits for Landed (assumption 12).
  • Sub-topic promotion: this thread gets its own plan at phase start (B7).

Key interfaces

From the design's module layout: "work-items: /work-items:work bug path; triage cluster step;
/harness-ops:morning-brief moves in as /work-items:morning-brief; one read-only lifecycle-metrics
skill (name via /naming:name-it-better); /work-items:decompose Done-when rule. Bundled trackers
github and local-markdown; jira, gitea, linear are seeds /work-items:setup copies."

Contracts, "Tracker adapter": "Contract and conformance tests in the work-items tracker contract;
schema_version covers versions; content hash fast-forwards an untouched seed copy, an edited copy
shows the diff and stops. Seam verbs: add-recurrence now, compensate with the first two-way
adapter. Claim protocol is one for every worker."

Variation verdicts: "Tracker adapters: abstract now; work-items tracker seam; github,
local-markdown bundled, jira/gitea/linear seeds, add-recurrence, later compensate (C4, D86,
Q514, Q529)." "Telemetry sink and cost rollup: contain now; item URL tag, ccr.session.id map,
observability rollup; OTel read-back adapter deferred (Q58, Q560, D61)."

Slices, filed when this phase starts: bug-path-and-pickup, triage-cluster, claim-and-classes,
lifecycle-prework, tracker-seeds-and-binding, and the rest of the phase plan's list.

Done when

Out of scope

  • Status storage (Work-item status thread).
  • Dossier branches (Dossier thread).

Related

Activity

  1. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    on Oct 16, 2026
  2. github-actions commented on Oct 16, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: structural
    Basis: automated intake triage; the lanes App applied this class.

    Size: Large
    Complexity: High
    Uncertainty: Knowable
    Flags: none
    Blocked by: none

    I read this as the parent tracking issue for the work-items thread: a bug path, triage clusters, a claim protocol, tracker adapters and the morning brief move. It has been split into 21 sub-issues, and 15 more slices are not filed yet.

    The "Done when" items are lane-checkable, apart from the host-run and eval slices. Those are routed separately.

    I found no duplicate. #6314 and #7596 are named in the body as related, not as duplicates. The earlier owner decisions are in the comments, but none starts with **Decision recorded.**, so I treat them as context and not as a recorded decision.

    Automated triage, applied by the lanes App.

  3. changed the issue type fromtoon Oct 16, 2026
  4. 62 remaining items

  5. kyle-sexton commented on Nov 5, 2026

    @kyle-sexton
    MemberAuthor

    Claimed by the poteto session: auditing the Decisions items against origin/main and building what is missing in one or two PRs (Refs, not Closes). The work-class removal stays out of scope here; it waits on #13526.

  6. kyle-sexton commented on Nov 5, 2026

    @kyle-sexton
    MemberAuthor

    Status audit against origin/main (38ca30f), 2026-11-05.

    Decisions item State Evidence
    Triage cluster step (one parent per shared signature, only the parent gets agent-ready) Built in #13555 Main had only the decision-carrier cluster (plugins/work-items/skills/triage/SKILL.md:388, context/apply-outcome.md:35). #13555 adds signature clusters: members close as duplicates with an add-recurrence note on the parent and no blocked-by edge, since work-unblock promotes an item when its last blocker closes (.github/scripts/work-unblock/label-unblocked.test.mjs:377).
    Cluster defaults tuned on the first 20 clusters Not built (probe) Needs 20 real clusters. The defaults are marked provisional in #13555.
    No ticket when unsure, with a "seen again" note Built in #13555 track/actions/add.md gains the rule and uses the seam's add-recurrence (tools/work-item-tracker/CONTRACT.md:247).
    filing_posture moves to work-items config Not built It lives only in bugs (plugins/bugs/reference/config.md:41, docs/conventions/bugs.yaml:47). plugins/harness-ops/skills/changelog/context/native-drift.md:148 records that work-items has no such key. The move touches 12 files across bugs, docs and harness-ops, including /bugs:setup apply, which writes the key. Left for a follow-up build.
    Lifecycle pre-work desired-state/result-state pairs with marker comments Not built (open design) Absent on main. The 2026-11-01 split comment above lists "the pre-work recording form" as an open design question.
    Morning brief Landed section (3 sampled PRs under "Read these", landed_at after a full read, per machine) Built in #13564 Absent on main: no Landed section in plugins/work-items/skills/morning-brief. The move half holds (done-when 1, ticked).
    Done-when 3: Probe result: on the triage-cluster and tracker-seeds slices Open No triage-cluster slice was filed. The tracker-seeds slice #11873 has no Probe result: comment. Its probe needs a live seed tracker (Jira, Gitea or Linear) copied by /work-items:setup.

    What remains:

  7. self-assigned this
    on Nov 6, 2026
  8. kyle-sexton commented on Nov 6, 2026

    @kyle-sexton
    MemberAuthor
    No description provided.
  9. kyle-sexton commented on Nov 6, 2026

    @kyle-sexton
    MemberAuthor

    Lane 2: the work-class label slice is blocked on the untrusted-provenance writer; nothing built. Agent finding, not an owner answer.

    The done-when line "rg -l 'work-class' plugins/work-items/skills | wc -l returns 0" can't be met yet without loosening the untrusted hold:

    • The intake writer still applies only the legacy name: .github/scripts/intake-triage/admit.mjs:217 export const UNTRUSTED = UNTRUSTED_LABEL;, and .github/scripts/pr-merge/merge-holds.mjs:1634 export const UNTRUSTED_LABEL = "work-class: untrusted-provenance"; ("Writers still apply UNTRUSTED_LABEL until every reader takes both", :1633). The triage prompt still proposes it (.github/workflows/intake-triage.yml:301-306).
    • The work-items skills read that legacy name as a hold: work-loop/SKILL.md:335,395,399, triage/SKILL.md:43,242, attend-queue/SKILL.md:210,242,247,390. Removing those lines while the writer stamps only the legacy name would let work-loop, triage and attend-queue treat an untrusted item as unheld.
    • reference/work-class-labels.md:24 says "writers apply only provenance: untrusted", which contradicts the code above.

    Owner decision Q2 (a) sets the order: label source, then CI readers (#13525, closed), then plugin readers (#13526, closed). The step left is switching the writer (UNTRUSTED in admit.mjs, the triage prompt's class line) to provenance: untrusted. Every reader already holds both labels (UNTRUSTED_LABELS, merge-holds.mjs:1635), so the switch loosens nothing.

    Size. The hub's "45 references" doesn't reproduce. On main d23b140, work-class/work_class is in 341 files: 85 use the label family (481 lines), 233 belong to autonomy's separate C1 to C5 risk classes (976 lines are security-binding fixtures), 12 are merge or admission controls, and 11 are prose only. In plugins/work-items/skills alone: 14 files.

    Order that meets the line without loosening anything (recommended):

    1. Writer switch (CI change under .github/, Automation Lanes or a host session): intake writes provenance: untrusted; the triage prompt offers only that hold; work-class-labels.md:24 stays true.
    2. Then the skills slice: drop read-only/mechanical/scoped/structural and the legacy-name reads from plugins/work-items/skills (14 files), plus setup's work-class axis migration and probe 7. It changes skill bodies, so it carries do-not-merge until a VALID before/after eval.
    3. Deleting the label objects and stripping them from existing issues is a bulk mutation. Leave it to a counted, separate step.

    Lane 2 released its claim on #7578.

  10. kyle-sexton commented on Nov 6, 2026

    @kyle-sexton
    MemberAuthor

    Rescope after the 2026-11-06 issue validation. The owner answered the validation's questions, verbatim: "Jesus, just go with recommended. Be smart." (2026-11-06T19:27Z, relayed verbatim by the GitHub Support hub).

    What remains on this issue:

  11. kyle-sexton commented on Nov 6, 2026

    @kyle-sexton
    MemberAuthor

    Correction to the earlier comment: more remains than the four PRs it listed. I audited every Decisions line against origin/main 41f3a2b, read-only. The 2026-11-01 split's "15 unfiled slices" list can't be recovered whole, so the Decisions list is the checklist.

    Being built now (hub-assigned to poteto, with Automation Lanes agreeing on the order):

    • CI intake drops the work-class labels. .github/scripts/intake-triage/apply-verdict.mjs:298-309 still applies a work-class: label. intake-triage.yml:304-306 still asks the model for one, and reentry-eval/build-suite.mjs:35-38 lists them.
    • CI readers move to the convention-home binding. merge-holds.mjs:1624, pr-unblock/lane-hold.mjs:28, pr-merge.yml:1221-1226 and about 23 other .github files read only /.work-item-tracker.json. That file is removed once nothing in this repo reads it. Plugin readers keep the legacy fallback for consumer repos.
    • Delete the five work-class: label objects. Dropped (agent choice). Deleting a label strips it from every
      issue, closed ones included, and can't be undone. Readers still hold the legacy
      work-class: untrusted-provenance (merge-holds.mjs:1641), so deleting it would drop the hold on a reopened
      issue. Once nothing applies them, the unused labels cost nothing.

    Remaining, not buildable now:

    Decided out, with a recorded basis:

    Done-when 4 evidence. All 32 sub-issues are closed; 29 were closed by a merged PR. The other three are covered as follows (the bar is not reworded):

  12. kyle-sexton commented on Nov 6, 2026

    @kyle-sexton
    MemberAuthor

    Closing: every done-when is met, and every Decisions line is built or recorded with a basis. The full audit is in issuecomment-6694018067.

    Merged today:

    Not built, carried where it can be picked up:

    • Per-item telemetry tagging. It waits on owner Q3 (a) (2026-11-01, "provision nothing until the owner approves a specific collector"). With no collector, a tag has no reader. It is on the hub's hardening seed list with its start trigger: the owner names a collector.
    • Prod-error intake. Its sender, feat(autonomy): alert-intake sender contract, intake probe and trigger page (deferred from #7009) #7119, was parked by the owner on 2026-10-24.
    • The 20-cluster tuning and the tracker-seeds probe. Dropped by Q14 (a); also on the seed list.

    The work-class: label objects stay. Deleting them would strip them from closed issues irreversibly, and the legacy untrusted label is still a held read (merge-holds.mjs:1641).

    Post-merge watch (R21) for #13826:

    • pr-require-checks: 13 successes since merge. None of its failures are in a step that reads the binding: they are PR-contract checks, the 21:38-22:03Z review-lane outage, and one unrelated guardrails test.
    • pr-merge: 2 successes. pr-unblock: 1 success.
    • pr-run-activity-read and pr-run-activity-write have not run since the merge; the watch continues.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

No labels
No labels

Fields

Work status

ready

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions