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.
- package/.claude/skills/autonomous/SKILL.md +8 -3
- package/.claude/skills/autonomous/hooks/autonomous-stop-hook.sh +35 -17
- package/.claude/skills/autonomous/scripts/setup-autonomous.sh +31 -2
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +9 -1
- package/dist/commands/server.js.map +1 -1
- package/dist/config/ConfigDefaults.d.ts.map +1 -1
- package/dist/config/ConfigDefaults.js +28 -0
- package/dist/config/ConfigDefaults.js.map +1 -1
- package/dist/core/AutonomousRunStore.d.ts +7 -1
- package/dist/core/AutonomousRunStore.d.ts.map +1 -1
- package/dist/core/AutonomousRunStore.js +24 -4
- package/dist/core/AutonomousRunStore.js.map +1 -1
- package/dist/core/AutonomousSessions.d.ts +9 -0
- package/dist/core/AutonomousSessions.d.ts.map +1 -1
- package/dist/core/AutonomousSessions.js +58 -0
- package/dist/core/AutonomousSessions.js.map +1 -1
- package/dist/core/CodexTaskContinuationStore.d.ts +24 -1
- package/dist/core/CodexTaskContinuationStore.d.ts.map +1 -1
- package/dist/core/CodexTaskContinuationStore.js +77 -3
- package/dist/core/CodexTaskContinuationStore.js.map +1 -1
- package/dist/core/IdentityRenderer.d.ts.map +1 -1
- package/dist/core/IdentityRenderer.js +2 -0
- package/dist/core/IdentityRenderer.js.map +1 -1
- package/dist/core/OwnershipApplier.d.ts +45 -7
- package/dist/core/OwnershipApplier.d.ts.map +1 -1
- package/dist/core/OwnershipApplier.js +112 -25
- package/dist/core/OwnershipApplier.js.map +1 -1
- package/dist/core/PostUpdateMigrator.d.ts +4 -2
- package/dist/core/PostUpdateMigrator.d.ts.map +1 -1
- package/dist/core/PostUpdateMigrator.js +100 -11
- package/dist/core/PostUpdateMigrator.js.map +1 -1
- package/dist/core/WindowLifecycleObligationLedger.d.ts +36 -5
- package/dist/core/WindowLifecycleObligationLedger.d.ts.map +1 -1
- package/dist/core/WindowLifecycleObligationLedger.js +138 -19
- package/dist/core/WindowLifecycleObligationLedger.js.map +1 -1
- package/dist/core/WindowRunCadenceExecutor.d.ts +172 -0
- package/dist/core/WindowRunCadenceExecutor.d.ts.map +1 -0
- package/dist/core/WindowRunCadenceExecutor.js +461 -0
- package/dist/core/WindowRunCadenceExecutor.js.map +1 -0
- package/dist/core/WindowRunLivenessAuthority.d.ts +231 -0
- package/dist/core/WindowRunLivenessAuthority.d.ts.map +1 -0
- package/dist/core/WindowRunLivenessAuthority.js +565 -0
- package/dist/core/WindowRunLivenessAuthority.js.map +1 -0
- package/dist/core/WriteDomainRegistry.d.ts.map +1 -1
- package/dist/core/WriteDomainRegistry.js +8 -0
- package/dist/core/WriteDomainRegistry.js.map +1 -1
- package/dist/core/devGatedFeatures.d.ts.map +1 -1
- package/dist/core/devGatedFeatures.js +15 -0
- package/dist/core/devGatedFeatures.js.map +1 -1
- package/dist/core/ownershipApplierWiring.d.ts +2 -0
- package/dist/core/ownershipApplierWiring.d.ts.map +1 -1
- package/dist/core/ownershipApplierWiring.js +1 -0
- package/dist/core/ownershipApplierWiring.js.map +1 -1
- package/dist/core/types.d.ts +29 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/data/standards-guard-index.json +1 -1
- package/dist/data/standards-guard-index.meta.json +2 -2
- package/dist/data/standards-registry.meta.json +1 -1
- package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
- package/dist/messaging/TelegramAdapter.js +4 -0
- package/dist/messaging/TelegramAdapter.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +4 -1
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/server/AgentServer.d.ts +7 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +361 -0
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/CapabilityIndex.d.ts.map +1 -1
- package/dist/server/CapabilityIndex.js +21 -1
- package/dist/server/CapabilityIndex.js.map +1 -1
- package/dist/server/routes.d.ts +6 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +565 -41
- package/dist/server/routes.js.map +1 -1
- package/dist/testing/selfActionRegistry.d.ts.map +1 -1
- package/dist/testing/selfActionRegistry.js +38 -0
- package/dist/testing/selfActionRegistry.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +65 -65
- package/src/data/standards-guard-index.json +1 -1
- package/src/data/standards-guard-index.meta.json +2 -2
- package/src/data/standards-registry.meta.json +1 -1
- package/src/scaffold/templates.ts +4 -1
- package/upgrades/1.3.1224.md +79 -0
- package/upgrades/1.3.1225.md +59 -0
- package/upgrades/eli16/w32-repository-integrity-closure.md +7 -0
- package/upgrades/eli16/window-32-admission-contract.md +16 -0
- package/upgrades/side-effects/ownership-applier-placement-paging.md +231 -0
- package/upgrades/side-effects/w32-cadence-executor.md +91 -0
- package/upgrades/side-effects/w32-repository-integrity-closure.md +84 -0
- package/upgrades/side-effects/window-32-admission-contract.md +88 -0
- 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
|
-
<!--
|
|
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.
|
|
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
|
-
|
|
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
|
-
# ──
|
|
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:
|
|
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":"AAAA;;;;;;;;GAQG;AA2FH,OAAO,EAAE,cAAc,EAAwD,MAAM,2BAA2B,CAAC;AAUjH,OAAO,EAAE,eAAe,EAAiC,MAAM,iCAAiC,CAAC;AA4BjG,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAGvD,OAAO,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAmI7D,OAAO,KAAK,EAAW,oBAAoB,EAAe,YAAY,EAAE,MAAM,kBAAkB,CAAC;AACjG,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAiFtD;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,yBAAyB,CACvC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAC1C,OAAO,CAUT;AA0ID,UAAU,YAAY;IACpB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb;2DACuD;IACvD,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAoDD,+EAA+E;AAC/E,wBAAgB,qCAAqC,CACnD,SAAS,EAAE,IAAI,CAAC,OAAO,2BAA2B,EAAE,cAAc,EAAE,QAAQ,CAAC,GAAG,IAAI,EACpF,OAAO,EAAE,MAAM,GACd,IAAI,CAEN;AAsrDD;;;;;;;;GAQG;AACH,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,YAAY,EACpB,YAAY,EAAE,oBAAoB,GAAG,IAAI,GACxC;IACD,YAAY,EAAE,oBAAoB,GAAG,IAAI,CAAC;IAC1C,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;CAClB,CAqBA;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,eAAe,EACzB,cAAc,EAAE,cAAc,EAC9B,YAAY,CAAC,EAAE,YAAY,EAC3B,WAAW,CAAC,EAAE,WAAW,EACzB,WAAW,CAAC,EAAE,WAAW,EACzB,iBAAiB,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,EAGvE,UAAU,CAAC,EAAE,MAAM,OAAO,8BAA8B,EAAE,WAAW,GAAG,IAAI,EAK5E,qBAAqB,CAAC,EAAE,MAAM,OAAO,gCAAgC,EAAE,kBAAkB,GAAG,IAAI,EAKhG,mBAAmB,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,GAAG,SAAS,EAQrD,oBAAoB,CAAC,EAAE,MAAM;IAC3B,YAAY,EAAE,OAAO,kBAAkB,EAAE,oBAAoB,GAAG,IAAI,CAAC;IACrE,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,GAAG,UAAU,GAAG,SAAS,CAAC;IAC3C,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,IAAI,GACP,IAAI,CA8wBN;AAgmBD,wBAAsB,WAAW,CAAC,OAAO,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../../src/commands/server.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/server.js
CHANGED
|
@@ -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));
|