instar 1.3.896 → 1.3.898
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/dashboard/index.html +30 -0
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +111 -1
- package/dist/commands/server.js.map +1 -1
- package/dist/config/ConfigDefaults.d.ts.map +1 -1
- package/dist/config/ConfigDefaults.js +12 -0
- package/dist/config/ConfigDefaults.js.map +1 -1
- package/dist/core/CoherenceJournal.d.ts +17 -1
- package/dist/core/CoherenceJournal.d.ts.map +1 -1
- package/dist/core/CoherenceJournal.js +29 -2
- package/dist/core/CoherenceJournal.js.map +1 -1
- package/dist/core/JournalSyncApplier.d.ts.map +1 -1
- package/dist/core/JournalSyncApplier.js +11 -0
- package/dist/core/JournalSyncApplier.js.map +1 -1
- package/dist/core/MachineSshEndpoint.d.ts +47 -0
- package/dist/core/MachineSshEndpoint.d.ts.map +1 -0
- package/dist/core/MachineSshEndpoint.js +221 -0
- package/dist/core/MachineSshEndpoint.js.map +1 -0
- package/dist/core/MachineSshIdentity.d.ts +26 -0
- package/dist/core/MachineSshIdentity.d.ts.map +1 -0
- package/dist/core/MachineSshIdentity.js +97 -0
- package/dist/core/MachineSshIdentity.js.map +1 -0
- package/dist/core/MeshRpc.d.ts +6 -0
- package/dist/core/MeshRpc.d.ts.map +1 -1
- package/dist/core/MeshRpc.js +2 -0
- package/dist/core/MeshRpc.js.map +1 -1
- package/dist/core/MutualSshHealthController.d.ts +33 -0
- package/dist/core/MutualSshHealthController.d.ts.map +1 -0
- package/dist/core/MutualSshHealthController.js +113 -0
- package/dist/core/MutualSshHealthController.js.map +1 -0
- package/dist/core/MutualSshProbeScheduler.d.ts +21 -0
- package/dist/core/MutualSshProbeScheduler.d.ts.map +1 -0
- package/dist/core/MutualSshProbeScheduler.js +57 -0
- package/dist/core/MutualSshProbeScheduler.js.map +1 -0
- package/dist/core/MutualSshRuntime.d.ts +106 -0
- package/dist/core/MutualSshRuntime.d.ts.map +1 -0
- package/dist/core/MutualSshRuntime.js +423 -0
- package/dist/core/MutualSshRuntime.js.map +1 -0
- package/dist/core/MutualSshVerifier.d.ts +44 -0
- package/dist/core/MutualSshVerifier.d.ts.map +1 -0
- package/dist/core/MutualSshVerifier.js +97 -0
- package/dist/core/MutualSshVerifier.js.map +1 -0
- package/dist/core/PostUpdateMigrator.d.ts +2 -0
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +112 -0
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/SshBootstrapAdvert.d.ts +23 -0
- package/dist/core/SshBootstrapAdvert.d.ts.map +1 -0
- package/dist/core/SshBootstrapAdvert.js +43 -0
- package/dist/core/SshBootstrapAdvert.js.map +1 -0
- package/dist/core/SshHostKeyLifecycle.d.ts +43 -0
- package/dist/core/SshHostKeyLifecycle.d.ts.map +1 -0
- package/dist/core/SshHostKeyLifecycle.js +68 -0
- package/dist/core/SshHostKeyLifecycle.js.map +1 -0
- package/dist/core/SshPeerAdmissionStore.d.ts +29 -0
- package/dist/core/SshPeerAdmissionStore.d.ts.map +1 -0
- package/dist/core/SshPeerAdmissionStore.js +86 -0
- package/dist/core/SshPeerAdmissionStore.js.map +1 -0
- package/dist/core/devGatedFeatures.d.ts.map +1 -1
- package/dist/core/devGatedFeatures.js +6 -0
- package/dist/core/devGatedFeatures.js.map +1 -1
- package/dist/core/machineCoherenceManifest.d.ts.map +1 -1
- package/dist/core/machineCoherenceManifest.js +8 -0
- package/dist/core/machineCoherenceManifest.js.map +1 -1
- package/dist/core/types.d.ts +10 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/server/AgentServer.d.ts +1 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +22 -0
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/CapabilityIndex.js +2 -2
- package/dist/server/CapabilityIndex.js.map +1 -1
- package/dist/server/routes.d.ts +2 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +9 -0
- package/dist/server/routes.js.map +1 -1
- package/dist/testing/selfActionRegistry.d.ts.map +1 -1
- package/dist/testing/selfActionRegistry.js +39 -0
- package/dist/testing/selfActionRegistry.js.map +1 -1
- package/package.json +4 -1
- package/scripts/feature-maturation-plan-gate.mjs +1 -0
- package/skills/spec-converge/scripts/write-convergence-tag.mjs +13 -0
- package/src/core/FeatureMaturationPlanGate.mjs +58 -0
- package/src/data/builtin-manifest.json +64 -64
- package/src/data/state-coherence-registry.json +36 -0
- package/upgrades/1.3.897.md +39 -0
- package/upgrades/1.3.898.md +24 -0
- package/upgrades/side-effects/feature-maturation-plan-visibility.md +84 -0
- package/upgrades/side-effects/mutual-ssh-autobootstrap.md +137 -0
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# Side-Effects Review — Feature maturation plan visibility
|
|
2
|
+
|
|
3
|
+
**Version / slug:** `feature-maturation-plan-visibility`
|
|
4
|
+
**Date:** `2026-07-21`
|
|
5
|
+
**Author:** `Instar-codey`
|
|
6
|
+
**Second-pass reviewer:** `maturation_second_pass`
|
|
7
|
+
|
|
8
|
+
## Summary of the change
|
|
9
|
+
|
|
10
|
+
This strengthens the existing Maturation Path registry article, adds a pure Markdown structure detector, emits a WARN-only diagnostic from the existing convergence tag writer, and delivers both files through PostUpdateMigrator with hash-based customization detection and durable replacement.
|
|
11
|
+
|
|
12
|
+
## Decision-point inventory
|
|
13
|
+
|
|
14
|
+
- `findMaturationPlanGaps` — add — pure structural signal with no blocking authority.
|
|
15
|
+
- convergence tag writer — modify — reports the signal but retains exit status and stamping behavior.
|
|
16
|
+
- migration stock/custom classification — add — deterministic closed-world content-hash invariant protecting user customizations.
|
|
17
|
+
|
|
18
|
+
## 1. Over-block
|
|
19
|
+
|
|
20
|
+
No runtime block exists. A valid non-canonical plan can warn, but v1 still stamps convergence. The canonical accepted form is documented and tested.
|
|
21
|
+
|
|
22
|
+
## 2. Under-block
|
|
23
|
+
|
|
24
|
+
A syntactically complete but poor plan is not rejected. This is intentional: structural parsing is a cheap signal; the lessons-aware reviewer holds semantic authority.
|
|
25
|
+
|
|
26
|
+
## 3. Level-of-abstraction fit
|
|
27
|
+
|
|
28
|
+
The validator sits beside the existing `findDecisionPointGaps` convergence seam. The standard is updated in place. Runtime graduation remains owned by FeatureRolloutReconciler and InitiativeTracker; no parallel engine exists.
|
|
29
|
+
|
|
30
|
+
## 4. Signal vs authority compliance
|
|
31
|
+
|
|
32
|
+
**Required reference:** [docs/signal-vs-authority.md](../../docs/signal-vs-authority.md)
|
|
33
|
+
|
|
34
|
+
- [x] No — this change produces a signal consumed by an existing smart gate.
|
|
35
|
+
|
|
36
|
+
The Markdown parser only reports missing deterministic structure. It cannot veto convergence or judge plan quality.
|
|
37
|
+
|
|
38
|
+
## 4b. Judgment-point check
|
|
39
|
+
|
|
40
|
+
No new heuristic at a competing-signals decision point. Stock-file hash membership and structural field presence are closed-world invariants. Semantic maturation quality remains a reviewer judgment.
|
|
41
|
+
|
|
42
|
+
## 5. Interactions
|
|
43
|
+
|
|
44
|
+
- **Shadowing:** the warning runs after existing open-question and decision-point hard gates, and before tag writing. It cannot shadow either gate.
|
|
45
|
+
- **Double-fire:** one invocation emits at most one stable warning line.
|
|
46
|
+
- **Races:** migration writes use unique sibling temps, exclusive create, file and directory sync, and same-filesystem rename.
|
|
47
|
+
- **Feedback loops:** none in v1; no scheduler or initiative cadence is added.
|
|
48
|
+
|
|
49
|
+
## 6. External surfaces
|
|
50
|
+
|
|
51
|
+
Developers may see a new stderr warning during spec convergence. No messages, routes, external APIs, persistent runtime records, or operator actions are added.
|
|
52
|
+
|
|
53
|
+
## 6b. Operator-surface quality
|
|
54
|
+
|
|
55
|
+
No operator surface — not applicable.
|
|
56
|
+
|
|
57
|
+
## 7. Multi-machine posture
|
|
58
|
+
|
|
59
|
+
Unified: the detector, tag writer, and standard are git/package artifacts delivered identically to each machine. V1 emits no notice, durable rollout state, or URL. Existing customized targets remain local by user choice and are reported untouched.
|
|
60
|
+
|
|
61
|
+
## 8. Rollback cost
|
|
62
|
+
|
|
63
|
+
Revert and ship a patch. The warning creates no data. Installed stock files retain durable pre-migration backups; customized files are never modified.
|
|
64
|
+
|
|
65
|
+
## Conclusion
|
|
66
|
+
|
|
67
|
+
The change is bounded to warning visibility, extends the correct existing owners, and preserves semantic authority. The main risks—parser false positives and migration corruption—are non-blocking or covered by adversarial and injected-failure tests.
|
|
68
|
+
|
|
69
|
+
## Second-pass review (if required)
|
|
70
|
+
|
|
71
|
+
**Reviewer:** maturation_second_pass
|
|
72
|
+
**Independent read of the artifact:** concur
|
|
73
|
+
|
|
74
|
+
Concur with the review — the implementation now preserves WARN-only signal authority, exact gate classification, customization-safe durable migration parity, and the v1-only boundary with all 26 targeted tests passing.
|
|
75
|
+
|
|
76
|
+
## Evidence pointers
|
|
77
|
+
|
|
78
|
+
- `tests/unit/feature-maturation-plan-gate.test.ts`
|
|
79
|
+
- `tests/unit/write-convergence-tag-maturation-plan.test.ts`
|
|
80
|
+
- `tests/unit/PostUpdateMigrator-feature-maturation.test.ts`
|
|
81
|
+
|
|
82
|
+
## Class-Closure Declaration (display-only mirror)
|
|
83
|
+
|
|
84
|
+
No agent-authored-artifact defect — not applicable. This is a new WARN-stage guard, not a defect repair or self-triggered controller.
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
# Side-Effects Review — Mutual SSH Autobootstrap
|
|
2
|
+
|
|
3
|
+
**Version / slug:** `mutual-ssh-autobootstrap`
|
|
4
|
+
**Date:** 2026-07-20
|
|
5
|
+
**Author:** Instar-codey
|
|
6
|
+
**Second-pass reviewer:** Claude Sonnet clean-door security review (2026-07-21)
|
|
7
|
+
|
|
8
|
+
## Summary of the change
|
|
9
|
+
|
|
10
|
+
This build adds Instar-owned SSH client/host identities, leased paired-peer admission,
|
|
11
|
+
a restricted `instar-rpc` ssh2 endpoint, directional proof, bounded health repair,
|
|
12
|
+
dev-dark/dry-run configuration, boot integration, and a scrubbed health route. It
|
|
13
|
+
touches cryptographic admission and mutual-read invariants but grants no shell access.
|
|
14
|
+
|
|
15
|
+
## Decision-point inventory
|
|
16
|
+
|
|
17
|
+
- Bootstrap-advert acceptance — added invariant authority: signed-principal caller
|
|
18
|
+
supplies identity; this validator enforces schema, epoch, expiry, key and private-
|
|
19
|
+
endpoint bounds.
|
|
20
|
+
- Peer authentication — added invariant authority: exact leased public-key identity.
|
|
21
|
+
- Direction/mutual truth — added invariant authority: current pinned proof exists in
|
|
22
|
+
both directions or `mutual` is false.
|
|
23
|
+
- Repair escalation — added bounded deterministic policy; host-key mismatch notifies
|
|
24
|
+
immediately, ordinary failures exhaust four attempts or 120 seconds.
|
|
25
|
+
|
|
26
|
+
## 1. Over-block
|
|
27
|
+
|
|
28
|
+
IPv6 private endpoints are not yet admitted by the narrow endpoint validator, so a
|
|
29
|
+
private IPv6-only paired host is reported blocked rather than weakened to a public or
|
|
30
|
+
unverified bind. Loopback is accepted only for the local real-transport fixture and
|
|
31
|
+
never by signed peer advert validation.
|
|
32
|
+
|
|
33
|
+
## 2. Under-block
|
|
34
|
+
|
|
35
|
+
The endpoint relies on the exact-pinned ssh2 parser and Node cryptography. Novel
|
|
36
|
+
parser vulnerabilities remain possible; the narrow algorithm/channel surface and
|
|
37
|
+
dependency audit gate reduce but cannot eliminate that risk. The rollout remains
|
|
38
|
+
dry-run-first and fleet-dark.
|
|
39
|
+
|
|
40
|
+
## 3. Level-of-abstraction fit
|
|
41
|
+
|
|
42
|
+
The identity, admission, endpoint, verifier, and controller are separate primitives.
|
|
43
|
+
Mesh/pairing supplies authenticated public facts; SSH independently proves possession
|
|
44
|
+
and reachability. The controller produces transport health and does not become a
|
|
45
|
+
parallel routing authority.
|
|
46
|
+
|
|
47
|
+
## 4. Signal vs authority compliance
|
|
48
|
+
|
|
49
|
+
Required reference: `docs/signal-vs-authority.md`. Probe outcomes are signals. The
|
|
50
|
+
deterministic blocks are cryptographic, structural, expiry, resource, and public-bind
|
|
51
|
+
security invariants—the explicitly permitted enumerable-authority case. No heuristic
|
|
52
|
+
interprets operator intent or message meaning.
|
|
53
|
+
|
|
54
|
+
## 4b. Judgment-point check
|
|
55
|
+
|
|
56
|
+
No competing-signals judgment heuristic is added. Endpoint selection and validity
|
|
57
|
+
operate within finite authenticated candidates; uncertainty produces no proof.
|
|
58
|
+
|
|
59
|
+
## 5. Interactions
|
|
60
|
+
|
|
61
|
+
- Dedicated state is disjoint from personal SSH state and AgentRegistry ports.
|
|
62
|
+
- Pairing epoch, observer boot id, and generations are carried end-to-end; stale
|
|
63
|
+
replay cannot refresh an admission or proof.
|
|
64
|
+
- Authentication and subsystem-open both re-read the admission lease.
|
|
65
|
+
- The scheduler refuses overlapping sweeps; its concurrency counter and pair breaker
|
|
66
|
+
prevent unbounded work, while successful proof settles the episode.
|
|
67
|
+
|
|
68
|
+
## 6. External surfaces
|
|
69
|
+
|
|
70
|
+
The new SSH listener is restricted to loopback/private/Tailscale-style addresses and
|
|
71
|
+
exposes no general command surface. The read-only health route omits key bodies and
|
|
72
|
+
raw addresses. No operator action is introduced; dry-run/live selection is existing
|
|
73
|
+
configuration policy, not a new API-only approval.
|
|
74
|
+
|
|
75
|
+
## 6b. Operator-surface quality
|
|
76
|
+
|
|
77
|
+
The Machines dashboard adds a compact SSH-enrollment card. The read surface uses
|
|
78
|
+
plain enrollment states (`paired`, `ssh-bootstrap`, `ssh-bootstrap-blocked`,
|
|
79
|
+
`ssh-proving`, `ready`) and contains no raw keys or addresses.
|
|
80
|
+
|
|
81
|
+
1. **Leads with the primary action:** this is status-only, so current readiness and
|
|
82
|
+
enrollment state are the first content; there is no hidden operator action.
|
|
83
|
+
2. **Zero raw internals as primary content:** the card shows plain state, direction
|
|
84
|
+
counts, and human-readable blocked reasons; keys, fingerprints, boot ids, epochs,
|
|
85
|
+
and addresses are omitted.
|
|
86
|
+
3. **Destructive actions de-emphasized:** no destructive action is exposed.
|
|
87
|
+
4. **Plain language + phone width:** the card reuses the responsive Machines grid,
|
|
88
|
+
short labels, and wrapping reason text; it introduces no table or horizontal
|
|
89
|
+
overflow at phone width.
|
|
90
|
+
|
|
91
|
+
## 7. Multi-machine posture
|
|
92
|
+
|
|
93
|
+
Machine private keys, host keys, admission leases, and endpoint truth are
|
|
94
|
+
**machine-local BY DESIGN** because they are physical credentials and reachability.
|
|
95
|
+
Public adverts travel over authenticated Mesh RPC; signed directional proofs replicate
|
|
96
|
+
through the coherence journal and are revalidated on receipt. The pool health contract
|
|
97
|
+
is **proxied-on-read**. This slice emits no user-facing notice directly and generates
|
|
98
|
+
no URL. The fleet-uniform coherence manifest now also covers the effective Mutual SSH
|
|
99
|
+
dev-gate plus dry-run value, so a half-enabled pool raises the existing skew alarm
|
|
100
|
+
instead of silently presenting asymmetric readiness.
|
|
101
|
+
|
|
102
|
+
## 8. Rollback cost
|
|
103
|
+
|
|
104
|
+
Disable the dev gate, drain/close the endpoint, and revert the runtime files. Dedicated
|
|
105
|
+
keys and scrubbed audit metadata may remain inert; no personal SSH repair or user-state
|
|
106
|
+
migration is required. Removing the state directory later is optional cleanup.
|
|
107
|
+
|
|
108
|
+
## Conclusion
|
|
109
|
+
|
|
110
|
+
The implementation preserves the central security boundary: paired-machine identity
|
|
111
|
+
is prerequisite, every SSH direction proves itself, and failure stays honestly
|
|
112
|
+
non-mutual. Fleet-dark/dry-run rollout contains exposure. Independent review completed
|
|
113
|
+
before commit because this touches admission, lifecycle, and a self-action controller.
|
|
114
|
+
|
|
115
|
+
## Second-pass review
|
|
116
|
+
|
|
117
|
+
**Reviewer:** Claude Sonnet, clean-door read-only review
|
|
118
|
+
**Independent read:** No critical findings. Two major findings were resolved before
|
|
119
|
+
commit: host rotation now carries a separately verified MachineAuth transition
|
|
120
|
+
signature, and malformed proof timestamps fail closed before freshness checks. Full
|
|
121
|
+
dispositions are recorded in `docs/review/mutual-ssh-phase1-security-review.md`.
|
|
122
|
+
|
|
123
|
+
## Class-Closure Declaration
|
|
124
|
+
|
|
125
|
+
This closes the `Symmetric Transport Proof` class from the approved spec: the real
|
|
126
|
+
transport fixture and mutuality unit test fail any future implementation that claims
|
|
127
|
+
mutual from one direction. The self-action loop is bounded by four attempts, 120
|
|
128
|
+
seconds, concurrency 4, a three-episode breaker, and a settled proof state; the
|
|
129
|
+
self-action convergence ratchet is part of final ceremony evidence.
|
|
130
|
+
|
|
131
|
+
- `defectClass`: `unbounded-self-action`
|
|
132
|
+
- `closure`: `guard`
|
|
133
|
+
- `guardEvidence`: `{ enforcementType: ratchet, citation:
|
|
134
|
+
tests/unit/self-action-convergence.test.ts, howCaught: the registered mutual SSH
|
|
135
|
+
repair model is driven under permanent path rejection and proves its four-attempt,
|
|
136
|
+
two-minute episode plus concurrency ceiling and fifteen-minute post-breaker rate
|
|
137
|
+
floor prevent retry accumulation or acceleration }`
|