elanous 0.2.18 → 0.2.20
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/apps/pwa/out/404/index.html +1 -1
- package/apps/pwa/out/404.html +1 -1
- package/apps/pwa/out/_next/static/chunks/{1307-30dff22c9e1f3073.js → 1307-77fad80cf54477c6.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/1612-f60c0c93ec773f81.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2116-6429c188eb846ab8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/224-e7be8f762fe74986.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2489-ff55a35b202c0f94.js +1 -0
- package/apps/pwa/out/_next/static/chunks/2549-89c518a4c8ed4d00.js +1 -0
- package/apps/pwa/out/_next/static/chunks/3857-995ea9f5ef33d71e.js +1 -0
- package/apps/pwa/out/_next/static/chunks/4144-fad095b48a1862ee.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5755-ea7ed88eb956f47b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/5977-94ed6f78e9814b2b.js +1 -0
- package/apps/pwa/out/_next/static/chunks/7748-6e51bfe927019f5c.js +25 -0
- package/apps/pwa/out/_next/static/chunks/8401-35e94e9091f5eb8d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/9247-c1753a059e7bac08.js +1 -0
- package/apps/pwa/out/_next/static/chunks/a9f2b54d-33c0689b70ed8cf3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/approvals/{page-d92f7ee3994e84c7.js → page-c855c24de7db74fe.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/autopilot/{page-4733c967b56a4277.js → page-85b316bb4235980b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/board/{page-d22fd849cc22f104.js → page-9b2b26a33cb2cd42.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/botlab/{page-bb742f995c6769e7.js → page-c9955fde67b1bcb5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/bots/{page-02b073a2ac793b83.js → page-7a852956c74015a3.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-c5a5c621be0e04ae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/chat/{page-8a9b3594bc23289b.js → page-4ba4abe096b6c2a8.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-575d4a8b4f7becb2.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/control/{page-308111abadf35670.js → page-f5d56ff5f45ad164.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-2260e9eef0357421.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/design-check/{page-5d97b2901e0d1ea6.js → page-7c058069c5e7fa63.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-dc5da0b8a2edb8a4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/exec/{page-8c3d8e63ae2e1c98.js → page-466bf0ee16ad1432.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/field/{page-9b72a07d424701c6.js → page-a23bc71713bcc08f.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-ed4a6f799f005d09.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/intake/{page-a572f58cd3ca5864.js → page-9cd565005b93aca6.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-55f0f40c6db95f15.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/live/{page-be5ea965a07fbc41.js → page-474cb5888ea0e8f3.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-35bfec2e631d3eae.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/market/{page-fa244bd146a00ae8.js → page-9ca21f9ad3208a61.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/missions/[id]/{page-44d56d6391965a6a.js → page-f9ccb1b1adbea14d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/morning/{page-83a700d4c754d802.js → page-ec102c9b8b691e37.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/{not-found-7b3170f374f77b9d.js → not-found-a9c2cfa8dda922a5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-6da35144878feb6d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-f6055495e9ed7ea8.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-25204694fa9984a5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-a60e035f151d84d3.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-189c587f36874538.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/page-c56634bde705a65d.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/reflection/{page-1467047104141297.js → page-db03ae3589a81c9e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-4a6463b97f0ad94f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/sessions/{page-102310930791197a.js → page-75bffecc9aa1004e.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-a8d2fe0c669e0de4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/settings/{page-6ed0b73bae8351d8.js → page-31d5b875760bb62d.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-c26fa10aac6c21c4.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/setup/{page-43336055451f6e37.js → page-68793c6e10331d66.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/share/{page-3cc47dca0922ab9a.js → page-46d5201d2207a511.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/showroom/{page-a77ee355a2304ff0.js → page-d81c07a7b4f618ae.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/tasks/{page-b17cd46cf0e9b8cf.js → page-be1c4e8697f22360.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-cf0a4b4abead71ea.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/today/page-a4717e2c4bf7a28f.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/trace/{page-7bf54c9bb9274af8.js → page-0fd895fab9b62c1b.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-8b6c1454a8e8f306.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-c6e4364d9de8f717.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-0acc8e198f7b0dfb.js +1 -0
- package/apps/pwa/out/_next/static/chunks/app/workspace/{page-134da468538baf48.js → page-34882c84f84021c5.js} +1 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-0506a1e0e4bdb2f5.js +1 -0
- package/apps/pwa/out/_next/static/chunks/{webpack-c2782b330447ffb6.js → webpack-c260571513bf43c2.js} +1 -1
- package/apps/pwa/out/_next/static/css/{e99e3cff94ced78a.css → 599369d853c61df7.css} +1 -1
- package/apps/pwa/out/_next/static/css/c23d959d3ee15e57.css +1 -0
- package/apps/pwa/out/_next/static/css/d3427996da11e480.css +1 -0
- package/apps/pwa/out/approvals/index.html +1 -1
- package/apps/pwa/out/approvals/index.txt +14 -14
- package/apps/pwa/out/autopilot/index.html +1 -1
- package/apps/pwa/out/autopilot/index.txt +14 -14
- package/apps/pwa/out/board/index.html +1 -1
- package/apps/pwa/out/board/index.txt +14 -14
- package/apps/pwa/out/botlab/index.html +1 -1
- package/apps/pwa/out/botlab/index.txt +14 -14
- package/apps/pwa/out/bots/index.html +1 -1
- package/apps/pwa/out/bots/index.txt +14 -14
- package/apps/pwa/out/ceo/index.html +1 -1
- package/apps/pwa/out/ceo/index.txt +14 -14
- package/apps/pwa/out/chat/index.html +1 -1
- package/apps/pwa/out/chat/index.txt +14 -14
- package/apps/pwa/out/consult/index.html +1 -1
- package/apps/pwa/out/consult/index.txt +14 -14
- package/apps/pwa/out/control/index.html +1 -1
- package/apps/pwa/out/control/index.txt +14 -14
- package/apps/pwa/out/decisions/index.html +1 -1
- package/apps/pwa/out/decisions/index.txt +14 -14
- package/apps/pwa/out/design-check/index.html +1 -1
- package/apps/pwa/out/design-check/index.txt +14 -14
- package/apps/pwa/out/editor/index.html +1 -1
- package/apps/pwa/out/editor/index.txt +16 -15
- package/apps/pwa/out/exec/index.html +1 -1
- package/apps/pwa/out/exec/index.txt +14 -14
- package/apps/pwa/out/field/index.html +1 -1
- package/apps/pwa/out/field/index.txt +14 -14
- package/apps/pwa/out/healthz +1 -1
- package/apps/pwa/out/index.html +1 -1
- package/apps/pwa/out/index.txt +14 -14
- package/apps/pwa/out/inside/index.html +1 -1
- package/apps/pwa/out/inside/index.txt +16 -15
- package/apps/pwa/out/intake/index.html +1 -1
- package/apps/pwa/out/intake/index.txt +14 -14
- package/apps/pwa/out/live/index.html +1 -1
- package/apps/pwa/out/live/index.txt +14 -14
- package/apps/pwa/out/loops/index.html +1 -1
- package/apps/pwa/out/loops/index.txt +24 -23
- package/apps/pwa/out/market/index.html +1 -1
- package/apps/pwa/out/market/index.txt +14 -14
- package/apps/pwa/out/missions/placeholder/index.html +1 -1
- package/apps/pwa/out/missions/placeholder/index.txt +14 -14
- package/apps/pwa/out/morning/index.html +1 -1
- package/apps/pwa/out/morning/index.txt +14 -14
- package/apps/pwa/out/observatory/index.html +1 -1
- package/apps/pwa/out/observatory/index.txt +14 -14
- package/apps/pwa/out/ops/checklist/index.html +1 -1
- package/apps/pwa/out/ops/checklist/index.txt +14 -14
- package/apps/pwa/out/ops/release/index.html +1 -1
- package/apps/pwa/out/ops/release/index.txt +14 -14
- package/apps/pwa/out/ops/seats/index.html +1 -1
- package/apps/pwa/out/ops/seats/index.txt +14 -14
- package/apps/pwa/out/outputs/index.html +1 -1
- package/apps/pwa/out/outputs/index.txt +14 -14
- package/apps/pwa/out/reflection/index.html +1 -1
- package/apps/pwa/out/reflection/index.txt +15 -15
- package/apps/pwa/out/scheduler/index.html +1 -1
- package/apps/pwa/out/scheduler/index.txt +14 -14
- package/apps/pwa/out/sessions/index.html +1 -1
- package/apps/pwa/out/sessions/index.txt +14 -14
- package/apps/pwa/out/settings/devices/index.html +1 -1
- package/apps/pwa/out/settings/devices/index.txt +14 -14
- package/apps/pwa/out/settings/index.html +1 -1
- package/apps/pwa/out/settings/index.txt +14 -14
- package/apps/pwa/out/setup/done/index.html +1 -1
- package/apps/pwa/out/setup/done/index.txt +14 -14
- package/apps/pwa/out/setup/index.html +1 -1
- package/apps/pwa/out/setup/index.txt +14 -14
- package/apps/pwa/out/share/index.html +1 -1
- package/apps/pwa/out/share/index.txt +14 -14
- package/apps/pwa/out/showroom/index.html +1 -1
- package/apps/pwa/out/showroom/index.txt +14 -14
- package/apps/pwa/out/tasks/index.html +1 -1
- package/apps/pwa/out/tasks/index.txt +14 -14
- package/apps/pwa/out/term/index.html +1 -1
- package/apps/pwa/out/term/index.txt +14 -14
- package/apps/pwa/out/today/index.html +1 -1
- package/apps/pwa/out/today/index.txt +14 -14
- package/apps/pwa/out/trace/index.html +1 -1
- package/apps/pwa/out/trace/index.txt +14 -14
- package/apps/pwa/out/vault/index.html +1 -1
- package/apps/pwa/out/vault/index.txt +14 -14
- package/apps/pwa/out/workflows/chat-ui/index.html +1 -1
- package/apps/pwa/out/workflows/chat-ui/index.txt +14 -14
- package/apps/pwa/out/workflows/index.html +1 -1
- package/apps/pwa/out/workflows/index.txt +14 -14
- package/apps/pwa/out/workspace/index.html +1 -1
- package/apps/pwa/out/workspace/index.txt +14 -14
- package/apps/pwa/out/worktrees/index.html +1 -1
- package/apps/pwa/out/worktrees/index.txt +14 -14
- package/graphs/demo/editor-recipes.yaml +22 -0
- package/graphs/ops/guardian.yaml +26 -0
- package/graphs/ops/recipes.yaml +3 -0
- package/graphs/retro/daily.yaml +25 -0
- package/graphs/retro/recipes.yaml +24 -0
- package/package.json +1 -1
- package/scripts/ask-marker-check.ts +3 -1
- package/scripts/coord-channel-watch.sh +2 -2
- package/scripts/discord-seat-probe.ts +3 -1
- package/scripts/land-global-checks.ts +89 -0
- package/scripts/lib/pch-regress-map.ts +24 -0
- package/scripts/morning-report.ts +18 -4
- package/scripts/pch-regress.ts +88 -0
- package/scripts/release-loop/gate-diff.ts +18 -0
- package/scripts/release-loop/gate-node.ts +628 -65
- package/scripts/release-loop/gate-partial.ts +106 -0
- package/scripts/release-loop/gate-timing.ts +229 -0
- package/scripts/release-loop/preflight.ts +6 -4
- package/scripts/release-loop/publish-window.ts +141 -0
- package/scripts/release-loop/release-docs.ts +1 -4
- package/scripts/release-loop/release-universe.ts +38 -0
- package/scripts/release-loop/resume-release.ts +67 -5
- package/scripts/release-loop/shard-plan.ts +65 -0
- package/scripts/release-loop/unattended-release.ts +12 -2
- package/scripts/release-story/draft.ts +5 -1
- package/scripts/retro/shadow-compare.ts +71 -0
- package/scripts/rhythm/daily.ts +6 -1
- package/scripts/video/scene-table.ts +159 -0
- package/src/acp/core-turn-bridge.ts +39 -2
- package/src/agent-mission/driver.ts +34 -6
- package/src/autopilot/build/llm-conflict-merge.ts +132 -7
- package/src/autopilot/build/merge-intent.ts +135 -7
- package/src/away/presence.ts +40 -0
- package/src/away/release-watch.ts +272 -0
- package/src/chat/index.ts +2 -1
- package/src/chat/short-question.ts +3 -40
- package/src/cli/away-cli.ts +68 -0
- package/src/cli/config-drift.ts +513 -0
- package/src/cli/guardian-cli.ts +49 -0
- package/src/cli/intake-cli.ts +13 -7
- package/src/cli/log-event-names.ts +5 -0
- package/src/cli/pod-cli.ts +5 -1
- package/src/cli/pr-cli.ts +20 -0
- package/src/cli/pty-drive-cli.ts +14 -3
- package/src/cli/release-cli.ts +52 -12
- package/src/cli/retro-cli.ts +78 -0
- package/src/cli/setup-cli.ts +31 -1
- package/src/cli/tasks-cli.ts +193 -14
- package/src/context-bus/context-now-public.ts +1 -1
- package/src/context-bus/context-now-surfaces.ts +16 -6
- package/src/context-bus/context-now.ts +97 -3
- package/src/core-turn/short-question.ts +100 -0
- package/src/dashboard/dashboard-status-lines.ts +24 -4
- package/src/dashboard/index.ts +50 -5
- package/src/dashboard/input/slash-executor.ts +6 -2
- package/src/dashboard/slash-runtime/dashboard-handlers.ts +68 -40
- package/src/dashboard/slash-runtime/decide-slash.ts +60 -0
- package/src/dashboard/slash-runtime/help-from-registry.ts +62 -23
- package/src/dashboard/slash-runtime/help-groups.ts +44 -0
- package/src/dashboard/slash-runtime/model-choices.ts +125 -0
- package/src/domains/guardian-tick.ts +138 -0
- package/src/domains/outbound-alert.ts +44 -13
- package/src/domains/outbound-log-probe.ts +6 -1
- package/src/domains/schedule-registry.ts +23 -0
- package/src/domains/telegram-kind-route.ts +39 -0
- package/src/domains/watch-default-scheduler.ts +95 -0
- package/src/esc-abort-gate.ts +44 -0
- package/src/graph-runner/graph-run-api.ts +205 -0
- package/src/graph-runner/runner.ts +36 -6
- package/src/harness/harness-cli-command.ts +420 -51
- package/src/harness/harness-queue.ts +315 -25
- package/src/harness/harness-salvage-cli.ts +140 -0
- package/src/harness/harness-worktree-add.ts +68 -0
- package/src/harness/ledger-write-guard.ts +6 -16
- package/src/hq/fence-outcomes.ts +63 -0
- package/src/hq/fence-wrapper.ts +33 -0
- package/src/hq/hq.ts +17 -2
- package/src/index.ts +118 -6
- package/src/instance/test-write-guard-spy-first.fixture.ts +13 -0
- package/src/instance/test-write-guard.ts +200 -0
- package/src/intake-plane/digest.ts +39 -15
- package/src/intake-plane/harness-target.ts +4 -3
- package/src/intake-plane/intake-sources.ts +1 -0
- package/src/intake-plane/items.ts +1 -0
- package/src/loops/orchestrator/degradation.ts +57 -0
- package/src/loops/orchestrator/finish-rate.ts +33 -3
- package/src/loops/orchestrator/tick.ts +166 -45
- package/src/maturity/feature-maturity.ts +6 -4
- package/src/maturity/tui-slash-maturity.ts +1 -0
- package/src/mss/logging/log-store.ts +3 -0
- package/src/nexus/api/graph-kinds.ts +10 -4
- package/src/nexus/api/graphs-api.ts +178 -6
- package/src/nexus/api/http-server.ts +54 -8
- package/src/nexus/api/loop-edges.ts +292 -17
- package/src/nexus/api/ops-api.ts +112 -29
- package/src/nexus/api/ops-board-route.ts +48 -0
- package/src/nexus/index.ts +7 -0
- package/src/onboarding/entry-hints.ts +5 -0
- package/src/onboarding.ts +24 -6
- package/src/release-loop/checklist.ts +2 -0
- package/src/release-loop/feature-store.ts +68 -18
- package/src/release-loop/gate-shards.ts +158 -0
- package/src/release-loop/light-rc.ts +173 -0
- package/src/release-loop/placement.ts +51 -17
- package/src/release-loop/release-schedule.ts +6 -2
- package/src/release-loop/rubric.ts +57 -1
- package/src/retro/daily.ts +372 -0
- package/src/seat-loop/op-decide.ts +173 -0
- package/src/seat-loop/seat-loop.ts +60 -3
- package/src/seat-loop/seat-report.ts +58 -3
- package/src/self-dev/ask-launch-flow.ts +5 -4
- package/src/self-dev/ask-launch-io.ts +49 -1
- package/src/self-dev/ask-path-candidates.ts +40 -2
- package/src/self-dev/dev-cli.ts +36 -0
- package/src/self-dev/draft-sweep.ts +371 -16
- package/src/self-dev/draft-triage-rules.ts +19 -4
- package/src/self-dev/orchestrate.ts +1 -0
- package/src/self-dev/pr-preview.ts +247 -0
- package/src/self-dev/shard-run.ts +23 -7
- package/src/self-implement/blocked-draft-policy.ts +101 -0
- package/src/self-implement/execution-clarification.ts +11 -0
- package/src/self-implement/gate-cli.ts +29 -8
- package/src/self-implement/gate-env-retry.ts +83 -0
- package/src/self-implement/goal-author-clarification.ts +88 -13
- package/src/self-implement/goal-clarification-escalation.ts +2 -0
- package/src/self-implement/orchestrator.ts +220 -6
- package/src/self-implement/run-stop.ts +123 -0
- package/src/self-implement/run-ttl.ts +258 -0
- package/src/self-implement/salvage-branches.ts +254 -0
- package/src/self-implement/salvage-retention.ts +123 -0
- package/src/self-implement/seams.ts +4 -0
- package/src/self-implement/self-implement-cli.ts +2 -0
- package/src/self-implement/sibling-resync.ts +223 -0
- package/src/self-implement/stop-autoheal.ts +204 -0
- package/src/task-agent/actions.ts +63 -2
- package/src/task-agent/board.ts +132 -0
- package/src/task-agent/card-evidence.ts +292 -0
- package/src/task-agent/completion-evidence.ts +126 -0
- package/src/task-agent/judge.ts +25 -0
- package/src/task-agent/live-moves.ts +276 -0
- package/src/task-agent/mission.ts +33 -7
- package/src/task-agent/shadow.ts +192 -15
- package/src/task-agent/task-hand.ts +124 -17
- package/src/task-orchestrator/surfaces/pod-command-job.ts +82 -8
- package/src/task-orchestrator/surfaces/pod-failure-reason.ts +4 -0
- package/src/task-orchestrator/surfaces/pod-install-slots.ts +89 -0
- package/src/task-orchestrator/surfaces/pod-lease.ts +233 -21
- package/src/task-orchestrator/surfaces/pod-pool.ts +155 -34
- package/src/task-orchestrator/surfaces/self-implement-pod.ts +21 -5
- package/src/telegram-away-command.ts +38 -0
- package/src/telegram-commands.ts +52 -0
- package/src/telegram-report-log-probe.ts +21 -0
- package/src/telegram-report.ts +27 -3
- package/src/testing/real-cli-spawn.ts +106 -0
- package/src/tui-client/dashboard-session.ts +1 -0
- package/src/user-config.ts +190 -5
- package/src/version/packed-revision.json +1 -1
- package/apps/pwa/out/_next/static/chunks/224-798346143007ff65.js +0 -1
- package/apps/pwa/out/_next/static/chunks/3857-4f936cdb30322aa6.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4144-a0041c8dc3be57ac.js +0 -1
- package/apps/pwa/out/_next/static/chunks/4554-5761612531d0146b.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5977-a11f37254196b659.js +0 -1
- package/apps/pwa/out/_next/static/chunks/5994-ae92c0de046ab9ba.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8401-8615a660c84cdb03.js +0 -1
- package/apps/pwa/out/_next/static/chunks/8868-10a3a4440fb0ccd8.js +0 -25
- package/apps/pwa/out/_next/static/chunks/9247-269e4464cc4b491c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/a9f2b54d-7865aba0f4d2ee49.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ceo/page-60c3da708f9a0ccc.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/consult/page-a0eb02638b1e6f31.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/decisions/page-6eaf7bac37830c21.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/editor/page-c39554c321576982.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/inside/page-bd5d586429167fea.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/layout-59b7834d497c2255.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/loops/page-c130b63862437814.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/observatory/page-5f23d0c66a3b4793.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/checklist/page-a3c58f5c72a5f3f9.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/release/page-a2c4625596f8d69c.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/ops/seats/page-0e9099531d239f11.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/outputs/page-e8e1ecaea7cd71d2.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/page-a1b7ffed710a93e0.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/scheduler/page-2da6f9b8a38c6978.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/settings/devices/page-f331e38fefc00393.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/setup/done/page-44d5f767491692bf.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/term/page-61553851aa606146.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/today/page-a1f585e154e61c59.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/vault/page-5150ef17b5383a57.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/chat-ui/page-b9d8ce70792c1672.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/workflows/page-a5a3de231f2cc7d5.js +0 -1
- package/apps/pwa/out/_next/static/chunks/app/worktrees/page-31ac4afa2dcd915c.js +0 -1
- package/apps/pwa/out/_next/static/css/7fa358fec7da7c47.css +0 -1
- /package/apps/pwa/out/_next/static/{P6YTVgzuZz5oTZhY4Din_ → Bam1YziK2iH9bN4K0utGk}/_buildManifest.js +0 -0
- /package/apps/pwa/out/_next/static/{P6YTVgzuZz5oTZhY4Din_ → Bam1YziK2iH9bN4K0utGk}/_ssgManifest.js +0 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
// ── GATE-ENV-RETRY (0.2.20 P1) — 환경 결손 gate 실패는 «게이트만» 다시 돈다 ─────────────
|
|
2
|
+
//
|
|
3
|
+
// S: 하니스 후반 gate 가 «환경 결손»(시험 결과 미수신 · git index.lock 경합 · tsc 힙 OOM ·
|
|
4
|
+
// 「측정 불가」 · 네트워크/레지스트리 타임아웃)을 자식 실패와 같은 칸으로 받아,
|
|
5
|
+
// 재작업 없이 `abandoned` 로 런을 끝냈다.
|
|
6
|
+
// C: 📏 10-06 — TASK-AGENT 런 PR #24438 «test-result-unavailable · escalating without rework» ·
|
|
7
|
+
// NESTEDGUARD3 baseline index.lock 경합 · tsc 힙 OOM «could not measure».
|
|
8
|
+
// 구현은 멀쩡한데 «잰 쪽»이 넘어졌고, 그 구현이 버려진 칸으로 셌다.
|
|
9
|
+
// Q: 구현을 버리지 않고 잴 수 있나?
|
|
10
|
+
// A: ⓐ 이 판정자가 «환경 결손»이라 말하면 짧게 쉬고 gate «만» 다시 돈다(기본 2회).
|
|
11
|
+
// ⓑ 그래도 결손이면 브랜치·PR 을 남기고 `harvestable` 로 끝낸다(「버림」이 아니라 「수확 대기」).
|
|
12
|
+
//
|
|
13
|
+
// ⛔ 틀리는 방향이 비대칭이다(`self-dev/execution-transient.ts` 와 같은 계산):
|
|
14
|
+
// 도입 실패를 「환경」으로 부르면 → 자식 결손이 재작업 없이 수확 칸으로 빠진다.
|
|
15
|
+
// ⇒ `introduced > 0` 또는 자식 책임이 «있음»이면 무조건 거짓. 어휘는 좁게 둔다.
|
|
16
|
+
// ⛔ `budget-exceeded`·`module-load-error` 는 넣지 않는다 — 다시 재도 같은 값이 나온다.
|
|
17
|
+
|
|
18
|
+
/** 환경 결손의 종류 — 관측(로그)과 PR 문면에 그대로 실린다. */
|
|
19
|
+
export type GateEnvDeficitKind =
|
|
20
|
+
| 'test-result-unavailable'
|
|
21
|
+
| 'infrastructure-failure'
|
|
22
|
+
| 'git-lock'
|
|
23
|
+
| 'out-of-memory'
|
|
24
|
+
| 'unmeasured'
|
|
25
|
+
| 'network-timeout';
|
|
26
|
+
|
|
27
|
+
export type GateEnvDeficitVerdict =
|
|
28
|
+
| { readonly envDeficit: true; readonly kind: GateEnvDeficitKind }
|
|
29
|
+
| { readonly envDeficit: false; readonly reason: 'passed' | 'introduced' | 'child-responsible' | 'non-retryable-reason' | 'no-env-signal' };
|
|
30
|
+
|
|
31
|
+
export interface GateEnvDeficitInput {
|
|
32
|
+
readonly passed: boolean;
|
|
33
|
+
readonly log?: string;
|
|
34
|
+
readonly reflectGateFacts?: {
|
|
35
|
+
readonly introduced?: number;
|
|
36
|
+
readonly unknownReason?: string;
|
|
37
|
+
readonly childResponsibility?: string;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/** unknownReason 중 «다시 재면 풀릴 수 있는» 것만. */
|
|
42
|
+
const RETRYABLE_UNKNOWN_REASONS: ReadonlySet<string> = new Set(['test-result-unavailable', 'infrastructure-failure']);
|
|
43
|
+
|
|
44
|
+
/** unknownReason 중 «다시 재도 같은 값이 나오는» 것 — 로그에 환경 어휘가 섞여 있어도 이 사유가 이긴다. */
|
|
45
|
+
const NON_RETRYABLE_UNKNOWN_REASONS: ReadonlySet<string> = new Set(['budget-exceeded', 'module-load-error']);
|
|
46
|
+
|
|
47
|
+
/** 로그 어휘 — ⛔ 좁게(위 비대칭). 순서가 곧 우선순위. */
|
|
48
|
+
const LOG_PATTERNS: ReadonlyArray<readonly [GateEnvDeficitKind, RegExp]> = [
|
|
49
|
+
['git-lock', /index\.lock|another git process seems to be running|cannot lock ref/i],
|
|
50
|
+
['out-of-memory', /javascript heap out of memory|heap out of memory|oomkilled|fatal error: .*allocation failed/i],
|
|
51
|
+
['unmeasured', /could not measure|측정 불가/i],
|
|
52
|
+
['network-timeout', /\b(?:ETIMEDOUT|ECONNRESET|EAI_AGAIN|ENOTFOUND)\b|registry\.npmjs\.org.*(?:timeout|timed out)|network timeout|socket hang up/i],
|
|
53
|
+
];
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* 순수: 실패한 gate 결과가 «환경 결손»인가를 판정한다.
|
|
57
|
+
* ⛔ 도입 실패(`introduced > 0`)·자식 책임 있음은 언제나 거짓 — 그 동작은 바꾸지 않는다.
|
|
58
|
+
*/
|
|
59
|
+
export function classifyGateEnvDeficit(gate: GateEnvDeficitInput): GateEnvDeficitVerdict {
|
|
60
|
+
if (gate.passed) return { envDeficit: false, reason: 'passed' };
|
|
61
|
+
const facts = gate.reflectGateFacts;
|
|
62
|
+
if ((facts?.introduced ?? 0) > 0) return { envDeficit: false, reason: 'introduced' };
|
|
63
|
+
if (facts?.childResponsibility !== undefined && facts.childResponsibility !== 'none') {
|
|
64
|
+
return { envDeficit: false, reason: 'child-responsible' };
|
|
65
|
+
}
|
|
66
|
+
if (facts?.unknownReason !== undefined && NON_RETRYABLE_UNKNOWN_REASONS.has(facts.unknownReason)) {
|
|
67
|
+
return { envDeficit: false, reason: 'non-retryable-reason' };
|
|
68
|
+
}
|
|
69
|
+
if (facts?.unknownReason !== undefined && RETRYABLE_UNKNOWN_REASONS.has(facts.unknownReason)) {
|
|
70
|
+
return { envDeficit: true, kind: facts.unknownReason as GateEnvDeficitKind };
|
|
71
|
+
}
|
|
72
|
+
const log = gate.log ?? '';
|
|
73
|
+
for (const [kind, pattern] of LOG_PATTERNS) {
|
|
74
|
+
if (pattern.test(log)) return { envDeficit: true, kind };
|
|
75
|
+
}
|
|
76
|
+
return { envDeficit: false, reason: 'no-env-signal' };
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** 기본 재시도 정책 — 짧게 쉬고 gate 만 최대 2회. */
|
|
80
|
+
export const DEFAULT_GATE_ENV_RETRY = { attempts: 2, delayMs: 20_000 } as const;
|
|
81
|
+
|
|
82
|
+
/** 수확 대기로 남길 때 PR·종료 사유에 싣는 표지. */
|
|
83
|
+
export const GATE_ENV_DEFICIT_HARVESTABLE_MARK = 'env-deficit, harvestable';
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
+
import { readFileSync, realpathSync } from 'node:fs';
|
|
2
|
+
import { resolve, relative, isAbsolute } from 'node:path';
|
|
3
|
+
import ts from 'typescript';
|
|
1
4
|
import { tierModel } from '../llm/model-defaults.js';
|
|
2
5
|
import { debug } from '../debug/log.js';
|
|
3
6
|
import type { LLMUsage } from '../prompt-cache/types.js';
|
|
@@ -42,7 +45,7 @@ export function parseGoalAuthorParent(document: string): GoalAuthorParent | null
|
|
|
42
45
|
return matches.length === 1 ? matches[0] : null;
|
|
43
46
|
}
|
|
44
47
|
|
|
45
|
-
export type GoalAuthorClarificationAnswerSource = 'injected' | 'recommended' | 'self-authored';
|
|
48
|
+
export type GoalAuthorClarificationAnswerSource = 'injected' | 'recommended' | 'self-authored' | 'default';
|
|
46
49
|
|
|
47
50
|
export interface GoalAuthorClarificationProvenance {
|
|
48
51
|
source: GoalAuthorClarificationAnswerSource;
|
|
@@ -78,8 +81,8 @@ export interface GoalAuthorSelfResolutionContext {
|
|
|
78
81
|
}
|
|
79
82
|
|
|
80
83
|
export type GoalAuthorSelfResolution =
|
|
81
|
-
| { answer: string; evidence: readonly string[] }
|
|
82
|
-
| { answer?: undefined; evidence?: undefined };
|
|
84
|
+
| { answer: string; evidence: readonly string[]; declined?: undefined }
|
|
85
|
+
| { answer?: undefined; evidence?: undefined; declined?: boolean };
|
|
83
86
|
|
|
84
87
|
export interface GoalAuthorClarificationResolutionDeps {
|
|
85
88
|
/** Elanousic authoring seam; it must return no answer when the available evidence is insufficient. */
|
|
@@ -189,7 +192,7 @@ export async function defaultGoalAuthorSelfResolve(
|
|
|
189
192
|
const usages: LLMUsage[] = [];
|
|
190
193
|
if (context.evidence.length === 0) {
|
|
191
194
|
observeSelfResolve('self-resolve-no-evidence', context, startedAt, { usage: deriveUsage(usages) });
|
|
192
|
-
return {};
|
|
195
|
+
return context.questionId === 'preservation_contract' ? { declined: true } : {};
|
|
193
196
|
}
|
|
194
197
|
const controller = new AbortController();
|
|
195
198
|
const timeout = setTimeout(
|
|
@@ -230,7 +233,7 @@ export async function defaultGoalAuthorSelfResolve(
|
|
|
230
233
|
evidenceCount: context.evidence.length,
|
|
231
234
|
usage: deriveUsage(usages),
|
|
232
235
|
});
|
|
233
|
-
return {};
|
|
236
|
+
return answer === null && context.questionId === 'preservation_contract' ? { declined: true } : {};
|
|
234
237
|
} catch (error) {
|
|
235
238
|
observeSelfResolve(
|
|
236
239
|
isSelfResolutionTimeout(error, controller.signal) ? 'self-resolve-timeout' : 'self-resolve-error',
|
|
@@ -471,6 +474,57 @@ interface GoalAuthorClarificationSeed {
|
|
|
471
474
|
parent: GoalAuthorParent;
|
|
472
475
|
}
|
|
473
476
|
|
|
477
|
+
const PRESERVATION_DEFAULT = '대상 경로의 기존 공개 동작(내보내는 함수 시그니처 · CLI 인자·출력·종료 코드)은 그대로 유지한다 · 바뀌는 것은 골이 명시한 동작뿐';
|
|
478
|
+
|
|
479
|
+
function preservationDefault(ask: string): { answer: string; exportCount: number } {
|
|
480
|
+
const request = /Original ask \(verbatim, unmodified\):\s*```\r?\n([\s\S]*?)\r?\n```/.exec(ask)?.[1] ?? ask;
|
|
481
|
+
// Every `대상 경로:` line counts, plain or as a Markdown list item; backticks around a path are cosmetic.
|
|
482
|
+
const paths = [...new Set(request.split(/\r?\n/).flatMap((line) => {
|
|
483
|
+
const match = /^\s*(?:(?:[-*+]|\d+[.)])\s+)?대상 경로:\s*(.*)$/.exec(line);
|
|
484
|
+
return match ? match[1].split(/\s*[,·]\s*/).map((path) => path.trim().replace(/^`|`$/g, '')) : [];
|
|
485
|
+
}))];
|
|
486
|
+
const exports: string[] = [];
|
|
487
|
+
for (const path of paths) {
|
|
488
|
+
if (!/^[\w./-]+\.[cm]?[jt]sx?$/.test(path) || path.startsWith('/') || path.split('/').includes('..')) continue;
|
|
489
|
+
const absolute = resolve(process.cwd(), path);
|
|
490
|
+
try {
|
|
491
|
+
const actual = realpathSync(absolute);
|
|
492
|
+
const withinRepo = relative(realpathSync(process.cwd()), actual);
|
|
493
|
+
if (withinRepo === '..' || withinRepo.startsWith('../') || isAbsolute(withinRepo)) continue;
|
|
494
|
+
const source = ts.createSourceFile(path, readFileSync(actual, 'utf8'), ts.ScriptTarget.Latest, true);
|
|
495
|
+
for (const statement of source.statements) {
|
|
496
|
+
if (ts.isExportDeclaration(statement)) {
|
|
497
|
+
if (statement.exportClause && ts.isNamedExports(statement.exportClause)) {
|
|
498
|
+
for (const element of statement.exportClause.elements) exports.push(`${path}: ${element.name.text}`);
|
|
499
|
+
} else if (statement.exportClause && ts.isNamespaceExport(statement.exportClause)) {
|
|
500
|
+
exports.push(`${path}: ${statement.exportClause.name.text}`);
|
|
501
|
+
} else if (!statement.exportClause && statement.moduleSpecifier && ts.isStringLiteral(statement.moduleSpecifier)) {
|
|
502
|
+
// Names re-exported by `export *` are not resolved here; record the re-export itself so the preserved surface is explicit.
|
|
503
|
+
exports.push(`${path}: * from ${statement.moduleSpecifier.text}`);
|
|
504
|
+
}
|
|
505
|
+
} else if (ts.isExportAssignment(statement)) {
|
|
506
|
+
exports.push(`${path}: ${statement.isExportEquals ? 'export =' : 'default'}`);
|
|
507
|
+
} else if (ts.canHaveModifiers(statement) && ts.getModifiers(statement)?.some((modifier) => modifier.kind === ts.SyntaxKind.ExportKeyword)) {
|
|
508
|
+
if (ts.getModifiers(statement)?.some((modifier) => modifier.kind === ts.SyntaxKind.DefaultKeyword)) {
|
|
509
|
+
exports.push(`${path}: default`);
|
|
510
|
+
} else if (ts.isVariableStatement(statement)) {
|
|
511
|
+
const bindingNames = (name: ts.BindingName): string[] => ts.isIdentifier(name)
|
|
512
|
+
? [name.text]
|
|
513
|
+
: name.elements.flatMap((element) => ts.isOmittedExpression(element) ? [] : bindingNames(element.name));
|
|
514
|
+
for (const declaration of statement.declarationList.declarations) {
|
|
515
|
+
for (const exported of bindingNames(declaration.name)) exports.push(`${path}: ${exported}`);
|
|
516
|
+
}
|
|
517
|
+
} else if ('name' in statement && statement.name && ts.isIdentifier(statement.name as ts.Node)) {
|
|
518
|
+
exports.push(`${path}: ${(statement.name as ts.Identifier).text}`);
|
|
519
|
+
}
|
|
520
|
+
}
|
|
521
|
+
}
|
|
522
|
+
} catch { /* An unavailable target cannot supply verified export names. */ }
|
|
523
|
+
}
|
|
524
|
+
const names = [...new Set(exports)];
|
|
525
|
+
return { answer: names.length ? `${PRESERVATION_DEFAULT} · export 이름: ${names.join(', ')}` : PRESERVATION_DEFAULT, exportCount: names.length };
|
|
526
|
+
}
|
|
527
|
+
|
|
474
528
|
const DEFERRED_ANSWER = 'DEFERRED-UNTIL: ';
|
|
475
529
|
const DEFERRED_ANSWER_PREFIX = 'DEFERRED-UNTIL';
|
|
476
530
|
|
|
@@ -515,7 +569,7 @@ export function parseGoalDocumentClarifications(document: string): GoalDocumentC
|
|
|
515
569
|
readingOptions = false;
|
|
516
570
|
continue;
|
|
517
571
|
}
|
|
518
|
-
const provenanceSource = /^ - provenance\.source: (injected|recommended|self-authored)$/.exec(line);
|
|
572
|
+
const provenanceSource = /^ - provenance\.source: (injected|recommended|self-authored|default)$/.exec(line);
|
|
519
573
|
if (provenanceSource) {
|
|
520
574
|
fields.set('provenanceSource', provenanceSource[1]);
|
|
521
575
|
provenanceLines.push(index);
|
|
@@ -692,6 +746,7 @@ export async function selfAnswerGoalDocumentClarifications(
|
|
|
692
746
|
ask?: string;
|
|
693
747
|
evidence?: readonly string[];
|
|
694
748
|
resolver?: GoalClarificationSelfResolver;
|
|
749
|
+
runId?: string;
|
|
695
750
|
},
|
|
696
751
|
): Promise<{ document: string; asked: number; answered: number; unanswered: number; newlyAnswered: number }> {
|
|
697
752
|
const clarifications = parseGoalDocumentClarifications(document);
|
|
@@ -699,7 +754,7 @@ export async function selfAnswerGoalDocumentClarifications(
|
|
|
699
754
|
// The first say pass may already have self-answered some questions while authoring: count those,
|
|
700
755
|
// never re-ask them, and still attempt every question that is left unanswered.
|
|
701
756
|
const alreadySelfAnswered = options.path === 'say-first'
|
|
702
|
-
? clarifications.filter((item) => item.answered && item.provenanceSource === 'self-authored').length
|
|
757
|
+
? clarifications.filter((item) => item.answered && (item.provenanceSource === 'self-authored' || item.provenanceSource === 'default')).length
|
|
703
758
|
: 0;
|
|
704
759
|
let updated = document;
|
|
705
760
|
let answered = 0;
|
|
@@ -709,6 +764,7 @@ export async function selfAnswerGoalDocumentClarifications(
|
|
|
709
764
|
for (const item of pending) {
|
|
710
765
|
if (parseGoalDocumentClarifications(updated).filter((entry) => entry.questionId === item.questionId).length !== 1) continue;
|
|
711
766
|
let response: Awaited<ReturnType<typeof resolveGoalAuthorClarification>>;
|
|
767
|
+
let declined = false;
|
|
712
768
|
try { response = await resolveGoalAuthorClarification({
|
|
713
769
|
questionId: item.questionId,
|
|
714
770
|
kind: 'scope',
|
|
@@ -717,7 +773,11 @@ export async function selfAnswerGoalDocumentClarifications(
|
|
|
717
773
|
options: item.options.map((option) => ({ label: option.label, description: option.description })),
|
|
718
774
|
blocking: false,
|
|
719
775
|
}, {
|
|
720
|
-
selfResolve:
|
|
776
|
+
selfResolve: async (context) => {
|
|
777
|
+
const resolution = await (options.resolver ?? defaultGoalAuthorSelfResolve)(context);
|
|
778
|
+
declined = resolution.declined === true;
|
|
779
|
+
return resolution;
|
|
780
|
+
},
|
|
721
781
|
evidence,
|
|
722
782
|
ask: options.ask,
|
|
723
783
|
selfResolutionSelected: true,
|
|
@@ -725,11 +785,19 @@ export async function selfAnswerGoalDocumentClarifications(
|
|
|
725
785
|
// A resolver failure leaves this question unanswered; the remaining questions are still attempted.
|
|
726
786
|
continue;
|
|
727
787
|
}
|
|
728
|
-
|
|
788
|
+
let defaultExportCount: number | undefined;
|
|
789
|
+
if (response.answer === null && item.questionId === 'preservation_contract'
|
|
790
|
+
&& declined) {
|
|
791
|
+
const fallback = preservationDefault(options.ask ?? document);
|
|
792
|
+
response = { ...response, answer: fallback.answer, status: 'ANSWERED', provenance: { source: 'default' } };
|
|
793
|
+
defaultExportCount = fallback.exportCount;
|
|
794
|
+
}
|
|
795
|
+
if (response.answer === null || (response.provenance?.source !== 'self-authored' && response.provenance?.source !== 'default')
|
|
729
796
|
|| response.answer.startsWith(DEFERRED_ANSWER_PREFIX)) continue;
|
|
797
|
+
const answerSource = response.provenance.source;
|
|
730
798
|
try {
|
|
731
799
|
if (!response.answer.trim() || /[\r\n]/.test(response.answer)
|
|
732
|
-
|| (!item.includeOther && !item.options.some((option) => option.label === response.answer))) continue;
|
|
800
|
+
|| (answerSource !== 'default' && !item.includeOther && !item.options.some((option) => option.label === response.answer))) continue;
|
|
733
801
|
const current = findUnansweredGoalDocumentClarification(updated, item.questionId);
|
|
734
802
|
const lines = updated.split(/\r?\n/);
|
|
735
803
|
const provenanceLines = current.provenanceLines ?? [];
|
|
@@ -737,15 +805,22 @@ export async function selfAnswerGoalDocumentClarifications(
|
|
|
737
805
|
const answerLine = current.answerLine - provenanceLines.filter((line) => line < current.answerLine).length;
|
|
738
806
|
lines[answerLine] = ` - answer: ${response.answer}`;
|
|
739
807
|
lines.splice(answerLine + 1, 0,
|
|
740
|
-
|
|
741
|
-
...response.provenance.evidence
|
|
808
|
+
` - provenance.source: ${answerSource}`,
|
|
809
|
+
...(response.provenance.evidence ?? []).map((entry) => ` - evidence: ${entry.replace(/[\r\n]/g, ' ')}`));
|
|
742
810
|
updateWhatToBuildRenderAnswers(lines, item.questionId, response.answer);
|
|
743
811
|
if (hasWhatToBuildUnansweredRenderAnswer(lines, item.questionId)) continue;
|
|
744
812
|
const candidate = lines.join(document.includes('\r\n') ? '\r\n' : '\n');
|
|
745
813
|
if (!parseGoalDocumentClarifications(candidate).some((entry) => entry.questionId === item.questionId
|
|
746
|
-
&& entry.answered && entry.answer === response.answer && entry.provenanceSource ===
|
|
814
|
+
&& entry.answered && entry.answer === response.answer && entry.provenanceSource === answerSource)) continue;
|
|
747
815
|
updated = candidate;
|
|
748
816
|
answered += 1;
|
|
817
|
+
if (defaultExportCount !== undefined) {
|
|
818
|
+
observeGoalAuthor('goal-author', 'self-answer-default-applied', {
|
|
819
|
+
runId: options.runId ?? process.env.ELANOUS_RUN_ID,
|
|
820
|
+
questionId: item.questionId,
|
|
821
|
+
exportCount: defaultExportCount,
|
|
822
|
+
});
|
|
823
|
+
}
|
|
749
824
|
} catch {
|
|
750
825
|
// Leave malformed or disallowed answers deferred.
|
|
751
826
|
}
|
|
@@ -39,6 +39,7 @@ type GoalClarificationAnsweredBy = 'human' | 'agent' | 'none' | 'mixed';
|
|
|
39
39
|
|
|
40
40
|
export interface GoalClarificationEscalationInput {
|
|
41
41
|
goalFile: string;
|
|
42
|
+
runId?: string;
|
|
42
43
|
/** Explicit provenance for isolated test fixtures; never inferred from goalFile. */
|
|
43
44
|
testOrigin?: true;
|
|
44
45
|
delivery?: GoalClarificationDelivery;
|
|
@@ -443,6 +444,7 @@ export async function escalateGoalDocumentClarifications(
|
|
|
443
444
|
path: input.selfAnswerPath,
|
|
444
445
|
ask: document,
|
|
445
446
|
resolver: input.selfResolveClarification,
|
|
447
|
+
runId: input.runId ?? process.env.ELANOUS_RUN_ID,
|
|
446
448
|
});
|
|
447
449
|
if (resolution.newlyAnswered > 0) {
|
|
448
450
|
writeGoalDocumentAtomic(input.goalFile, resolution.document);
|