-
Notifications
You must be signed in to change notification settings - Fork 2
feat(work-items): extract shared self-observation filing contract (#540) #762
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
1859d9c
feat(work-items): extract shared self-observation filing contract (#540)
kyle-sexton 6e4c2d2
docs(work-items): front-load scope condition on triage filing sentence
kyle-sexton c1df8d1
docs(work-items): guard cross-lane AI disclaimer against triage-speci…
kyle-sexton cbcbf81
docs(work-items): scope triage follow-up filing to fresh self-observa…
kyle-sexton c899278
Merge branch 'main' into fix/540-work-items-shared-dogfood-skill
kyle-sexton 518f0f5
Merge branch 'main' into fix/540-work-items-shared-dogfood-skill
kyle-sexton b45bb9d
Merge branch 'main' into fix/540-work-items-shared-dogfood-skill
kyle-sexton ce16c6d
docs(work-items): reopen closed-duplicate matches in dogfood dedupe beat
kyle-sexton File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,88 @@ | ||
| # Self-observation filing — the shared dogfood contract | ||
|
|
||
| When an autonomous lane hits a problem it will **not** fix in the current cycle — a bug, a gap, a | ||
| piece of orthogonal drift — it files that problem as a tracker item so the lane's own findings feed | ||
| the same queue everyone else works from. That filing rule is **cross-lane-identical**: `work`, | ||
| `triage`, `scan-todos`, and the external standing-loop lanes (`source-control:babysit-prs`, | ||
| control-tower, enrichment) all file the same way. This document is the single source of truth for | ||
| *how*, so each lane references it once instead of restating the rule and letting the copies drift. | ||
|
|
||
| The mechanics it composes already live in this plugin — the seam `create-item` verb, the bound | ||
| adapter's *Search items* operation, the `track add` body template, and the label taxonomy. This | ||
| contract does not re-implement any of them; it **points** at each and adds only the self-observation | ||
| policy that binds them into one sequence. | ||
|
|
||
| ## When it applies — file what you will not fix, nothing else | ||
|
|
||
| The default posture is **fix, not file** ([`tracker-seam.md`](tracker-seam.md) "Default = fix, not | ||
| file"): Boy-Scout-scope drift discovered while working belongs in the current change, not the | ||
| tracker. Self-observation filing is the **narrow exception** — a problem is filed only when it is | ||
| genuinely orthogonal to the current item, large enough to need its own planning pass, or needs | ||
| research this lane is not positioned to do. `work`'s post-green review already draws this line for a | ||
| VALID-but-deferred finding ([`../skills/work/SKILL.md`](../skills/work/SKILL.md) "Post-green review | ||
| pass"); the same test governs every lane. | ||
|
|
||
| ## The sequence | ||
|
|
||
| Four beats, in order. The two **mechanical** beats reuse existing machinery verbatim; the two | ||
| **judgment** beats stay with the model. | ||
|
|
||
| 1. **Dedupe first (mechanical search + model sameness).** Before creating anything, run the | ||
| search-before-create pre-flight — the bound adapter's *Search items* operation over `--state all`, | ||
| the same read `track add` performs ([`../skills/track/actions/add.md`](../skills/track/actions/add.md) | ||
| "Duplicate check"). Whether a hit is *the same problem* is a model judgment, not a string match: | ||
| compare by underlying cause, not wording. A match against an **open** item means comment on it | ||
| instead of opening a second one. A match against a **closed** item is different: closed items are | ||
| absent from the triage attention view, so commenting there buries a still-live or regressed | ||
| observation where no lane will pick it up — reopen the closed item (or open a fresh active item | ||
| that links it) so the problem re-enters the queue. Where the consuming repo keeps a rejected-concept | ||
| ledger | ||
| (`docs/out-of-scope/`), the same step's ledger check applies — do not re-file a settled rejection. | ||
|
|
||
| 2. **Categorize (model judgment).** Classify bug vs enhancement first — it steers everything | ||
| downstream — then the type and priority, following triage's classification rule | ||
| ([`../skills/triage/SKILL.md`](../skills/triage/SKILL.md) "Recommend category + state") and the | ||
| label grammar ([`label-taxonomy.md`](label-taxonomy.md)). A self-filed item is raw intake: the | ||
| filer records what it observed, not a verified diagnosis. | ||
|
|
||
| 3. **File with the fixed shape (mechanical).** File through the canonical `track add` path, which | ||
| owns the body template (Context / Proposed work / Acceptance criteria / References / Metadata) and | ||
| the argv-safe `create-item` write ([`../skills/track/actions/add.md`](../skills/track/actions/add.md) | ||
| "Build body", "Create the item"). The shape is not restated here — `track add` is its source of | ||
| truth, so a change to the template lands in one place. | ||
|
|
||
| 4. **Label `needs-triage`, then hand off (mechanical label + policy).** Apply `status:needs-triage` | ||
| ([`label-taxonomy.md`](label-taxonomy.md) status axis) so the item lands in the triage attention | ||
| view for evaluation ([`../skills/triage/SKILL.md`](../skills/triage/SKILL.md) "Attention view"). | ||
| **The filer does not self-triage** — filing surfaces the problem into raw intake; triage verifies, | ||
| categorizes definitively, and routes it. Auto-application of `needs-triage` to a fresh item lacking | ||
| a priority label is tracked separately (`#506`); until it lands, the filing lane applies the label. | ||
|
kyle-sexton marked this conversation as resolved.
|
||
|
|
||
| ## Mechanical core is already scripted — reference it, do not duplicate | ||
|
|
||
| The "mechanical core" of this contract (dedupe search, filing-template emission, the `create-item` | ||
| write) is not a new script to author — it is the existing seam + bound-adapter + `track add` | ||
| machinery above. Duplicating it into a standalone wrapper would fork the very template and search | ||
| mechanics this document exists to keep single-sourced. The judgment core (sameness, category) is | ||
| model work by nature and is not scriptable. A lane composes the two by following the sequence, not by | ||
| calling a new binary. | ||
|
|
||
| ## Autonomous authorization and the AI disclaimer | ||
|
|
||
| Model-initiated filing is gated: on the interactive path a lane drafts the item and asks before | ||
| creating it ([`../skills/track/actions/add.md`](../skills/track/actions/add.md) "Authorization | ||
| gate"). On an **autonomous lane** — a `/loop` or `/schedule` session whose standing rules already | ||
| authorize tracker mutations — those standing rules **are** the authorization, the same resolution | ||
| triage's direction gate makes ([`../skills/triage/SKILL.md`](../skills/triage/SKILL.md) "Direction | ||
| gate"). An autonomous lane prefixes every item and comment it creates with an AI disclaimer — | ||
| triage's ([`../skills/triage/SKILL.md`](../skills/triage/SKILL.md) "AI disclaimer") section is the | ||
| canonical form, but a non-triage lane names its own lane rather than inheriting triage's literal | ||
| `during triage` wording, so the provenance phase stays accurate. A lane-neutral disclaimer SSOT that | ||
| collapses this to a single pointer is tracked in `#768`. | ||
|
|
||
| ## Reconciliation note | ||
|
|
||
| The authoritative wording of this rule currently also lives in the external v4 standing-loop prompts, | ||
| where `source-control:babysit-prs` has not yet absorbed its lane rules (`#477`). This document is the | ||
| in-repo surface those prompts and the lane-absorption skills reference; when the remaining absorption | ||
| lands, its self-observation wording reconciles against this contract rather than adding a fourth copy. | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.