You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(catalog): add IP-039 An Executed List Must Resolve Against The Tree
Contributor task GH-C37 asks for one new public-safe good/bad case in the
interaction pattern catalog. This entry covers a boundary the catalog does not
have yet: a path list that drives execution is a claim about the tree, and a
retirement that does not inventory those lists removes the work they ran as well
as the code they named.
The good case is the shard contract that already exists:
`tests/test_python_ci_workflow.py::test_typescript_shards_select_every_test_file_exactly_once`
asserts the selector returns exactly the set of `tests/control_plane_ts/*.test.ts`
for one, three and four shards, and rejects an out-of-range shard. The bad case
is the same lane without that guard: #5105 retired the Stage 0 Python prototype
and left three manifests naming removed paths, and because pytest resolves its
arguments before it collects, the Windows lifecycle step aborted with
`ERROR: file or directory not found` and `no tests ran in 0.00s` — its other ten
files stopped executing while `windows-powershell` reported failure on every pull
request.
The entry follows the catalog's template and is registered in the family table
and the Pattern-To-Canary matrix, so the structural contract holds: 39 table rows
and 39 detail headings, one family per id.
Validation: `loopx check --scan-path docs/concepts/interaction-pattern-catalog.md`
-> errors=0 with a clean public boundary scan, and the catalog's own smoke check
(`require_catalog_structure` from `examples/interaction-pattern-catalog-smoke.py`)
passes against the edited text.
Signed-off-by: kokokoXUY <13682395396@163.com>
Copy file name to clipboardExpand all lines: docs/concepts/interaction-pattern-catalog.md
+86-1Lines changed: 86 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -88,7 +88,7 @@ Map P0/P1 catalog rows to canary archetypes before picking commands:
88
88
| --- | --- | --- | --- | --- | --- |
89
89
| Work Routing | IP-001, IP-002, IP-003, IP-007, IP-008, IP-021, IP-029 | Hot-path route canary; Planning governance canary when cadence or repair is involved |`quota should-run`, `interaction_contract`, `work_lane_contract`, scheduler hint, handoff todo state | one eligible delivery fixture, one blocked/fallback fixture, one quiet or monitor fixture | agent turn routing is unsafe: it may spend, wait, notify, or choose fallback incorrectly |
90
90
| Human Decision | IP-004, IP-014, IP-017, IP-027, IP-030, IP-033 | Scoped decision canary; Product/readiness canary when first-screen human copy changes | user todos, decision scope, operator-gate/reward preview, deferred resume candidates | one concrete user ask, one scoped non-blocking gate, one preview-or-append dry run | humans may be asked the wrong question, or an agent may continue without the needed decision |
91
-
| State And Boundary | IP-005, IP-006, IP-011, IP-016, IP-019, IP-020, IP-022, IP-023, IP-025, IP-026, IP-028, IP-031, IP-032, IP-035, IP-036, IP-037, IP-038 | Projection and boundary canary; Hot-path route canary when the projection feeds quota/status | active state, todo metadata, task graph, authority source, claim lease, completed-work archive, install ownership, connector runtime policy, operation receipt, retired setting projection, public/private scan | fixture state plus structured projection check; boundary scan for touched public files | compact state and executable truth diverge, so dashboards and agents may trust stale or unsafe authority |
91
+
| State And Boundary | IP-005, IP-006, IP-011, IP-016, IP-019, IP-020, IP-022, IP-023, IP-025, IP-026, IP-028, IP-031, IP-032, IP-035, IP-036, IP-037, IP-038, IP-039| Projection and boundary canary; Hot-path route canary when the projection feeds quota/status | active state, todo metadata, task graph, authority source, claim lease, completed-work archive, install ownership, connector runtime policy, operation receipt, retired setting projection, public/private scan | fixture state plus structured projection check; boundary scan for touched public files | compact state and executable truth diverge, so dashboards and agents may trust stale or unsafe authority |
92
92
| Evidence Lifecycle | IP-012, IP-015 | Evidence lifecycle canary; Product/readiness canary when evidence is rendered | external handle observation, benchmark lifecycle reducer, compact result projection | compact public-safe evidence fixture with raw-material exclusion assertions | progress evidence may be missing, double-counted, or represented with unsafe raw material |
93
93
| Planning Governance | IP-010, IP-013, IP-018, IP-024, IP-034 | Planning governance canary; Hot-path route canary when cadence changes affect execution | stalled run history, autonomous replan obligation, repair delta, cadence hint, plan-to-todo writeback | two-turn stalled fixture plus repair/writeback delta assertion | the agent may keep planning in prose while the machine-visible frontier stays unchanged |
| P1 | IP-036 | A Lost Response Is Not An Absent Commit | Effect dispatcher plus caller | no interruption unless recovery needs a user decision; report the receipt read back | name the write with a stable operation id, recover by readback instead of blind retry, and never leave a committed record pointing at material nobody published |
348
348
| P1 | IP-037 | A Retired Setting Is Not An Absent Setting | Configuration reader plus migration owner | no interruption; keep the retired entry visible and read-only where it was once configurable | reject the retired activation before any write, carry its retired status and replacement in the projection, and treat clearing it as neither enable nor bootstrap of the replacement |
349
349
| P1 | IP-038 | A Generic Fallback Is Not A Typed Diagnosis | Diagnostic publisher plus its reader | no interruption; the failure names the value or check that was refused | ask the typed channel before any fallback, frame the reason channel by the separator the publisher writes, and report an unrecovered reason as missing evidence rather than as the cause |
350
+
| P1 | IP-039 | An Executed List Must Resolve Against The Tree | CI workflow plus task board owners | no interruption; the check reports the stale entry instead of asking | inventory every path list the change touches and prove the remaining entries resolve |
351
+
352
+
#### IP-039 An Executed List Must Resolve Against The Tree
353
+
354
+
**Trigger**
355
+
356
+
- a change retires, renames, or moves files, and the same change does not
357
+
inventory the places that name those files by path;
358
+
- one of those places is executed literally instead of read as prose: a CI step
359
+
handing paths to a test runner, or a task row whose validation column a
360
+
contributor is told to run verbatim;
361
+
- nothing reports the stale entry where it is read, so it surfaces only when
362
+
someone runs the list — and is then attributed to their change rather than to
363
+
the retirement that orphaned it.
364
+
365
+
**Expected behavior**
366
+
367
+
A list of paths that drives execution is a typed claim about the tree, and it
368
+
has to be checked like one. Four rules keep a retirement from also retiring the
369
+
work the list was there to run.
370
+
371
+
1.**Check the list against the tree, do not maintain it by hand.**
0 commit comments