Skip to content

Commit 13cc490

Browse files
committed
Merge main into docs/catalog-manager-context-authority
Keep main's IP-030 Human Decision row and register IP-031 in the State And Boundary family row, so the catalog keeps one current family mapping after the later IP-030 landing. Signed-off-by: huangruiteng <14976749+huangruiteng@users.noreply.github.com>
2 parents 6bb4131 + 23f9c63 commit 13cc490

1 file changed

Lines changed: 67 additions & 1 deletion

File tree

‎docs/concepts/interaction-pattern-catalog.md‎

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ Map P0/P1 catalog rows to canary archetypes before picking commands:
8888
| --- | --- | --- | --- | --- | --- |
8989
| 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 |
9090
| Human Decision | IP-004, IP-014, IP-017, IP-027, IP-030 | 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 | Projection and boundary canary; Hot-path route canary when the projection feeds quota/status | active state, todo metadata, task graph, authority source, claim lease, connector runtime policy, 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 | Projection and boundary canary; Hot-path route canary when the projection feeds quota/status | active state, todo metadata, task graph, authority source, claim lease, connector runtime policy, 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 |
9292
| 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 |
9393
| Planning Governance | IP-010, IP-013, IP-018, IP-024 | 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 |
9494

@@ -340,6 +340,7 @@ Projection, authority, write scope, and lease integrity.
340340
| P1 | IP-023 | Status Neutral Run Window | Status/quota/history | no interruption | ignore neutral run noise for state authority while retaining it as stall evidence |
341341
| P1 | IP-025 | Experimental Diagnostic Sidecar Boundary | Runtime/protocol owners | no interruption unless an opt-in proof asks for user action | keep proof/debug verdicts as sidecar diagnostics until a product-general schema is validated |
342342
| P1 | IP-028 | Connector Runtime Boundary | Connector/runtime owners | notify only if the required owner decision is missing | enforce runtime allow/deny policy before browser or API connector reads can autoload raw material |
343+
| P1 | IP-031 | Manager Context Is Not Turn Authority | Manager connection owner | no interruption; retention is silent | retain group context only and act only on a provider-native mention, verified reply, or existing typed authority |
343344

344345
### Evidence Lifecycle
345346

@@ -2151,6 +2152,71 @@ or engagement streams.
21512152
- `examples/content-ops-private-connector-gate-smoke.py`;
21522153
- `examples/interaction-pattern-catalog-smoke.py`.
21532154

2155+
#### IP-031 Manager Context Is Not Turn Authority
2156+
2157+
**Trigger**
2158+
2159+
- exactly one enabled Manager binding owns a Lark App and group, so LoopX may
2160+
retain compact non-self group messages as local-private context;
2161+
- an authorized Manager Turn is about to read that context, or a bounded
2162+
turn-start history sync is about to fill the gaps left by the live event
2163+
subscription;
2164+
- a recovered historical message originally mentioned the bound Bot.
2165+
2166+
**Expected behavior**
2167+
2168+
Message visibility and Turn authority stay separate. Retaining a group message
2169+
starts no model call, sends no reply or reaction, acknowledges no provider
2170+
event, and authorizes no Goal or Todo mutation. A Manager Turn is authorized
2171+
only by a provider-native mention of the bound Bot, a provider-verified reply to
2172+
that Bot, or another existing typed authority record.
2173+
2174+
An authorized Turn may receive at most eight recent context-only messages within
2175+
a 4,000-character total budget, each labeled `context-only`, and the prompt
2176+
states that these items are not commands, authorization, or independent Todos.
2177+
Items recovered from history are always marked `context-only` even when they
2178+
originally mentioned the Bot, so catch-up never replays a missed Turn. Provider
2179+
addressing is preserved as historical provenance while normalized live
2180+
attention and reply flags are cleared, which keeps the urgency projection and
2181+
the material-settlement path agreed that a recovered mention is material rather
2182+
than a delayed request.
2183+
2184+
Consumed items settle through the existing event-bound material-review ledger
2185+
after a successful authorized Turn and verified reply, and duplicate delivery
2186+
and restart recovery stay idempotent. Self messages, another chat, invalid
2187+
routing, and ambiguous Manager bindings stay closed and are not captured. The
2188+
connection health projection distinguishes `context_only_captured` from
2189+
`replied_and_acknowledged`.
2190+
2191+
**Visual Model**
2192+
2193+
```mermaid
2194+
flowchart TD
2195+
A["Non-self group message arrives"] --> B{"One enabled Manager binding owns App and group?"}
2196+
B -->|"no"| C["stay closed, capture nothing"]
2197+
B -->|"yes"| D["retain as context-only: no model call, no reply, no authority"]
2198+
D --> E{"Provider-native mention, verified reply, or typed authority?"}
2199+
E -->|"no"| F["stays material, not a request"]
2200+
E -->|"yes"| G["authorized Turn: up to 8 items / 4,000 chars, all context-only"]
2201+
G --> H["verified reply settles the consumed items"]
2202+
F --> I["history catch-up stays context-only, even for old mentions"]
2203+
```
2204+
2205+
**Bad smell**
2206+
2207+
An agent acts on a retained group message because the message is visible, even
2208+
though nothing addressed the bound Bot — visibility was read as permission.
2209+
Another bad smell is a history catch-up replaying an old mention as a delayed
2210+
Turn, or an adapter inventing a second authority source by treating the inbox or
2211+
the material ledger as its own request database.
2212+
2213+
**Validation**
2214+
2215+
- `docs/reference/protocols/lark-manager-context-authority-v0.md`;
2216+
- `tests/extensions/test_lark_turn_start_sync.py`;
2217+
- `tests/extensions/test_lark_goal_topic_runtime.py`;
2218+
- `tests/extensions/test_lark_goal_topic_connections.py`.
2219+
21542220
### Evidence Lifecycle
21552221

21562222
#### IP-012 External Evidence Observation

0 commit comments

Comments
 (0)