instar 1.3.497 → 1.3.498

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "instar",
3
- "version": "1.3.497",
3
+ "version": "1.3.498",
4
4
  "description": "Coherence infrastructure for self-evolving AI agents — on the Claude Code or Codex subscription you already have.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -97,7 +97,8 @@ The review must answer each of the following in writing. "No issue identified" i
97
97
  4. **Signal vs authority compliance** — does this hold blocking authority with brittle logic, or does it produce a signal that feeds a smart gate? (Required reference: `docs/signal-vs-authority.md`.)
98
98
  5. **Interactions** — does it shadow another check, get shadowed by one, double-fire, race with adjacent cleanup?
99
99
  6. **External surfaces** — does it change anything visible to other agents, other users, other systems? Does it depend on timing, conversation state, or runtime conditions we can't fully control?
100
- 7. **Rollback cost** — if this turns out wrong in production, what's the back-out? Hot-fix release? Data migration? Agent state repair?
100
+ 7. **Multi-machine posture (Cross-Machine Coherence)** — when this agent runs on MORE than one machine, what is this feature's posture: replicated (name the replication path) / proxied-on-read (name the merged read) / machine-local BY DESIGN (with the reason)? A silent single-machine-only assumption is the defect this question exists to catch (~20 features shipped machine-blind before it was added — 2026-06-12 audit, topic 13481). Also: user-facing notices need one-voice gating; durable state must not strand on topic transfer; generated URLs must survive machine boundaries.
101
+ 8. **Rollback cost** — if this turns out wrong in production, what's the back-out? Hot-fix release? Data migration? Agent state repair?
101
102
 
102
103
  ### Phase 4.5 — No-deferrals check (enforced in pre-commit)
103
104
 
@@ -101,7 +101,36 @@
101
101
 
102
102
  ---
103
103
 
104
- ## 7. Rollback cost
104
+ ## 7. Multi-machine posture (Cross-Machine Coherence)
105
+
106
+ **When this agent runs on MORE THAN ONE machine, what is this feature's posture?**
107
+ Declare exactly one, with the reason. "I didn't think about multi-machine" is the
108
+ defect this section exists to catch — ~20 features shipped machine-blind before this
109
+ question was added (2026-06-12 audit, topic 13481; the converged
110
+ MULTI-MACHINE-SEAMLESSNESS-SPEC is the cleanup bill).
111
+
112
+ - **replicated** — the state/behavior follows the agent across machines (name the
113
+ replication path: coherence-journal kind, secret-sync, heartbeat field, …).
114
+ - **proxied-on-read** — machine-local state served pool-wide via a merged/scoped read
115
+ (name the read: `?scope=pool`, mesh relay, …).
116
+ - **machine-local BY DESIGN** — give the reason it SHOULD differ per machine
117
+ (machine-specific truths, security boundary, pure per-machine observability).
118
+ "By design" without a reason is not an answer.
119
+ - **single-machine-only assumption** — NOT a valid posture for new features. If the
120
+ feature breaks or duplicates when a second machine exists (double notices, stranded
121
+ state, dashboard blindness, broken links), that is a finding to resolve before
122
+ shipping, not a posture to declare.
123
+
124
+ Also answer explicitly: does it emit user-facing notices (one-voice gating needed?),
125
+ hold durable state (does it strand on topic transfer?), or generate URLs (do they
126
+ survive machine boundaries?).
127
+
128
+ [Specific. "Machine-local by design: the reap-log is a per-machine audit trail; the
129
+ pool-wide question is answered by a proxied-on-read merged view." Not abstractions.]
130
+
131
+ ---
132
+
133
+ ## 8. Rollback cost
105
134
 
106
135
  **If this turns out wrong in production, what's the back-out?**
107
136
 
@@ -68,7 +68,7 @@ The skill spawns reviewers in parallel:
68
68
  - **Security.** Attack surfaces, leaks, privilege escalation, auth on endpoints, prompt injection vectors, rotation races.
69
69
  - **Scalability/performance.** Hot-path cost, concurrent writes, memory churn, fail-open semantics, hook latency.
70
70
  - **Adversarial.** Misbehaving-session scenarios — bad-entry poisoning, self-reinforcing loops, stale claims, authority ambiguity, kind gaming.
71
- - **Integration/deployment.** Migration, backup/restore, multi-machine, config knobs, dashboard surface, rollback.
71
+ - **Integration/deployment.** Migration, backup/restore, multi-machine, config knobs, dashboard surface, rollback. **Multi-machine posture (Cross-Machine Coherence — mandatory check):** every feature/state surface the spec introduces must declare its posture when the agent runs on more than one machine — replicated (named replication path) / proxied-on-read (named merged read) / machine-local BY DESIGN (with the reason). A spec whose features silently assume a single machine is a MATERIAL finding: ~20 features shipped machine-blind before this check existed (2026-06-12 audit, topic 13481; MULTI-MACHINE-SEAMLESSNESS-SPEC is the cleanup bill). Probe specifically: user-facing notices (one-voice gating?), durable state (strands on topic transfer?), generated URLs (survive machine boundaries?).
72
72
  - **Decision-Completeness.** (Autonomy Principle 2 — `docs/specs/AUTONOMY-PRINCIPLES-ENFORCEMENT-SPEC.md` Piece 2.) Enumerates every point where the building agent would have to **stop mid-run and ask the user**. Each must be either **frontloaded** into a `## Frontloaded Decisions` section or explicitly tagged **cheap-to-change-after** because the work ships behind a named dark/dry-run/read-only phase. The reviewer **CONTESTS every cheap tag** — it independently asserts reversibility, and a closed non-cheap taxonomy overrides any tag: anything touching **durable external side-effects, money, identity, or a published/user-visible interface is NEVER cheap**, regardless of a "ships dark" label. A contested tag the reviewer rejects is a **material finding that blocks convergence**. Prompt: `templates/reviewer-decision-completeness.md`. Applies to ALL specs through this skill (D7) — no size gate, no per-spec override (D11; the rejected `disposition: override` escape hatch would reopen the exact skip-hatch Principle 2 closes).
73
73
  - **Lessons-aware.** Loads the canonical Instar Design Principles + Lessons Learned index (`docs/INSTAR-DESIGN-PRINCIPLES-AND-LESSONS.md`) plus the running agent's local `.instar/memory/feedback_*.md` entries, then checks the spec for (a) direct contradictions of documented principles/lessons, (b) applicable lessons the spec fails to engage with, (c) behavioral lessons violated by agent-facing surfaces the spec proposes, and **(d) FOUNDATION/SUBSYSTEM AUDIT — the design the spec TESTS, EXTENDS, or BUILDS ON, not just the spec's own surface: does that foundation violate a known standard or repeat a known mistake?** The audit MUST reach one layer below the spec boundary. A spec can be internally clean while faithfully testing or extending a flawed foundation — e.g. a test-harness spec that correctly proves a permission gate which *itself* holds brittle blocking authority in violation of Signal-vs-Authority, or an extension spec built on a subsystem with an unaddressed gap. Taking the underlying subsystem "as given" is exactly how a standards violation survives review: the spec passes, the foundation's flaw is never weighed. When the foundation is flawed, the finding is "this spec is sound but the subsystem it depends on violates standard X / repeats mistake Y — surface it before building on/around it." Catches the "Phase 2" anti-pattern, the spec-converge-pre-auth-circular failure mode (see `feedback_spec_converge_pre_auth_circular`), and the foundation-not-audited gap (the Slack-permission-gate brittle-enum-as-authority that the harness convergence cleared because it audited only the harness, 2026-06-09).
74
74
 
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "./builtin-manifest.schema.json",
3
3
  "schemaVersion": 1,
4
- "generatedAt": "2026-06-12T21:39:24.602Z",
5
- "instarVersion": "1.3.497",
4
+ "generatedAt": "2026-06-12T22:17:19.275Z",
5
+ "instarVersion": "1.3.498",
6
6
  "entryCount": 201,
7
7
  "entries": {
8
8
  "hook:session-start": {
@@ -11,7 +11,7 @@
11
11
  "domain": "identity",
12
12
  "sourcePath": "src/core/PostUpdateMigrator.ts",
13
13
  "installedPath": ".instar/hooks/instar/session-start.sh",
14
- "contentHash": "9d579207a3dfe3648f298c9274abd0e9ecada3fa0d0b896bcc6fb9cbac0d67c1",
14
+ "contentHash": "a909f0a1078bd61ce110cee9f691a717430714af40eb83bb49d86b31450372b7",
15
15
  "since": "2025-01-01"
16
16
  },
17
17
  "hook:dangerous-command-guard": {
@@ -20,7 +20,7 @@
20
20
  "domain": "safety",
21
21
  "sourcePath": "src/core/PostUpdateMigrator.ts",
22
22
  "installedPath": ".instar/hooks/instar/dangerous-command-guard.sh",
23
- "contentHash": "9d579207a3dfe3648f298c9274abd0e9ecada3fa0d0b896bcc6fb9cbac0d67c1",
23
+ "contentHash": "a909f0a1078bd61ce110cee9f691a717430714af40eb83bb49d86b31450372b7",
24
24
  "since": "2025-01-01"
25
25
  },
26
26
  "hook:grounding-before-messaging": {
@@ -29,7 +29,7 @@
29
29
  "domain": "safety",
30
30
  "sourcePath": "src/core/PostUpdateMigrator.ts",
31
31
  "installedPath": ".instar/hooks/instar/grounding-before-messaging.sh",
32
- "contentHash": "9d579207a3dfe3648f298c9274abd0e9ecada3fa0d0b896bcc6fb9cbac0d67c1",
32
+ "contentHash": "a909f0a1078bd61ce110cee9f691a717430714af40eb83bb49d86b31450372b7",
33
33
  "since": "2025-01-01"
34
34
  },
35
35
  "hook:compaction-recovery": {
@@ -38,7 +38,7 @@
38
38
  "domain": "identity",
39
39
  "sourcePath": "src/core/PostUpdateMigrator.ts",
40
40
  "installedPath": ".instar/hooks/instar/compaction-recovery.sh",
41
- "contentHash": "9d579207a3dfe3648f298c9274abd0e9ecada3fa0d0b896bcc6fb9cbac0d67c1",
41
+ "contentHash": "a909f0a1078bd61ce110cee9f691a717430714af40eb83bb49d86b31450372b7",
42
42
  "since": "2025-01-01"
43
43
  },
44
44
  "hook:external-operation-gate": {
@@ -47,7 +47,7 @@
47
47
  "domain": "safety",
48
48
  "sourcePath": "src/core/PostUpdateMigrator.ts",
49
49
  "installedPath": ".instar/hooks/instar/external-operation-gate.js",
50
- "contentHash": "9d579207a3dfe3648f298c9274abd0e9ecada3fa0d0b896bcc6fb9cbac0d67c1",
50
+ "contentHash": "a909f0a1078bd61ce110cee9f691a717430714af40eb83bb49d86b31450372b7",
51
51
  "since": "2025-01-01"
52
52
  },
53
53
  "hook:deferral-detector": {
@@ -56,7 +56,7 @@
56
56
  "domain": "safety",
57
57
  "sourcePath": "src/core/PostUpdateMigrator.ts",
58
58
  "installedPath": ".instar/hooks/instar/deferral-detector.js",
59
- "contentHash": "9d579207a3dfe3648f298c9274abd0e9ecada3fa0d0b896bcc6fb9cbac0d67c1",
59
+ "contentHash": "a909f0a1078bd61ce110cee9f691a717430714af40eb83bb49d86b31450372b7",
60
60
  "since": "2025-01-01"
61
61
  },
62
62
  "hook:self-stop-guard": {
@@ -65,7 +65,7 @@
65
65
  "domain": "coherence",
66
66
  "sourcePath": "src/core/PostUpdateMigrator.ts",
67
67
  "installedPath": ".instar/hooks/instar/self-stop-guard.js",
68
- "contentHash": "9d579207a3dfe3648f298c9274abd0e9ecada3fa0d0b896bcc6fb9cbac0d67c1",
68
+ "contentHash": "a909f0a1078bd61ce110cee9f691a717430714af40eb83bb49d86b31450372b7",
69
69
  "since": "2025-01-01"
70
70
  },
71
71
  "hook:post-action-reflection": {
@@ -74,7 +74,7 @@
74
74
  "domain": "evolution",
75
75
  "sourcePath": "src/core/PostUpdateMigrator.ts",
76
76
  "installedPath": ".instar/hooks/instar/post-action-reflection.js",
77
- "contentHash": "9d579207a3dfe3648f298c9274abd0e9ecada3fa0d0b896bcc6fb9cbac0d67c1",
77
+ "contentHash": "a909f0a1078bd61ce110cee9f691a717430714af40eb83bb49d86b31450372b7",
78
78
  "since": "2025-01-01"
79
79
  },
80
80
  "hook:external-communication-guard": {
@@ -83,7 +83,7 @@
83
83
  "domain": "safety",
84
84
  "sourcePath": "src/core/PostUpdateMigrator.ts",
85
85
  "installedPath": ".instar/hooks/instar/external-communication-guard.js",
86
- "contentHash": "9d579207a3dfe3648f298c9274abd0e9ecada3fa0d0b896bcc6fb9cbac0d67c1",
86
+ "contentHash": "a909f0a1078bd61ce110cee9f691a717430714af40eb83bb49d86b31450372b7",
87
87
  "since": "2025-01-01"
88
88
  },
89
89
  "hook:scope-coherence-collector": {
@@ -92,7 +92,7 @@
92
92
  "domain": "coherence",
93
93
  "sourcePath": "src/core/PostUpdateMigrator.ts",
94
94
  "installedPath": ".instar/hooks/instar/scope-coherence-collector.js",
95
- "contentHash": "9d579207a3dfe3648f298c9274abd0e9ecada3fa0d0b896bcc6fb9cbac0d67c1",
95
+ "contentHash": "a909f0a1078bd61ce110cee9f691a717430714af40eb83bb49d86b31450372b7",
96
96
  "since": "2025-01-01"
97
97
  },
98
98
  "hook:scope-coherence-checkpoint": {
@@ -101,7 +101,7 @@
101
101
  "domain": "coherence",
102
102
  "sourcePath": "src/core/PostUpdateMigrator.ts",
103
103
  "installedPath": ".instar/hooks/instar/scope-coherence-checkpoint.js",
104
- "contentHash": "9d579207a3dfe3648f298c9274abd0e9ecada3fa0d0b896bcc6fb9cbac0d67c1",
104
+ "contentHash": "a909f0a1078bd61ce110cee9f691a717430714af40eb83bb49d86b31450372b7",
105
105
  "since": "2025-01-01"
106
106
  },
107
107
  "hook:free-text-guard": {
@@ -110,7 +110,7 @@
110
110
  "domain": "safety",
111
111
  "sourcePath": "src/core/PostUpdateMigrator.ts",
112
112
  "installedPath": ".instar/hooks/instar/free-text-guard.sh",
113
- "contentHash": "9d579207a3dfe3648f298c9274abd0e9ecada3fa0d0b896bcc6fb9cbac0d67c1",
113
+ "contentHash": "a909f0a1078bd61ce110cee9f691a717430714af40eb83bb49d86b31450372b7",
114
114
  "since": "2025-01-01"
115
115
  },
116
116
  "hook:claim-intercept": {
@@ -119,7 +119,7 @@
119
119
  "domain": "coherence",
120
120
  "sourcePath": "src/core/PostUpdateMigrator.ts",
121
121
  "installedPath": ".instar/hooks/instar/claim-intercept.js",
122
- "contentHash": "9d579207a3dfe3648f298c9274abd0e9ecada3fa0d0b896bcc6fb9cbac0d67c1",
122
+ "contentHash": "a909f0a1078bd61ce110cee9f691a717430714af40eb83bb49d86b31450372b7",
123
123
  "since": "2025-01-01"
124
124
  },
125
125
  "hook:claim-intercept-response": {
@@ -128,7 +128,7 @@
128
128
  "domain": "coherence",
129
129
  "sourcePath": "src/core/PostUpdateMigrator.ts",
130
130
  "installedPath": ".instar/hooks/instar/claim-intercept-response.js",
131
- "contentHash": "9d579207a3dfe3648f298c9274abd0e9ecada3fa0d0b896bcc6fb9cbac0d67c1",
131
+ "contentHash": "a909f0a1078bd61ce110cee9f691a717430714af40eb83bb49d86b31450372b7",
132
132
  "since": "2025-01-01"
133
133
  },
134
134
  "hook:stop-gate-router": {
@@ -137,7 +137,7 @@
137
137
  "domain": "safety",
138
138
  "sourcePath": "src/core/PostUpdateMigrator.ts",
139
139
  "installedPath": ".instar/hooks/instar/stop-gate-router.js",
140
- "contentHash": "9d579207a3dfe3648f298c9274abd0e9ecada3fa0d0b896bcc6fb9cbac0d67c1",
140
+ "contentHash": "a909f0a1078bd61ce110cee9f691a717430714af40eb83bb49d86b31450372b7",
141
141
  "since": "2025-01-01"
142
142
  },
143
143
  "hook:auto-approve-permissions": {
@@ -146,7 +146,7 @@
146
146
  "domain": "safety",
147
147
  "sourcePath": "src/core/PostUpdateMigrator.ts",
148
148
  "installedPath": ".instar/hooks/instar/auto-approve-permissions.js",
149
- "contentHash": "9d579207a3dfe3648f298c9274abd0e9ecada3fa0d0b896bcc6fb9cbac0d67c1",
149
+ "contentHash": "a909f0a1078bd61ce110cee9f691a717430714af40eb83bb49d86b31450372b7",
150
150
  "since": "2025-01-01"
151
151
  },
152
152
  "job:health-check": {
@@ -1554,7 +1554,7 @@
1554
1554
  "type": "subsystem",
1555
1555
  "domain": "updates",
1556
1556
  "sourcePath": "src/core/PostUpdateMigrator.ts",
1557
- "contentHash": "9d579207a3dfe3648f298c9274abd0e9ecada3fa0d0b896bcc6fb9cbac0d67c1",
1557
+ "contentHash": "a909f0a1078bd61ce110cee9f691a717430714af40eb83bb49d86b31450372b7",
1558
1558
  "since": "2025-01-01"
1559
1559
  },
1560
1560
  "subsystem:scheduler": {
@@ -0,0 +1,51 @@
1
+ # Upgrade Guide — vNEXT
2
+
3
+ <!-- assembled-by: assemble-next-md -->
4
+ <!-- bump: patch -->
5
+
6
+ ## What Changed
7
+
8
+ Root-cause fix for "how did ~20 features ship incompatible with the seamless
9
+ multi-machine goal?" (operator question, 2026-06-12 topic 13481): no review surface
10
+ ever asked. Now three do —
11
+
12
+ 1. The instar-dev side-effects template gains mandatory **§7 Multi-machine posture**:
13
+ every change declares replicated (named path) / proxied-on-read (named read) /
14
+ machine-local BY DESIGN (with the reason). A silent single-machine assumption is a
15
+ finding, not a posture. (Rollback cost renumbered §7→§8.)
16
+ 2. spec-converge's integration/deployment reviewer charter makes the same check
17
+ mandatory at spec time — a machine-blind spec is a MATERIAL finding that blocks
18
+ convergence.
19
+ 3. The Cross-Machine Coherence constitution article's "Applied through" is widened to
20
+ name these gates (per-feature posture rule), giving the Standards Enforcement
21
+ Coverage audit a verifiable surface.
22
+
23
+ Deployed agents receive the updated skill content via a new PostUpdateMigrator
24
+ migration (`migrateMultiMachinePostureReviewDimension`) — marker-sniffed,
25
+ fingerprint-guarded (operator-customized files left untouched + reported), idempotent,
26
+ following the migrateSpecConvergeFoundationAudit pattern.
27
+
28
+ ## What to Tell Your User
29
+
30
+ - "The development process that builds my features now has a mandatory checkpoint: every new feature must declare, in writing, how it behaves when I run on more than one machine — it travels with me, it's readable from any machine, or it deliberately belongs to one machine for a stated reason. This is the structural fix for the batch of features that previously assumed a single machine."
31
+
32
+ ## Summary of New Capabilities
33
+
34
+ | Capability | How to Use |
35
+ |-----------|-----------|
36
+ | Multi-machine posture is a mandatory review dimension | Automatic — enforced in the side-effects template + spec-converge reviews; deployed agents receive the updated review docs on their next update |
37
+
38
+ ## Evidence
39
+
40
+ - `tests/unit/PostUpdateMigrator-mmPostureReviewDimension.test.ts` — 4 tests: bundled
41
+ sources really carry the marker; stock installed copies upgraded + idempotent;
42
+ customized copies untouched + reported; missing files skipped silently.
43
+ - `tsc --noEmit` clean; affected suites green.
44
+ - Side-effects artifact: `upgrades/side-effects/multi-machine-posture-review-dimension.md`.
45
+ - Plain-English overview: `docs/eli16/multi-machine-posture-review-dimension.md`.
46
+
47
+ ## What Changed for the Review Process
48
+
49
+ This change's own side-effects artifact answers the new question about itself
50
+ (machine-local by design: per-machine installed skill content kept current by each
51
+ machine's update cycle) — the gate is dogfooded on the PR that introduces it.
@@ -0,0 +1,76 @@
1
+ # Side-Effects Review — Multi-machine posture review dimension (Cross-Machine Coherence widening)
2
+
3
+ **Trigger:** operator question, 2026-06-12 topic 13481 ("we have developed so many
4
+ features that have gaps … is it the constitution or our enforcement?"). The audit
5
+ answer: both, but chiefly enforcement — NO review surface ever asked the multi-machine
6
+ question, so ~20 features shipped machine-blind.
7
+ **Change:** (1) side-effects template gains mandatory §7 "Multi-machine posture"
8
+ (replicated / proxied-on-read / machine-local-by-design-with-reason; single-machine
9
+ assumption is a finding, not a posture); (2) the matching Phase-4 question in the
10
+ instar-dev SKILL; (3) a mandatory posture check in spec-converge's
11
+ integration/deployment reviewer charter; (4) the Cross-Machine Coherence article's
12
+ "Applied through" widened to name these gates (so the conformance audit can verify
13
+ them); (5) PostUpdateMigrator migration delivering the updated skill content to
14
+ deployed agents (Migration Parity, "updating existing skill content" — pattern copy of
15
+ migrateSpecConvergeFoundationAudit: marker-sniffed, fingerprint-guarded, idempotent,
16
+ customized files untouched).
17
+
18
+ ## 1. Over-block
19
+ The new review question blocks nothing programmatically — it is a required SECTION in
20
+ a review document and a reviewer charter line. The cost it adds is one honest
21
+ paragraph per change. A genuinely machine-agnostic change answers "machine-local by
22
+ design: <reason>" in one line. No legitimate change becomes unshippable.
23
+
24
+ ## 2. Under-block
25
+ The question is willpower-adjacent until the conformance audit verifies the section's
26
+ presence (the registry now names the gates, which is what the Standards Enforcement
27
+ Coverage audit reads). A reviewer can still write a lazy posture answer — the
28
+ spec-converge integration reviewer's charter makes a silent single-machine assumption
29
+ a MATERIAL finding, which is the structural counterweight. Programmatic
30
+ section-presence checking in the pre-commit gate is a natural ratchet if lazy answers
31
+ show up (the registry text gives it a home).
32
+
33
+ ## 3. Level-of-abstraction fit
34
+ Right layer: the defect was a missing QUESTION at review time, so the fix adds the
35
+ question to both review surfaces (side-effects + spec-converge) and anchors it in the
36
+ constitution article those surfaces trace to. Not duplicated logic — one rule, named
37
+ in the registry, asked at the two existing chokepoints.
38
+
39
+ ## 4. Signal vs authority compliance
40
+ No new blocking authority. The template/charter additions are review-content
41
+ requirements; the only "block" is the existing spec-converge materiality bar, which is
42
+ already the convergence mechanism. The migration is a content patch with no decision
43
+ logic.
44
+
45
+ ## 5. Interactions
46
+ - The migration follows the established skill-content-update pattern and runs once
47
+ (marker check). It cannot fight installBuiltinSkills (which never overwrites).
48
+ - Renumbering Rollback cost §7→§8 in the template: existing committed artifacts are
49
+ unaffected (the pre-commit gate checks artifact existence/coverage, not section
50
+ numbering).
51
+ - The spec-converge charter addition extends the integration reviewer's prompt
52
+ composition; no phase logic changes.
53
+
54
+ ## 6. External surfaces
55
+ None outside the install base. Deployed agents receive updated skill files on their
56
+ next update via the migration; operator-customized files are left untouched and
57
+ reported in the migration result.
58
+
59
+ ## 7. Multi-machine posture (Cross-Machine Coherence)
60
+ **machine-local BY DESIGN, with reason** — these are agent-installed skill/template
61
+ files: each machine's install legitimately carries its own copy at its own installed
62
+ version, kept current per machine by PostUpdateMigrator on that machine's update
63
+ cycle. Version skew between machines is bounded by the existing update train (drift
64
+ promoter). No user-facing notices, no durable runtime state, no generated URLs.
65
+ (This section is itself the new question, answered — dogfooded on its own PR.)
66
+
67
+ ## 8. Rollback cost
68
+ Revert the template/SKILL/registry edits and ship; the migration is marker-gated so a
69
+ reverted bundle simply stops patching (already-patched agents keep the question — a
70
+ benign residue: it asks reviewers for one honest paragraph). No data, no config, no
71
+ runtime behavior.
72
+
73
+ ## Second-pass review
74
+ Not required — no block/allow decisions, no session lifecycle, no
75
+ gate/sentinel/watchdog runtime surface (docs/skills content + a content-patch
76
+ migration following an established pattern).