instar 1.3.1223 → 1.3.1225

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.
Files changed (95) hide show
  1. package/.claude/skills/autonomous/SKILL.md +8 -3
  2. package/.claude/skills/autonomous/hooks/autonomous-stop-hook.sh +35 -17
  3. package/.claude/skills/autonomous/scripts/setup-autonomous.sh +31 -2
  4. package/dist/commands/server.d.ts.map +1 -1
  5. package/dist/commands/server.js +9 -1
  6. package/dist/commands/server.js.map +1 -1
  7. package/dist/config/ConfigDefaults.d.ts.map +1 -1
  8. package/dist/config/ConfigDefaults.js +28 -0
  9. package/dist/config/ConfigDefaults.js.map +1 -1
  10. package/dist/core/AutonomousRunStore.d.ts +7 -1
  11. package/dist/core/AutonomousRunStore.d.ts.map +1 -1
  12. package/dist/core/AutonomousRunStore.js +24 -4
  13. package/dist/core/AutonomousRunStore.js.map +1 -1
  14. package/dist/core/AutonomousSessions.d.ts +9 -0
  15. package/dist/core/AutonomousSessions.d.ts.map +1 -1
  16. package/dist/core/AutonomousSessions.js +58 -0
  17. package/dist/core/AutonomousSessions.js.map +1 -1
  18. package/dist/core/CodexTaskContinuationStore.d.ts +24 -1
  19. package/dist/core/CodexTaskContinuationStore.d.ts.map +1 -1
  20. package/dist/core/CodexTaskContinuationStore.js +77 -3
  21. package/dist/core/CodexTaskContinuationStore.js.map +1 -1
  22. package/dist/core/IdentityRenderer.d.ts.map +1 -1
  23. package/dist/core/IdentityRenderer.js +2 -0
  24. package/dist/core/IdentityRenderer.js.map +1 -1
  25. package/dist/core/OwnershipApplier.d.ts +45 -7
  26. package/dist/core/OwnershipApplier.d.ts.map +1 -1
  27. package/dist/core/OwnershipApplier.js +112 -25
  28. package/dist/core/OwnershipApplier.js.map +1 -1
  29. package/dist/core/PostUpdateMigrator.d.ts +4 -2
  30. package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
  31. package/dist/core/PostUpdateMigrator.js +100 -11
  32. package/dist/core/PostUpdateMigrator.js.map +1 -1
  33. package/dist/core/WindowLifecycleObligationLedger.d.ts +36 -5
  34. package/dist/core/WindowLifecycleObligationLedger.d.ts.map +1 -1
  35. package/dist/core/WindowLifecycleObligationLedger.js +138 -19
  36. package/dist/core/WindowLifecycleObligationLedger.js.map +1 -1
  37. package/dist/core/WindowRunCadenceExecutor.d.ts +172 -0
  38. package/dist/core/WindowRunCadenceExecutor.d.ts.map +1 -0
  39. package/dist/core/WindowRunCadenceExecutor.js +461 -0
  40. package/dist/core/WindowRunCadenceExecutor.js.map +1 -0
  41. package/dist/core/WindowRunLivenessAuthority.d.ts +231 -0
  42. package/dist/core/WindowRunLivenessAuthority.d.ts.map +1 -0
  43. package/dist/core/WindowRunLivenessAuthority.js +565 -0
  44. package/dist/core/WindowRunLivenessAuthority.js.map +1 -0
  45. package/dist/core/WriteDomainRegistry.d.ts.map +1 -1
  46. package/dist/core/WriteDomainRegistry.js +8 -0
  47. package/dist/core/WriteDomainRegistry.js.map +1 -1
  48. package/dist/core/devGatedFeatures.d.ts.map +1 -1
  49. package/dist/core/devGatedFeatures.js +15 -0
  50. package/dist/core/devGatedFeatures.js.map +1 -1
  51. package/dist/core/ownershipApplierWiring.d.ts +2 -0
  52. package/dist/core/ownershipApplierWiring.d.ts.map +1 -1
  53. package/dist/core/ownershipApplierWiring.js +1 -0
  54. package/dist/core/ownershipApplierWiring.js.map +1 -1
  55. package/dist/core/types.d.ts +29 -0
  56. package/dist/core/types.d.ts.map +1 -1
  57. package/dist/core/types.js.map +1 -1
  58. package/dist/data/standards-guard-index.json +1 -1
  59. package/dist/data/standards-guard-index.meta.json +2 -2
  60. package/dist/data/standards-registry.meta.json +1 -1
  61. package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
  62. package/dist/messaging/TelegramAdapter.js +4 -0
  63. package/dist/messaging/TelegramAdapter.js.map +1 -1
  64. package/dist/scaffold/templates.d.ts.map +1 -1
  65. package/dist/scaffold/templates.js +4 -1
  66. package/dist/scaffold/templates.js.map +1 -1
  67. package/dist/server/AgentServer.d.ts +7 -0
  68. package/dist/server/AgentServer.d.ts.map +1 -1
  69. package/dist/server/AgentServer.js +361 -0
  70. package/dist/server/AgentServer.js.map +1 -1
  71. package/dist/server/CapabilityIndex.d.ts.map +1 -1
  72. package/dist/server/CapabilityIndex.js +21 -1
  73. package/dist/server/CapabilityIndex.js.map +1 -1
  74. package/dist/server/routes.d.ts +6 -0
  75. package/dist/server/routes.d.ts.map +1 -1
  76. package/dist/server/routes.js +565 -41
  77. package/dist/server/routes.js.map +1 -1
  78. package/dist/testing/selfActionRegistry.d.ts.map +1 -1
  79. package/dist/testing/selfActionRegistry.js +38 -0
  80. package/dist/testing/selfActionRegistry.js.map +1 -1
  81. package/package.json +1 -1
  82. package/src/data/builtin-manifest.json +65 -65
  83. package/src/data/standards-guard-index.json +1 -1
  84. package/src/data/standards-guard-index.meta.json +2 -2
  85. package/src/data/standards-registry.meta.json +1 -1
  86. package/src/scaffold/templates.ts +4 -1
  87. package/upgrades/1.3.1224.md +79 -0
  88. package/upgrades/1.3.1225.md +59 -0
  89. package/upgrades/eli16/w32-repository-integrity-closure.md +7 -0
  90. package/upgrades/eli16/window-32-admission-contract.md +16 -0
  91. package/upgrades/side-effects/ownership-applier-placement-paging.md +231 -0
  92. package/upgrades/side-effects/w32-cadence-executor.md +91 -0
  93. package/upgrades/side-effects/w32-repository-integrity-closure.md +84 -0
  94. package/upgrades/side-effects/window-32-admission-contract.md +88 -0
  95. package/upgrades/side-effects/window-32-expiry-freeze.md +96 -0
@@ -104,7 +104,7 @@ Write this content:
104
104
  when set, the stop-hook RUNS it on a met:true verdict and only allows the exit if it ALSO
105
105
  passes (fail/timeout → keep working). This sentinel is the PostUpdateMigrator marker that
106
106
  re-deploys this SKILL.md to existing agents. Spec: autonomous-completion-real-checks.md -->
107
- <!-- SCOPE_ACCRETION — scope-accretion completion discipline: register the run server-side
107
+ <!-- W32_PREPARING_LIVENESS — scope-accretion completion discipline: register the run server-side
108
108
  (POST /autonomous/register) and record the returned run_id in the frontmatter; the server
109
109
  then holds completion while deliverables THIS run creates sit unbuilt, uncorroborated, and
110
110
  unratified. This sentinel is the PostUpdateMigrator marker that re-deploys this SKILL.md to
@@ -112,7 +112,8 @@ Write this content:
112
112
 
113
113
  ```markdown
114
114
  ---
115
- active: true
115
+ active: {false when POST /autonomous/register returns preparationRequired:true; true otherwise}
116
+ status: {the initialStatus returned by POST /autonomous/register; active when absent}
116
117
  iteration: 1
117
118
  session_id: {VALUE OF $CLAUDE_CODE_SESSION_ID — get via: echo $CLAUDE_CODE_SESSION_ID}
118
119
  goal: "YOUR GOAL"
@@ -193,7 +194,11 @@ jq -nc --arg t "TOPIC_ID" --arg c "YOUR completion_condition text" --arg w "$(pw
193
194
  --data-binary @- "http://localhost:${PORT}/autonomous/register"
194
195
  ```
195
196
 
196
- Write the returned `runId` into the state file's `run_id:` frontmatter field. If the mission is
197
+ Write the returned `runId` into the state file's `run_id:` frontmatter field. When the response says
198
+ `preparationRequired:true`, write `active:false` and `status:preparing`; the server's five-predicate
199
+ liveness authority is the only path that may later promote the canonical file to `active:true`.
200
+ When that field is absent/false (authority dark, observe-only/dry-run, or non-Echo), preserve the legacy `active:true` start; shadow observation must not alter compatibility state.
201
+ If the mission is
197
202
  GENUINELY draft-only (the operator asked for drafts, not builds), list those exact repo-relative
198
203
  paths in `declaredDeliverables` — that list is operator-visible at setup and immutable mid-run.
199
204
  If the server is unreachable, leave `run_id` empty and continue — the gate degrades honestly.
@@ -57,6 +57,8 @@ for _arg in "$@"; do [[ "$_arg" == "--codex" ]] && IS_CODEX=1; done
57
57
  # pass|fail|configured:false observation to the existing decision-quality annotator.
58
58
  # hook-capability: STATE_PARSE_LOUD — a selected state file with missing/malformed
59
59
  # frontmatter is a visible hook failure, distinct from the clean no-state exit.
60
+ # hook-capability: PREPARATION_CARRIER — a truthful inactive autonomous record in
61
+ # preparing/recovering state falls through to the bounded continuation authority.
60
62
  # emit — human-facing approve/status text. In codex mode the Stop hook's STDOUT must be
61
63
  # ONLY valid decision-JSON (the `{"decision":"block",...}` case far below) or empty:
62
64
  # codex rejects ANY other stdout as "invalid stop hook JSON output" and reports the stop
@@ -122,6 +124,26 @@ LEGACY_STATE=".instar/autonomous-state.local.md"
122
124
  MULTI_DIR=".instar/autonomous"
123
125
  LIVENESS_SECS="${INSTAR_AUTONOMOUS_LIVENESS_SECS:-120}"
124
126
 
127
+ # The sole shell adapter for bounded task continuation. The TypeScript store and
128
+ # authenticated decision route remain the mutation/decision authority.
129
+ continuation_decision() {
130
+ [[ "$IS_CODEX" == "1" ]] || return 0
131
+ [[ "$CODEX_TASK_CONTINUATION_ENABLED" == "1" ]] || return 0
132
+ [[ -n "$MY_TOPIC" ]] || return 0
133
+ local port auth agent_id decision reason
134
+ port=$(python3 -c "import json;print(json.load(open('.instar/config.json')).get('port',4040))" 2>/dev/null || echo 4040)
135
+ auth=$(python3 -c "import json;print(json.load(open('.instar/config.json')).get('authToken',''))" 2>/dev/null || echo "")
136
+ agent_id=$(python3 -c "import json;c=json.load(open('.instar/config.json'));print(c.get('projectName') or c.get('agentName') or 'local-stop-hook')" 2>/dev/null | tr -d '\r\n' || echo "local-stop-hook")
137
+ [[ -n "$agent_id" ]] || agent_id="local-stop-hook"
138
+ decision=$(jq -nc --arg topicId "$MY_TOPIC" --arg sessionId "$HOOK_SESSION" '{topicId:$topicId,sessionId:$sessionId}' \
139
+ | curl -sS -m 5 -H "Authorization: Bearer $auth" -H "X-Instar-AgentId: $agent_id" -H 'Content-Type: application/json' \
140
+ --data-binary @- "http://127.0.0.1:${port}/continuation/decide" 2>/dev/null || echo "")
141
+ if [[ "$(printf '%s' "$decision" | jq -r '.decision // ""' 2>/dev/null)" == "continue" ]]; then
142
+ reason=$(printf '%s' "$decision" | jq -r '.reasonText // "Continue the explicit open task list."' 2>/dev/null)
143
+ jq -nc --arg reason "$reason" '{decision:"block",reason:$reason}'
144
+ fi
145
+ }
146
+
125
147
  # ── Inputs from the hook ──────────────────────────────────────────────
126
148
  HOOK_SESSION=$(printf '%s' "$HOOK_INPUT" | jq -r '.session_id // ""' 2>/dev/null || echo "")
127
149
  TRANSCRIPT_PATH=$(printf '%s' "$HOOK_INPUT" | jq -r '.transcript_path // ""' 2>/dev/null || echo "")
@@ -201,27 +223,11 @@ else
201
223
  # No autonomous job for this session. Ordinary Codex interactive work may
202
224
  # still own an explicit bounded continuation ledger. The server is the sole
203
225
  # mutation/decision authority; empty/invalid state returns allow.
204
- if [[ "$IS_CODEX" == "1" ]] && [[ "$CODEX_TASK_CONTINUATION_ENABLED" == "1" ]] && [[ -n "$MY_TOPIC" ]]; then
205
- _PORT=$(python3 -c "import json;print(json.load(open('.instar/config.json')).get('port',4040))" 2>/dev/null || echo 4040)
206
- _AUTH=$(python3 -c "import json;print(json.load(open('.instar/config.json')).get('authToken',''))" 2>/dev/null || echo "")
207
- _DECISION=$(jq -nc --arg topicId "$MY_TOPIC" --arg sessionId "$HOOK_SESSION" '{topicId:$topicId,sessionId:$sessionId}' \
208
- | curl -sS -m 5 -H "Authorization: Bearer $_AUTH" -H 'Content-Type: application/json' \
209
- --data-binary @- "http://127.0.0.1:${_PORT}/continuation/decide" 2>/dev/null || echo "")
210
- if [[ "$(printf '%s' "$_DECISION" | jq -r '.decision // ""' 2>/dev/null)" == "continue" ]]; then
211
- _REASON=$(printf '%s' "$_DECISION" | jq -r '.reasonText // "Continue the explicit open task list."' 2>/dev/null)
212
- jq -nc --arg reason "$_REASON" '{decision:"block",reason:$reason}'
213
- fi
214
- fi
226
+ continuation_decision
215
227
  # No autonomous job or open continuation ledger — allow exit.
216
228
  exit 0
217
229
  fi
218
230
 
219
- # An autonomous state owns this turn. Its own Codex gate remains authoritative;
220
- # enabling ordinary task continuation must never implicitly enable autonomous jobs.
221
- if [[ "$IS_CODEX" == "1" ]] && [[ "$CODEX_LOOP_ENABLED" != "1" ]]; then
222
- exit 0
223
- fi
224
-
225
231
  # ── Read the selected state file ──────────────────────────────────────
226
232
  # STATE_FILE was selected only after an existence check. From this point on,
227
233
  # "no parseable state" is corruption, NOT the same outcome as "no autonomous
@@ -274,6 +280,18 @@ if [[ "$ACTIVE" != "true" ]] && [[ "$ACTIVE" != "false" ]]; then
274
280
  state_parse_failure
275
281
  fi
276
282
  if [[ "$ACTIVE" != "true" ]]; then
283
+ # Inactive autonomous records are observational, never continuation
284
+ # authority. Always fall through to the bounded ledger: no ledger (or a
285
+ # disabled/error decision) allows the stop, while a truthful preparation
286
+ # carrier can continue even during the tiny cross-file marker write window.
287
+ continuation_decision
288
+ exit 0
289
+ fi
290
+
291
+ # Only an ACTIVE autonomous record is governed by the autonomous Codex-loop
292
+ # gate. An inactive record is observational and has already fallen through to
293
+ # the independently gated continuation authority above.
294
+ if [[ "$IS_CODEX" == "1" ]] && [[ "$CODEX_LOOP_ENABLED" != "1" ]]; then
277
295
  exit 0
278
296
  fi
279
297
 
@@ -193,7 +193,7 @@ if [[ -n "$VERIFICATION_CWD" ]]; then
193
193
  $VERIFICATION_FIELDS"
194
194
  fi
195
195
 
196
- # ── SCOPE_ACCRETION — server-side run registration (spec: autonomous-scope-
196
+ # ── W32_PREPARING_LIVENESS — server-side run registration (spec: autonomous-scope-
197
197
  # accretion-completion.md R30). The SERVER mints the runId, snapshots the
198
198
  # scopeAccretion config + the sweep base roots with their start-SHAs, and clamps
199
199
  # endAt — so mid-run edits to config/state-file change nothing the completion
@@ -202,6 +202,27 @@ fi
202
202
  # unreachable server leaves run_id empty (the gate degrades honestly server-side;
203
203
  # the run still starts — registration is a discipline layer, not a start gate).
204
204
  RUN_ID=""
205
+ # Resolve enforcement from local config before contacting the server.
206
+ # Registration is a response contract, not the source of the rollout decision:
207
+ # an enforcing Echo run stays preparing if the server is temporarily unreachable,
208
+ # while observe-only/dark/legacy installs retain byte-compatible active behavior.
209
+ LIVENESS_INITIAL=$(python3 -c "import json
210
+ try:
211
+ c=json.load(open('.instar/config.json'))
212
+ raw=((c.get('monitoring') or {}).get('windowRunLiveness') or {})
213
+ explicit=raw.get('enabled',None)
214
+ enabled=explicit if isinstance(explicit,bool) else bool(c.get('developmentAgent',False))
215
+ enforcing=c.get('projectName')=='echo' and enabled and raw.get('dryRun',True) is False
216
+ print('preparing' if enforcing else 'active')
217
+ except Exception:
218
+ print('active')" 2>/dev/null || echo active)
219
+ if [[ "$LIVENESS_INITIAL" == "active" ]]; then
220
+ RUN_ACTIVE="true"
221
+ RUN_STATUS="active"
222
+ else
223
+ RUN_ACTIVE="false"
224
+ RUN_STATUS="preparing"
225
+ fi
205
226
  if [[ -n "$REPORT_TOPIC" ]]; then
206
227
  REG_PORT=$(python3 -c "import json;print(json.load(open('.instar/config.json')).get('port',4040))" 2>/dev/null || echo 4040)
207
228
  REG_AUTH=$(python3 -c "import json;print(json.load(open('.instar/config.json')).get('authToken',''))" 2>/dev/null || echo "")
@@ -222,6 +243,13 @@ print(json.dumps([p.strip() for p in sys.stdin.read().split(',') if p.strip()]))
222
243
  RUN_ID=$(printf '%s' "$REG_RESP" | python3 -c "import sys,json
223
244
  try: print(json.load(sys.stdin).get('runId',''))
224
245
  except Exception: print('')" 2>/dev/null || echo "")
246
+ REG_INITIAL_STATUS=$(printf '%s' "$REG_RESP" | python3 -c "import sys,json
247
+ try: print(json.load(sys.stdin).get('initialStatus',''))
248
+ except Exception: print('')" 2>/dev/null || echo "")
249
+ if [[ "$REG_INITIAL_STATUS" == "preparing" ]]; then
250
+ RUN_ACTIVE="false"
251
+ RUN_STATUS="preparing"
252
+ fi
225
253
  if [[ -n "$RUN_ID" ]]; then
226
254
  echo " Scope-accretion: run registered server-side (runId $RUN_ID)"
227
255
  else
@@ -235,7 +263,8 @@ fi
235
263
 
236
264
  cat > "$STATE_PATH" <<EOF
237
265
  ---
238
- active: true
266
+ active: $RUN_ACTIVE
267
+ status: $RUN_STATUS
239
268
  iteration: 1
240
269
  session_id: ${CLAUDE_CODE_SESSION_ID:-}
241
270
  goal: "$GOAL"
@@ -1 +1 @@
1
- {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"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"}
@@ -21281,7 +21281,15 @@ export async function startServer(options) {
21281
21281
  try {
21282
21282
  const r = ownershipApplier.tick();
21283
21283
  if (r.materialized)
21284
- console.log(pc.dim(` [OwnershipApplier] materialized ${r.materialized}/${r.examined} topic(s) from replicated placements`));
21284
+ console.log(pc.dim(` [OwnershipApplier] materialized ${r.materialized}/${r.examined} topic(s) from replicated placements (${r.pagesScanned ?? 1} page(s))`));
21285
+ // A DEGRADED scan is the shape of the bug this paging fixed: the applier
21286
+ // silently seeing only part of the journal, so a topic is never materialized
21287
+ // and its drain refuses `not-owner` forever. Never let that be quiet again —
21288
+ // these two states are logged even on a tick that materialized nothing.
21289
+ if (r.pageCeilingHit)
21290
+ console.log(pc.dim(` [OwnershipApplier] page ceiling hit — the placement scan was INCOMPLETE this tick; some topics may not be materialized`));
21291
+ if (r.pagingUnavailable)
21292
+ console.log(pc.dim(` [OwnershipApplier] paging unavailable — read a SINGLE placement page; low-epoch topics may not be materialized`));
21285
21293
  }
21286
21294
  catch (err) {
21287
21295
  console.error('[OwnershipApplier] tick failed:', err instanceof Error ? err.message : String(err));