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

priority: mediumReal value, no hard deadline; normal backlog flow.work-class: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.

Fields

Work status

ready

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions