instar 0.28.124 → 1.0.8

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.
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "$schema": "./builtin-manifest.schema.json",
3
3
  "schemaVersion": 1,
4
- "generatedAt": "2026-05-19T17:11:01.459Z",
5
- "instarVersion": "0.28.124",
4
+ "generatedAt": "2026-05-19T19:32:42.283Z",
5
+ "instarVersion": "1.0.8",
6
6
  "entryCount": 189,
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": "47337f719ab5f0f928b0cd90e2b89e478379ddf52f6d35c6ff261b0e0b5ecaaf",
14
+ "contentHash": "a156953ebeb92e9933387946aad8919825df0de17fba326e01ce8cb22b93c23b",
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": "47337f719ab5f0f928b0cd90e2b89e478379ddf52f6d35c6ff261b0e0b5ecaaf",
23
+ "contentHash": "a156953ebeb92e9933387946aad8919825df0de17fba326e01ce8cb22b93c23b",
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": "47337f719ab5f0f928b0cd90e2b89e478379ddf52f6d35c6ff261b0e0b5ecaaf",
32
+ "contentHash": "a156953ebeb92e9933387946aad8919825df0de17fba326e01ce8cb22b93c23b",
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": "47337f719ab5f0f928b0cd90e2b89e478379ddf52f6d35c6ff261b0e0b5ecaaf",
41
+ "contentHash": "a156953ebeb92e9933387946aad8919825df0de17fba326e01ce8cb22b93c23b",
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": "47337f719ab5f0f928b0cd90e2b89e478379ddf52f6d35c6ff261b0e0b5ecaaf",
50
+ "contentHash": "a156953ebeb92e9933387946aad8919825df0de17fba326e01ce8cb22b93c23b",
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": "47337f719ab5f0f928b0cd90e2b89e478379ddf52f6d35c6ff261b0e0b5ecaaf",
59
+ "contentHash": "a156953ebeb92e9933387946aad8919825df0de17fba326e01ce8cb22b93c23b",
60
60
  "since": "2025-01-01"
61
61
  },
62
62
  "hook:post-action-reflection": {
@@ -65,7 +65,7 @@
65
65
  "domain": "evolution",
66
66
  "sourcePath": "src/core/PostUpdateMigrator.ts",
67
67
  "installedPath": ".instar/hooks/instar/post-action-reflection.js",
68
- "contentHash": "47337f719ab5f0f928b0cd90e2b89e478379ddf52f6d35c6ff261b0e0b5ecaaf",
68
+ "contentHash": "a156953ebeb92e9933387946aad8919825df0de17fba326e01ce8cb22b93c23b",
69
69
  "since": "2025-01-01"
70
70
  },
71
71
  "hook:external-communication-guard": {
@@ -74,7 +74,7 @@
74
74
  "domain": "safety",
75
75
  "sourcePath": "src/core/PostUpdateMigrator.ts",
76
76
  "installedPath": ".instar/hooks/instar/external-communication-guard.js",
77
- "contentHash": "47337f719ab5f0f928b0cd90e2b89e478379ddf52f6d35c6ff261b0e0b5ecaaf",
77
+ "contentHash": "a156953ebeb92e9933387946aad8919825df0de17fba326e01ce8cb22b93c23b",
78
78
  "since": "2025-01-01"
79
79
  },
80
80
  "hook:scope-coherence-collector": {
@@ -83,7 +83,7 @@
83
83
  "domain": "coherence",
84
84
  "sourcePath": "src/core/PostUpdateMigrator.ts",
85
85
  "installedPath": ".instar/hooks/instar/scope-coherence-collector.js",
86
- "contentHash": "47337f719ab5f0f928b0cd90e2b89e478379ddf52f6d35c6ff261b0e0b5ecaaf",
86
+ "contentHash": "a156953ebeb92e9933387946aad8919825df0de17fba326e01ce8cb22b93c23b",
87
87
  "since": "2025-01-01"
88
88
  },
89
89
  "hook:scope-coherence-checkpoint": {
@@ -92,7 +92,7 @@
92
92
  "domain": "coherence",
93
93
  "sourcePath": "src/core/PostUpdateMigrator.ts",
94
94
  "installedPath": ".instar/hooks/instar/scope-coherence-checkpoint.js",
95
- "contentHash": "47337f719ab5f0f928b0cd90e2b89e478379ddf52f6d35c6ff261b0e0b5ecaaf",
95
+ "contentHash": "a156953ebeb92e9933387946aad8919825df0de17fba326e01ce8cb22b93c23b",
96
96
  "since": "2025-01-01"
97
97
  },
98
98
  "hook:free-text-guard": {
@@ -101,7 +101,7 @@
101
101
  "domain": "safety",
102
102
  "sourcePath": "src/core/PostUpdateMigrator.ts",
103
103
  "installedPath": ".instar/hooks/instar/free-text-guard.sh",
104
- "contentHash": "47337f719ab5f0f928b0cd90e2b89e478379ddf52f6d35c6ff261b0e0b5ecaaf",
104
+ "contentHash": "a156953ebeb92e9933387946aad8919825df0de17fba326e01ce8cb22b93c23b",
105
105
  "since": "2025-01-01"
106
106
  },
107
107
  "hook:claim-intercept": {
@@ -110,7 +110,7 @@
110
110
  "domain": "coherence",
111
111
  "sourcePath": "src/core/PostUpdateMigrator.ts",
112
112
  "installedPath": ".instar/hooks/instar/claim-intercept.js",
113
- "contentHash": "47337f719ab5f0f928b0cd90e2b89e478379ddf52f6d35c6ff261b0e0b5ecaaf",
113
+ "contentHash": "a156953ebeb92e9933387946aad8919825df0de17fba326e01ce8cb22b93c23b",
114
114
  "since": "2025-01-01"
115
115
  },
116
116
  "hook:claim-intercept-response": {
@@ -119,7 +119,7 @@
119
119
  "domain": "coherence",
120
120
  "sourcePath": "src/core/PostUpdateMigrator.ts",
121
121
  "installedPath": ".instar/hooks/instar/claim-intercept-response.js",
122
- "contentHash": "47337f719ab5f0f928b0cd90e2b89e478379ddf52f6d35c6ff261b0e0b5ecaaf",
122
+ "contentHash": "a156953ebeb92e9933387946aad8919825df0de17fba326e01ce8cb22b93c23b",
123
123
  "since": "2025-01-01"
124
124
  },
125
125
  "hook:auto-approve-permissions": {
@@ -128,7 +128,7 @@
128
128
  "domain": "safety",
129
129
  "sourcePath": "src/core/PostUpdateMigrator.ts",
130
130
  "installedPath": ".instar/hooks/instar/auto-approve-permissions.js",
131
- "contentHash": "47337f719ab5f0f928b0cd90e2b89e478379ddf52f6d35c6ff261b0e0b5ecaaf",
131
+ "contentHash": "a156953ebeb92e9933387946aad8919825df0de17fba326e01ce8cb22b93c23b",
132
132
  "since": "2025-01-01"
133
133
  },
134
134
  "job:health-check": {
@@ -1456,7 +1456,7 @@
1456
1456
  "type": "subsystem",
1457
1457
  "domain": "updates",
1458
1458
  "sourcePath": "src/core/PostUpdateMigrator.ts",
1459
- "contentHash": "47337f719ab5f0f928b0cd90e2b89e478379ddf52f6d35c6ff261b0e0b5ecaaf",
1459
+ "contentHash": "a156953ebeb92e9933387946aad8919825df0de17fba326e01ce8cb22b93c23b",
1460
1460
  "since": "2025-01-01"
1461
1461
  },
1462
1462
  "subsystem:scheduler": {
@@ -0,0 +1,43 @@
1
+ {
2
+ "version": 1,
3
+ "name": "instar-conversational-catalog",
4
+ "description": "Conversational-action catalog pointer for Playbook (Instar v1.0 built-in)",
5
+ "items": [
6
+ {
7
+ "id": "/instar/conversational-catalog",
8
+ "category": "infrastructure",
9
+ "memory_type": "procedural",
10
+ "path": ".instar/context/conversational-actions.md",
11
+ "tags": {
12
+ "domains": ["conversational-action", "intent-interpretation", "capability"],
13
+ "qualifiers": ["on-demand", "structural", "bloat-aware"]
14
+ },
15
+ "freshness": "2026-05-19T00:00:00Z",
16
+ "tokens_est": 800,
17
+ "usefulness": { "helpful": 0, "misleading": 0 },
18
+ "load_triggers": [
19
+ "interpreting-user-intent",
20
+ "matching-to-skill",
21
+ "translating-conversation-to-action",
22
+ "user-said-switch-to-X",
23
+ "user-said-lets-do-Y"
24
+ ],
25
+ "dependencies": [],
26
+ "provenance": [
27
+ {
28
+ "source_session": "GENESIS",
29
+ "created_at": "2026-05-19",
30
+ "provenance_type": "instar-builtin",
31
+ "spec": "specs/instar-concepts/conversational-action.md (v0.2)",
32
+ "context_segment": ".instar/context/conversational-actions.md",
33
+ "probe_name": "conversational-catalog",
34
+ "rationale": "On-demand load of the invocable action catalog. Per Instar Design Principle P1 (Structure>Willpower) and the AGENT.md bloat lesson (L1), the catalog is NEVER inlined into AGENT.md. Playbook scoring decides when this pointer is relevant; SelfKnowledgeTree probe materializes the live catalog when fetched."
35
+ }
36
+ ],
37
+ "retirement_policy": "auto",
38
+ "access_scope": "global",
39
+ "inheritance_eligible": true,
40
+ "status": "active"
41
+ }
42
+ ]
43
+ }
@@ -0,0 +1,36 @@
1
+ # Upgrade Guide — v1.0.13
2
+
3
+ <!-- bump: patch -->
4
+
5
+ ## What Changed
6
+
7
+ Wires the v0.1 conversational-action catalog primitives (`discoverActions`, `renderCatalogBlock` from PR #256) through Instar's three pre-built bloat defenses — ContextHierarchy Tier 2 segment, SelfKnowledgeTree probe, and Playbook context item. The v0.1 deliberately shipped the catalog as pure data with no inlining into AGENT.md, because Instar already has structural defenses against AGENT.md bloat. This release wires the consumers.
8
+
9
+ The catalog content lives in the `conversational-catalog` SelfKnowledgeTree probe — generated fresh on each probe call, never cached. The new ContextHierarchy Tier 2 segment `.instar/context/conversational-actions.md` is the dispatch instruction (when the agent is in an intent-interpretation moment, this segment tells it to fetch the catalog via the probe). The new `conversational-catalog.json` Playbook manifest item is the third on-demand loader — Playbook's scoring engine surfaces the pointer when intent-interpretation triggers fire. All three paths are on-demand by design. The catalog is never inlined into the always-loaded identity prompt.
10
+
11
+ A semantic correctness test asserts that the Tier 1 loadTier output does not contain the conversational-actions segment content. If a future PR accidentally re-introduces AGENT.md inlining, the test fails.
12
+
13
+ ## Evidence
14
+
15
+ Reproduction prior to this release: a user says "let's switch to local model" in conversation. The agent has no on-demand path to discover the available conversational actions — `.instar/skills/` exists on disk but the agent has no instruction to consult it for intent interpretation, no probe registered at server boot, and no Playbook item surfaced by the scoring engine. The agent falls back to asking the user for a slash command, breaking the conversation-default promise.
16
+
17
+ Observed after this release: same setup, three on-demand load paths come alive. The dispatch table for the new Tier 2 segment fires on the `interpreting-user-intent` trigger; the segment instructs the agent to invoke the `conversational-catalog` probe. The probe calls `discoverActions` + `renderCatalogBlock` and returns the live catalog. The agent matches the user's intent against the catalog and routes to the local-model skill. The slash-command surface is never shown.
18
+
19
+ Unit-test verification: three new ContextHierarchy tests (segment content presence, dispatch table registration, Tier 1 loadTier exclusion) and three new PostUpdateMigrator tests (manifest install when missing, idempotency on second run, refresh on content drift). The existing 19 ContextHierarchy tests continue to pass.
20
+
21
+ ## What to Tell Your User
22
+
23
+ - "When you say something like 'let's switch to local' or 'send Dawn a message', I now have three independent on-demand paths to discover the right action without you having to know a slash-command name. The catalog is generated live on each lookup, never inlined into my always-loaded identity prompt, and the bloat-aware design is asserted-against in the test suite so a future regression can't sneak it back in."
24
+
25
+ ## Summary of New Capabilities
26
+
27
+ | Capability | How to Use |
28
+ |-----------|-----------|
29
+ | Conversational-actions ContextHierarchy segment | Automatic. The Tier 2 segment loads on `interpreting-user-intent`, `matching-to-skill`, or `translating-conversation-to-action` triggers. |
30
+ | `conversational-catalog` SelfKnowledgeTree probe | Automatic. Registered at server boot when `selfKnowledgeTree` is enabled. The probe walks `.instar/skills/` and returns the live catalog on each call. |
31
+ | Playbook conversational-catalog manifest | Automatic install via PostUpdateMigrator; mount with `instar playbook mount` (explicit consent per Playbook design). |
32
+
33
+ ## Deferred (Tracked Follow-ups)
34
+
35
+ - HTTP endpoint `/capabilities/conversational-catalog` is referenced in the segment as a third fallback after the probe; not implemented in this PR. The probe is the canonical access path; the HTTP endpoint is a future convenience.
36
+ - Future v0.3 may add new triggers to the manifest template; PostUpdateMigrator's content-sniff guard will refresh the manifest on update without operator action.
package/upgrades/1.0.8.md CHANGED
@@ -1,40 +1,93 @@
1
- # Upgrade Guide — v1.0.8
1
+ # Upgrade Guide — v1.0.8 (the v1.0 milestone)
2
2
 
3
3
  <!-- bump: patch -->
4
4
 
5
5
  ## What Changed
6
6
 
7
- Restores Migration Parity §4 conformance for canonical (built-in) hooks. The Hook primitive shipped in PR #253 with a stamp-and-refuse-on-conflict pattern that resurrected the install-if-missing wedge §4 was written to prevent. This release inverts the policy so that built-in hooks are once again always overwritten on every migration run.
8
-
9
- Three small code changes:
10
-
11
- - The ParityRule interface gained an optional alwaysOverwrite field.
12
- - hookParityRule sets alwaysOverwrite to true.
13
- - FrameworkParitySentinel honors alwaysOverwrite and emits a new parity:user-edit-overwritten audit event when overwriting a user-edited rendering.
14
-
15
- The user-edit detection stays as a signal in verify output; only the blocking authority moves from the rule to the higher-context Migration Parity policy. skillParityRule does NOT opt in because Migration Parity §5 explicitly carves out skills as refuse-on-conflict with PostUpdateMigrator override.
7
+ This is the official v1.0 milestone release. Two things land together because
8
+ they are causally linked:
9
+
10
+ 1. **Versioning is now truthful.** The release workflow honors the version in
11
+ `package.json` as the operator's authority for an intended release. It used
12
+ to derive the next version solely from the npm registry and ignore
13
+ `package.json`, which made a deliberate major/minor release structurally
14
+ impossible. That gap is the documented root cause of the 2026-05-19
15
+ deployment misalignment, where v1.0 framework-parity work shipped to npm
16
+ under v0.28.x patch numbers. The release that makes truthful versioning
17
+ possible is, fittingly, the release that stamps v1.0.
18
+
19
+ 2. **The v1.0 milestone is the framework-portability architecture.** Instar is
20
+ no longer tied to Claude Code as a runtime. The eleven Layer-3 primitives
21
+ (skill, hook, agent, tool, memory, instruction-file, session-resume,
22
+ slash-command, outbound-relay, conversational-action, MCP-server) are
23
+ abstracted behind a parity-rule registry. Identity renders per framework
24
+ (Claude Code, Codex, Gemini) from a single canonical source. Session-launch
25
+ builders, the intelligence-provider factory, and the post-update migrator
26
+ are all framework-aware.
27
+
28
+ The version-resolution policy was extracted from inline workflow scripting
29
+ into `scripts/resolve-publish-version.mjs` so it is unit-tested.
16
30
 
17
31
  ## Evidence
18
32
 
19
- Reproduction prior to this release: render a canonical hook to .claude/hooks/session-start/inject.sh, append a user edit (e.g. echo "user added"), then run the parity scan. The verify pass reports user-edit-conflict, and the sentinel skips remediation. On the next instar update where the canonical hook source changes (the typical fix-broken-template scenario), the agent stays stuck on the user-edited stale rendering.
33
+ Reproduction prior to this change: set `package.json` to a higher version
34
+ while npm is behind, merge to main. The workflow published the npm-derived
35
+ patch and silently discarded the intended version. This is the documented
36
+ root cause in `docs/incidents/2026-05-19-v1-deployment-misalignment.md`.
20
37
 
21
- Observed after this release: same setup, same parity scan, the sentinel now calls remediate, the rendering is overwritten with the new canonical body, and the operator sees parity:user-edit-overwritten in the audit stream. Recovery of the user edit is available via git history if needed.
38
+ Observed after this change: a higher `package.json` version than npm publishes
39
+ at the intended version (this is how v1.0.8 itself ships). A routine PR that
40
+ does not touch `package.json` still resolves to the next patch. A stale lower
41
+ `package.json` resolves to npm patch-plus-one, never a downgrade.
22
42
 
23
- Unit-test verification: tests/unit/providers/parity/hookParityRule.test.ts now asserts remediate ALWAYS OVERWRITES user-edits per Migration Parity §4. tests/unit/monitoring/FrameworkParitySentinel.test.ts asserts the new audit event fires for alwaysOverwrite rules.
43
+ Unit verification: `tests/unit/resolve-publish-version.test.ts` — nine cases
44
+ covering greater-than, equal, and less-than across each semver field,
45
+ operator-intended major and minor bumps, routine patch, stale no-downgrade,
46
+ unpublished-package, and a regression replaying the exact 2026-05-19 incident
47
+ input and asserting it now resolves to the intended version.
24
48
 
25
49
  ## What to Tell Your User
26
50
 
27
- - "When Instar ships a built-in hook, the canonical version always wins on the next update. A subtle regression in the Hook primitive was making us refuse to overwrite hooks that anyone had edited locally — which is exactly the pattern that left us stuck on a broken template once before. This release puts the always-overwrite policy back in place, and adds an audit signal so any clobbered edit is visible and recoverable from git."
51
+ - "Instar v1.0 is here. The headline is portability: your agent is no longer locked to one runtime. The same agent identity, skills, hooks, and memory now render correctly whether the runtime is Claude Code, Codex, or another supported framework. This release also fixes the versioning process so the published version always matches what we intend to ship."
52
+ - "If you are updating an existing agent, there is nothing you need to do. The framework-portability code already reached you through earlier patch updates; this release stamps the milestone and corrects the version number. Six narrow hardening improvements ship as quick follow-up patches over the next few releases."
28
53
 
29
54
  ## Summary of New Capabilities
30
55
 
31
56
  | Capability | How to Use |
32
57
  |-----------|-----------|
33
- | ParityRule alwaysOverwrite field | Set alwaysOverwrite to true on rules covered by Migration Parity §4. Defaults to false (refuse-on-conflict for §5 rules like skills). |
34
- | parity:user-edit-overwritten audit event | Sentinel emits this whenever an alwaysOverwrite rule clobbers a user-edited rendering. Listen via FrameworkParitySentinel events. |
35
- | Canonical hook always-overwrite restored | No action required; built-in hooks are now once again always overwritten on every migration cycle. Custom hooks in .claude/hooks/custom/ continue to be untouched. |
58
+ | Truthful versioning | Automatic. The release workflow honors the intended version. Routine patches are unchanged. |
59
+ | Framework portability | Automatic. Agent identity and the eleven primitives render per runtime from a single canonical source. |
60
+ | Per-framework identity | Canonical identity lives in one place; the runtime-specific shadow file is regenerated on demand. |
61
+
62
+ ## Agent Migration Notes
63
+
64
+ For an agent updating from any v0.28.x to v1.0.8:
65
+
66
+ - **Required actions: none.** The framework-portability code shipped
67
+ incrementally under v0.28.122–v0.28.125. This release stamps the milestone
68
+ and corrects the version label. No canonical-file migration is required.
69
+ - **What is new on disk after update:** the post-update migrator continues to
70
+ refresh framework-rendered copies of canonical primitives. The
71
+ conversational-action catalog is reachable through its on-demand loaders
72
+ (context segment, knowledge-tree probe, playbook item). No always-loaded
73
+ identity-prompt growth.
74
+ - **Verification an agent can run on itself:** confirm the installed version
75
+ reads 1.0.8 or higher; confirm the canonical identity file is the source of
76
+ truth and the runtime shadow carries the auto-generated banner.
77
+ - **If an agent runs a non-Claude-Code runtime:** six narrow portability gaps
78
+ (documented in the v1.0.0 cross-framework audit) ship as v1.0.9–v1.0.14
79
+ patches immediately after this release. Until then, dual-framework installs
80
+ are unaffected; the gaps only touch single-runtime non-Claude-Code installs.
36
81
 
37
82
  ## Deferred (Tracked Follow-ups)
38
83
 
39
- - Wire parity:user-edit-overwritten into a Dashboard view so operators see clobber events without grepping logs.
40
- - Audit the remaining merged primitive PRs (#254 Agent/Tool/Memory and #255 Sentinel ship-order) using the lessons-aware reviewer; corrective amendments per finding.
84
+ - Six audit-flagged portability hardening gaps ship as v1.0.9–v1.0.14 patches:
85
+ init routing through the identity renderer, framework-aware connector-server
86
+ registration, a framework-session-store abstraction, neutral relay-script
87
+ path, post-update-migrator framework guards, and migrator/identity-renderer
88
+ unification. Each has a documented fix from the cross-framework audit.
89
+ - The broader deployment-lockdown infrastructure (release-tier config,
90
+ multi-signature for major bumps, major-work branch isolation, hold-signal,
91
+ incident-memory injection) is designed separately and tracked in the
92
+ deployment-lockdown topic. This release is only the version-truth
93
+ prerequisite plus the milestone stamp.
@@ -0,0 +1,68 @@
1
+ # Side-effects review — Conversational-action v0.2 (three on-demand loaders)
2
+
3
+ Per L6 (Side-effects review gate). Seven dimensions.
4
+
5
+ ## 1. Over-block / under-block
6
+
7
+ **Before this change.** UNDER-blocked: the v0.1 (PR #256) shipped catalog primitives but deliberately omitted any wiring. The catalog existed as pure data; agents had no on-demand load path. The promise "user says intent → agent recognizes via catalog" was a future promise, not an observed behavior.
8
+
9
+ **After this change.** No over-block risk. All three loaders are on-demand by design. The semantic correctness test asserts the conversational-actions content is NOT in Tier 0 or Tier 1 loads, so the AGENT.md bloat anti-pattern can't sneak back in via accidental regression.
10
+
11
+ The Playbook integration is opt-in via `instar playbook mount` — operator explicit consent per Playbook design. Operators who don't mount the Playbook manifest still get the other two loaders (segment + probe).
12
+
13
+ ## 2. Level-of-abstraction fit
14
+
15
+ Each loader lives in its natural home:
16
+ - ContextHierarchy Tier 2 segment → `src/core/ContextHierarchy.ts` DEFAULT_SEGMENTS array
17
+ - SelfKnowledgeTree probe → `src/commands/server.ts` boot path (alongside the existing feature-discovery probe)
18
+ - Playbook manifest → `src/templates/playbook/` (template) + PostUpdateMigrator step (installer)
19
+
20
+ The probe registration deliberately uses dynamic import (`await import(...)`) so the catalog primitives aren't pulled into the boot graph until the probe is invoked. Lazy load = no startup cost for agents that never trigger the catalog.
21
+
22
+ The PostUpdateMigrator step uses content-sniff idempotency (skip if existing file matches template byte-for-byte). On every update, the template is re-checked; if it has drifted (e.g., a future v0.3 adds new triggers to the manifest), the file is refreshed.
23
+
24
+ ## 3. Signal vs Authority compliance
25
+
26
+ The ContextHierarchy Tier 2 segment is the SIGNAL — it tells the agent "you're in an intent-interpretation moment, here's how to fetch the catalog." The SelfKnowledgeTree probe is the AUTHORITY — when invoked, it returns the live catalog. The Playbook item is a complementary RELEVANCE signal — Playbook's scoring engine decides when to surface the pointer based on usefulness history.
27
+
28
+ Three independent signal/authority paths give the agent multiple on-ramps. No single load path is mandatory; each fills a different role.
29
+
30
+ ## 4. Interactions with adjacent systems
31
+
32
+ **ContextHierarchy initializer.** The new segment uses the existing template-generator pattern. `generateSegmentTemplate('conversational-actions')` returns a fresh template string; the initializer writes it on first init AND on every update (via the parity-renderings backfill from PR #262, which re-renders all canonical sources).
33
+
34
+ **SelfKnowledgeTree.** The probe is registered alongside the existing `feature-discovery` probe at server boot. Both probes are conditional on `selfKnowledgeTree` being non-null (matches the existing pattern). No new lifecycle complications.
35
+
36
+ **Playbook system.** The manifest template lives in `src/templates/playbook/` and is shipped to `.instar/playbook/builtin-manifests/` on update. The actual mount registration is operator-initiated via `instar playbook mount`. No automatic mount — this preserves Playbook's "explicit consent for context items" invariant.
37
+
38
+ **PostUpdateMigrator backfill (PR #262, now on main).** The parity-renderings backfill re-renders the ContextHierarchy segment on every update, so the conversational-actions segment file stays fresh. The new migrateConversationalCatalogPlaybookManifest step is a sibling — also idempotent, also runs on every update.
39
+
40
+ **AGENT.md.** Unchanged. The whole point of this PR is to NOT add the catalog to AGENT.md. Asserted structurally by the semantic correctness test.
41
+
42
+ ## 5. Rollback cost
43
+
44
+ Low. Five files changed (one new template, one new test file, three sibling additions to existing files: ContextHierarchy, server.ts probe registration, PostUpdateMigrator step). Revert is `git revert`. Deployed agents would keep the Playbook manifest file (orphan, harmless — Playbook ignores unmounted manifests); the segment file would remain (still readable but the dispatch table would no longer fire for intent-interpretation triggers). The probe would be unregistered on next server restart.
45
+
46
+ ## 6. Backwards compatibility / drift surface
47
+
48
+ Backwards-compatible:
49
+ - v0.1 catalog primitives unchanged.
50
+ - Existing ContextHierarchy segments unchanged.
51
+ - Existing SelfKnowledgeTree probes unchanged.
52
+ - Playbook manifest is additive (only writes to builtin-manifests/; never modifies existing mounts).
53
+
54
+ **Drift surface.** The conversational-actions segment file content is regenerated by ContextHierarchy.initialize() — operators who customize the file would lose customizations on update. This is consistent with all other Tier 0-2 segment files (initialize-only-when-missing protection has been removed in favor of always-overwrite via PR #262's parity-renderings backfill for canonical sources). Operators who want custom intent-dispatch instructions should add a separate custom segment file outside the DEFAULT_SEGMENTS path.
55
+
56
+ **Playbook manifest format.** The shipped template uses Playbook's documented manifest schema. If Playbook v2 changes the schema, this template would need updating. Documented as a known coupling.
57
+
58
+ ## 7. Authorization / Trust posture
59
+
60
+ No new authority claims. The probe is read-only (walks `.instar/skills/`, returns a string). The PostUpdateMigrator step writes to `.instar/playbook/builtin-manifests/` (a write surface PostUpdateMigrator already has authority over). The Playbook mount registration is operator-initiated — `instar playbook mount` is a CLI command requiring explicit user invocation.
61
+
62
+ Trust-floor implications: the conversational-catalog probe is at the same Tier-1 LLM-supervised execution surface as the other knowledge-tree probes. Output is capped at the probe's default `maxOutputChars` (2000 chars). Catalog blocks exceeding this would be truncated; v0.1's renderCatalogBlock produces compact output well within the cap for typical skill counts.
63
+
64
+ ## Outcome
65
+
66
+ Ship.
67
+
68
+ The three on-demand loaders are wired structurally. The AGENT.md bloat anti-pattern is asserted-against in the semantic correctness test. The catalog content lives in the probe (dynamic, live) — the segment and Playbook item are pointers, never the content itself. Final v1.0 task closed; the conversational-action layer is structurally complete.
@@ -0,0 +1,68 @@
1
+ # Side-effects review — Publish version-truth
2
+
3
+ Per L6. Seven dimensions.
4
+
5
+ ## 1. Over-block / under-block
6
+
7
+ **Before.** UNDER: the workflow could not express an operator-intended major
8
+ bump at all — every release was a patch. This is the incident root cause.
9
+
10
+ **After.** No over-block. Routine patch PRs (the overwhelming majority, which
11
+ don't touch package.json) behave identically — LOCAL == NPM → patch+1. The
12
+ only new path is "LOCAL > NPM → honor LOCAL," which is exactly the
13
+ intentional-leap case. The LOCAL < NPM guard prevents an accidental downgrade
14
+ (a queued-run stale-package scenario), so there's no new under-block either.
15
+
16
+ ## 2. Level-of-abstraction fit
17
+
18
+ The resolution policy lives in `scripts/resolve-publish-version.mjs` — a pure
19
+ function with a CLI shim, unit-tested. The workflow calls it. This is the
20
+ right altitude: decision logic in testable code, orchestration in the
21
+ workflow. No logic buried in inline bash.
22
+
23
+ ## 3. Signal vs Authority compliance
24
+
25
+ package.json is the SIGNAL of operator intent. The npm registry is the
26
+ AUTHORITY for what shipped. The script reconciles them deterministically with
27
+ a documented precedence. No brittle filter is granted blocking authority; the
28
+ script never *blocks* a publish, it only *resolves the number*. (The loud
29
+ refusal-on-mismatch behavior is part of the separate lockdown spec, not this
30
+ PR.)
31
+
32
+ ## 4. Interactions with adjacent systems
33
+
34
+ - **Release workflow.** Only the "Determine next version" step changes. The
35
+ NEXT.md skip-gate, the guide-check, the publish, and the tag/commit steps
36
+ are untouched.
37
+ - **Routine patch line.** Unchanged. Verified by the `eq` test case.
38
+ - **Queued concurrent runs.** The original concern ("queued runs leave
39
+ package.json out of sync") is preserved: a queued run that lands after an
40
+ earlier publish bumped will see LOCAL <= NPM and patch-bump cleanly, not
41
+ collide.
42
+ - **The v1.0.0 cut.** This is the enabling change — the alignment PR will set
43
+ package.json to 1.0.0 and the workflow will, for the first time, honor it.
44
+
45
+ ## 5. Rollback cost
46
+
47
+ Low. Three files (workflow step, new script, new test). `git revert` restores
48
+ the npm-derived behavior. No state migration, no deployed-agent impact (this
49
+ is build-time infra, not shipped runtime code).
50
+
51
+ ## 6. Backwards compatibility / drift surface
52
+
53
+ Fully backwards-compatible for the patch line. The only behavioral delta is
54
+ the previously-impossible major/minor leap. No config, no schema, no agent
55
+ files touched. Drift surface: none — the script has no persistent state.
56
+
57
+ ## 7. Authorization / Trust posture
58
+
59
+ No new authority. The script reads two version strings and prints one. It
60
+ cannot publish, cannot mutate state, cannot escalate. The actual publish
61
+ authority (NPM_TOKEN) is unchanged and still gated by the same CI required
62
+ checks via branch protection.
63
+
64
+ ## Outcome
65
+
66
+ Ship. Minimal, incident-driven, fully tested, no over-block, trivial
67
+ rollback. Unblocks the v1.0.0 cut without pulling in the broader lockdown
68
+ scope.