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.
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +15 -0
- package/dist/commands/server.js.map +1 -1
- package/dist/core/ContextHierarchy.d.ts +1 -0
- package/dist/core/ContextHierarchy.d.ts.map +1 -1
- package/dist/core/ContextHierarchy.js +49 -0
- package/dist/core/ContextHierarchy.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts +1 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +61 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/package.json +1 -1
- package/scripts/resolve-publish-version.mjs +73 -0
- package/src/data/builtin-manifest.json +17 -17
- package/src/templates/playbook/conversational-catalog-manifest.json +43 -0
- package/upgrades/0.28.125.md +36 -0
- package/upgrades/1.0.8.md +72 -19
- package/upgrades/side-effects/feat-conversational-action-v02.md +68 -0
- package/upgrades/side-effects/feat-publish-version-truth.md +68 -0
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "./builtin-manifest.schema.json",
|
|
3
3
|
"schemaVersion": 1,
|
|
4
|
-
"generatedAt": "2026-05-
|
|
5
|
-
"instarVersion": "0.
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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": "
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
-
- "
|
|
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
|
-
|
|
|
34
|
-
|
|
|
35
|
-
|
|
|
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
|
-
-
|
|
40
|
-
|
|
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.
|