@quickchatai/quickreview 0.0.0-stage → 1.1.0
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/LICENSE +23 -0
- package/README.md +385 -2
- package/THIRD-PARTY-NOTICES.md +134 -0
- package/agents/pass-abstraction.md +64 -0
- package/agents/pass-ask-human.md +134 -0
- package/agents/pass-backcompat.md +67 -0
- package/agents/pass-baseline.md +61 -0
- package/agents/pass-behaviour-delta.md +64 -0
- package/agents/pass-bounds.md +36 -0
- package/agents/pass-claims.md +31 -0
- package/agents/pass-concurrency.md +168 -0
- package/agents/pass-consistency.md +57 -0
- package/agents/pass-contracts.md +30 -0
- package/agents/pass-data-safety.md +54 -0
- package/agents/pass-deferred.md +35 -0
- package/agents/pass-delivery.md +37 -0
- package/agents/pass-duplication.md +60 -0
- package/agents/pass-intent.md +63 -0
- package/agents/pass-lint-conformance.md +46 -0
- package/agents/pass-maintainability.md +67 -0
- package/agents/pass-placement.md +68 -0
- package/agents/pass-prod-risk.md +24 -0
- package/agents/pass-rollout.md +32 -0
- package/agents/pass-roundtrip.md +46 -0
- package/agents/pass-security.md +31 -0
- package/agents/pass-simplicity.md +68 -0
- package/agents/pass-statelessness.md +27 -0
- package/agents/pass-style.md +37 -0
- package/agents/pass-sweep.md +57 -0
- package/agents/pass-tests.md +58 -0
- package/agents/pass-ui.md +23 -0
- package/agents/pass-validate.md +50 -0
- package/agents/pass-widened.md +46 -0
- package/agents/scan/pass-scan.md +86 -0
- package/bin/qcr.js +11 -0
- package/config.example.toml +1067 -0
- package/deploy/ansible/README.md +356 -0
- package/deploy/ansible/group_vars/all.yml +212 -0
- package/deploy/ansible/inventory.example.ini +25 -0
- package/deploy/ansible/playbook.yml +360 -0
- package/deploy/collect-secrets.sh +289 -0
- package/deploy/collect-slack-secrets.mjs +1190 -0
- package/deploy/github-app-manifest.json +31 -0
- package/deploy/manifest.schema.json +75 -0
- package/deploy/qcr-update.sh +803 -0
- package/deploy/reviewer/AGENTS.override.md +12 -0
- package/dist/extensions/cli/bash-guard-ambient.js +42 -0
- package/dist/extensions/cli/bash-guard-ambient.js.map +1 -0
- package/dist/extensions/cli/bash-guard.js +5 -0
- package/dist/extensions/cli/bash-guard.js.map +1 -0
- package/dist/extensions/cli/companion-guard.js +5 -0
- package/dist/extensions/cli/companion-guard.js.map +1 -0
- package/dist/extensions/cli/debug-round.js +8 -0
- package/dist/extensions/cli/debug-round.js.map +1 -0
- package/dist/extensions/cli/inject-bridge.js +5 -0
- package/dist/extensions/cli/inject-bridge.js.map +1 -0
- package/dist/extensions/cli/ledger-pin.js +5 -0
- package/dist/extensions/cli/ledger-pin.js.map +1 -0
- package/dist/extensions/cli/lens.js +13 -0
- package/dist/extensions/cli/lens.js.map +1 -0
- package/dist/extensions/cli/muted-theme.js +5 -0
- package/dist/extensions/cli/muted-theme.js.map +1 -0
- package/dist/extensions/cli/onboarding.js +5 -0
- package/dist/extensions/cli/onboarding.js.map +1 -0
- package/dist/extensions/cli/setup.js +5 -0
- package/dist/extensions/cli/setup.js.map +1 -0
- package/dist/extensions/cli/tui-view.js +5 -0
- package/dist/extensions/cli/tui-view.js.map +1 -0
- package/dist/extensions/companion-guard.js +361 -0
- package/dist/extensions/companion-guard.js.map +1 -0
- package/dist/extensions/debug-round.js +204 -0
- package/dist/extensions/debug-round.js.map +1 -0
- package/dist/extensions/inject-bridge.js +603 -0
- package/dist/extensions/inject-bridge.js.map +1 -0
- package/dist/extensions/muted-theme.js +12 -0
- package/dist/extensions/muted-theme.js.map +1 -0
- package/dist/extensions/onboarding.js +175 -0
- package/dist/extensions/onboarding.js.map +1 -0
- package/dist/extensions/setup-replay.js +269 -0
- package/dist/extensions/setup-replay.js.map +1 -0
- package/dist/extensions/setup-scan.js +998 -0
- package/dist/extensions/setup-scan.js.map +1 -0
- package/dist/extensions/setup-triage.js +175 -0
- package/dist/extensions/setup-triage.js.map +1 -0
- package/dist/extensions/setup.js +1160 -0
- package/dist/extensions/setup.js.map +1 -0
- package/dist/extensions/tui-view.js +389 -0
- package/dist/extensions/tui-view.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/client.js +376 -0
- package/dist/extensions/vendor/openviking-pi/client.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/config.js +189 -0
- package/dist/extensions/vendor/openviking-pi/config.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/index.js +421 -0
- package/dist/extensions/vendor/openviking-pi/index.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/lib/capture-adapter.mjs +86 -0
- package/dist/extensions/vendor/openviking-pi/lib/capture-adapter.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/lib/takeover-core.mjs +408 -0
- package/dist/extensions/vendor/openviking-pi/lib/takeover-core.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/lib/uri-guard-adapter.mjs +41 -0
- package/dist/extensions/vendor/openviking-pi/lib/uri-guard-adapter.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-hint.js +290 -0
- package/dist/extensions/vendor/openviking-pi/qcr-hint.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-honest.js +148 -0
- package/dist/extensions/vendor/openviking-pi/qcr-honest.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-hooks.js +68 -0
- package/dist/extensions/vendor/openviking-pi/qcr-hooks.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-leaf.js +77 -0
- package/dist/extensions/vendor/openviking-pi/qcr-leaf.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-lesson.js +216 -0
- package/dist/extensions/vendor/openviking-pi/qcr-lesson.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-namespaces.js +154 -0
- package/dist/extensions/vendor/openviking-pi/qcr-namespaces.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-recall.js +254 -0
- package/dist/extensions/vendor/openviking-pi/qcr-recall.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-shim.js +94 -0
- package/dist/extensions/vendor/openviking-pi/qcr-shim.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/qcr-write.js +333 -0
- package/dist/extensions/vendor/openviking-pi/qcr-write.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/recall.js +108 -0
- package/dist/extensions/vendor/openviking-pi/recall.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/capture-utils.mjs +529 -0
- package/dist/extensions/vendor/openviking-pi/shared/capture-utils.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/credentials.mjs +205 -0
- package/dist/extensions/vendor/openviking-pi/shared/credentials.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/pending-queue.mjs +442 -0
- package/dist/extensions/vendor/openviking-pi/shared/pending-queue.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/profile-inject.mjs +286 -0
- package/dist/extensions/vendor/openviking-pi/shared/profile-inject.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/recall-compress-core.mjs +189 -0
- package/dist/extensions/vendor/openviking-pi/shared/recall-compress-core.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/recall-core.mjs +580 -0
- package/dist/extensions/vendor/openviking-pi/shared/recall-core.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/retryable.mjs +11 -0
- package/dist/extensions/vendor/openviking-pi/shared/retryable.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/session-model.mjs +63 -0
- package/dist/extensions/vendor/openviking-pi/shared/session-model.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/uri-guard.mjs +58 -0
- package/dist/extensions/vendor/openviking-pi/shared/uri-guard.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/shared/workspace-peer.mjs +16 -0
- package/dist/extensions/vendor/openviking-pi/shared/workspace-peer.mjs.map +1 -0
- package/dist/extensions/vendor/openviking-pi/sync.js +127 -0
- package/dist/extensions/vendor/openviking-pi/sync.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/takeover.js +25 -0
- package/dist/extensions/vendor/openviking-pi/takeover.js.map +1 -0
- package/dist/extensions/vendor/openviking-pi/tools.js +417 -0
- package/dist/extensions/vendor/openviking-pi/tools.js.map +1 -0
- package/dist/src/anomalies.js +483 -0
- package/dist/src/anomalies.js.map +1 -0
- package/dist/src/answerworker.js +180 -0
- package/dist/src/answerworker.js.map +1 -0
- package/dist/src/appstamp.js +68 -0
- package/dist/src/appstamp.js.map +1 -0
- package/dist/src/archive/admission.js +3 -0
- package/dist/src/archive/admission.js.map +1 -0
- package/dist/src/archive/archivedb.js +474 -0
- package/dist/src/archive/archivedb.js.map +1 -0
- package/dist/src/archive/archiver.js +1770 -0
- package/dist/src/archive/archiver.js.map +1 -0
- package/dist/src/archive/archivewrite.js +198 -0
- package/dist/src/archive/archivewrite.js.map +1 -0
- package/dist/src/archive/bundle.js +266 -0
- package/dist/src/archive/bundle.js.map +1 -0
- package/dist/src/archive/dbmove.js +638 -0
- package/dist/src/archive/dbmove.js.map +1 -0
- package/dist/src/archive/duplicatecounts.js +80 -0
- package/dist/src/archive/duplicatecounts.js.map +1 -0
- package/dist/src/archive/eligibility.js +113 -0
- package/dist/src/archive/eligibility.js.map +1 -0
- package/dist/src/archive/extract.js +288 -0
- package/dist/src/archive/extract.js.map +1 -0
- package/dist/src/archive/fsutil.js +330 -0
- package/dist/src/archive/fsutil.js.map +1 -0
- package/dist/src/archive/gzfile.js +277 -0
- package/dist/src/archive/gzfile.js.map +1 -0
- package/dist/src/archive/kinds.js +22 -0
- package/dist/src/archive/kinds.js.map +1 -0
- package/dist/src/archive/livecheckpoint.js +178 -0
- package/dist/src/archive/livecheckpoint.js.map +1 -0
- package/dist/src/archive/liveretention.js +145 -0
- package/dist/src/archive/liveretention.js.map +1 -0
- package/dist/src/archive/manifest.js +284 -0
- package/dist/src/archive/manifest.js.map +1 -0
- package/dist/src/archive/overseer.js +283 -0
- package/dist/src/archive/overseer.js.map +1 -0
- package/dist/src/archive/piglobal.js +129 -0
- package/dist/src/archive/piglobal.js.map +1 -0
- package/dist/src/archive/plan.js +398 -0
- package/dist/src/archive/plan.js.map +1 -0
- package/dist/src/archive/prarchive.js +831 -0
- package/dist/src/archive/prarchive.js.map +1 -0
- package/dist/src/archive/prfiles.js +303 -0
- package/dist/src/archive/prfiles.js.map +1 -0
- package/dist/src/archive/report.js +169 -0
- package/dist/src/archive/report.js.map +1 -0
- package/dist/src/archive/restore.js +276 -0
- package/dist/src/archive/restore.js.map +1 -0
- package/dist/src/archive/rows.js +106 -0
- package/dist/src/archive/rows.js.map +1 -0
- package/dist/src/archive/seal.js +480 -0
- package/dist/src/archive/seal.js.map +1 -0
- package/dist/src/archive/status.js +528 -0
- package/dist/src/archive/status.js.map +1 -0
- package/dist/src/archive/storepass.js +409 -0
- package/dist/src/archive/storepass.js.map +1 -0
- package/dist/src/backfill.js +217 -0
- package/dist/src/backfill.js.map +1 -0
- package/dist/src/bench/cost.js +87 -0
- package/dist/src/bench/exec.js +76 -0
- package/dist/src/bench/values.js +14 -0
- package/dist/src/botcontrol.js +127 -0
- package/dist/src/botcontrol.js.map +1 -0
- package/dist/src/botworker.js +805 -0
- package/dist/src/botworker.js.map +1 -0
- package/dist/src/capture.js +234 -0
- package/dist/src/capture.js.map +1 -0
- package/dist/src/cases.js +1491 -0
- package/dist/src/cases.js.map +1 -0
- package/dist/src/channelfs.js +27 -0
- package/dist/src/channelfs.js.map +1 -0
- package/dist/src/checklist.js +312 -0
- package/dist/src/checklist.js.map +1 -0
- package/dist/src/ciretry.js +91 -0
- package/dist/src/ciretry.js.map +1 -0
- package/dist/src/cli.js +1916 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/cliops.js +333 -0
- package/dist/src/cliops.js.map +1 -0
- package/dist/src/clonedir.js +15 -0
- package/dist/src/clonedir.js.map +1 -0
- package/dist/src/commandeffects.js +43 -0
- package/dist/src/commandeffects.js.map +1 -0
- package/dist/src/commands.js +1312 -0
- package/dist/src/commands.js.map +1 -0
- package/dist/src/companioninbox.js +203 -0
- package/dist/src/companioninbox.js.map +1 -0
- package/dist/src/compare.js +673 -0
- package/dist/src/compare.js.map +1 -0
- package/dist/src/config.js +1027 -0
- package/dist/src/config.js.map +1 -0
- package/dist/src/configcheck.js +111 -0
- package/dist/src/configcheck.js.map +1 -0
- package/dist/src/coreext.js +43 -0
- package/dist/src/coreext.js.map +1 -0
- package/dist/src/daemon.js +929 -0
- package/dist/src/daemon.js.map +1 -0
- package/dist/src/debuground.js +731 -0
- package/dist/src/debuground.js.map +1 -0
- package/dist/src/debugroundpi.js +219 -0
- package/dist/src/debugroundpi.js.map +1 -0
- package/dist/src/diagnostics.js +14 -0
- package/dist/src/diagnostics.js.map +1 -0
- package/dist/src/digest.js +139 -0
- package/dist/src/digest.js.map +1 -0
- package/dist/src/dispatch.js +1726 -0
- package/dist/src/dispatch.js.map +1 -0
- package/dist/src/engine/answerguard.js +18 -0
- package/dist/src/engine/answerguard.js.map +1 -0
- package/dist/src/engine/botsdk.js +262 -0
- package/dist/src/engine/botsdk.js.map +1 -0
- package/dist/src/engine/caserunner-sdk.js +332 -0
- package/dist/src/engine/caserunner-sdk.js.map +1 -0
- package/dist/src/engine/debugpi.js +194 -0
- package/dist/src/engine/debugpi.js.map +1 -0
- package/dist/src/eod.js +473 -0
- package/dist/src/eod.js.map +1 -0
- package/dist/src/eodpinwatch.js +391 -0
- package/dist/src/eodpinwatch.js.map +1 -0
- package/dist/src/escalation.js +1009 -0
- package/dist/src/escalation.js.map +1 -0
- package/dist/src/eventloop.js +779 -0
- package/dist/src/eventloop.js.map +1 -0
- package/dist/src/execboundary.js +430 -0
- package/dist/src/execboundary.js.map +1 -0
- package/dist/src/feedback.js +915 -0
- package/dist/src/feedback.js.map +1 -0
- package/dist/src/findingscheck.js +200 -0
- package/dist/src/findingscheck.js.map +1 -0
- package/dist/src/fsdenied.js +26 -0
- package/dist/src/fsdenied.js.map +1 -0
- package/dist/src/ghread.js +181 -0
- package/dist/src/ghread.js.map +1 -0
- package/dist/src/github.js +1063 -0
- package/dist/src/github.js.map +1 -0
- package/dist/src/homes.js +103 -0
- package/dist/src/homes.js.map +1 -0
- package/dist/src/hostroute.js +24 -0
- package/dist/src/hostroute.js.map +1 -0
- package/dist/src/improvements.js +625 -0
- package/dist/src/improvements.js.map +1 -0
- package/dist/src/install.js +946 -0
- package/dist/src/install.js.map +1 -0
- package/dist/src/installkind.js +40 -0
- package/dist/src/installkind.js.map +1 -0
- package/dist/src/ipc/capability.js +286 -0
- package/dist/src/ipc/capability.js.map +1 -0
- package/dist/src/ipc/client.js +226 -0
- package/dist/src/ipc/client.js.map +1 -0
- package/dist/src/ipc/control.js +70 -0
- package/dist/src/ipc/control.js.map +1 -0
- package/dist/src/ipc/ghreadshim.js +77 -0
- package/dist/src/ipc/ghreadshim.js.map +1 -0
- package/dist/src/ipc/launcher.js +65 -0
- package/dist/src/ipc/launcher.js.map +1 -0
- package/dist/src/ipc/permits.js +293 -0
- package/dist/src/ipc/permits.js.map +1 -0
- package/dist/src/ipc/postshim.js +137 -0
- package/dist/src/ipc/postshim.js.map +1 -0
- package/dist/src/ipc/protocol.js +239 -0
- package/dist/src/ipc/protocol.js.map +1 -0
- package/dist/src/ipc/server.js +312 -0
- package/dist/src/ipc/server.js.map +1 -0
- package/dist/src/ipc/workerspec.js +148 -0
- package/dist/src/ipc/workerspec.js.map +1 -0
- package/dist/src/learner/learner.js +1272 -0
- package/dist/src/learner/learner.js.map +1 -0
- package/dist/src/learner/miner.js +948 -0
- package/dist/src/learner/miner.js.map +1 -0
- package/dist/src/learner/packet.js +216 -0
- package/dist/src/learner/packet.js.map +1 -0
- package/dist/src/learner/receipt.js +135 -0
- package/dist/src/learner/receipt.js.map +1 -0
- package/dist/src/learner/status.js +38 -0
- package/dist/src/learner/status.js.map +1 -0
- package/dist/src/ledgercheck.js +120 -0
- package/dist/src/ledgercheck.js.map +1 -0
- package/dist/src/lessonledger.js +451 -0
- package/dist/src/lessonledger.js.map +1 -0
- package/dist/src/lessonselect.js +639 -0
- package/dist/src/lessonselect.js.map +1 -0
- package/dist/src/lessonshadow.js +540 -0
- package/dist/src/lessonshadow.js.map +1 -0
- package/dist/src/levers.js +302 -0
- package/dist/src/levers.js.map +1 -0
- package/dist/src/live/projection.js +450 -0
- package/dist/src/live/projection.js.map +1 -0
- package/dist/src/live/publish.js +83 -0
- package/dist/src/live/publish.js.map +1 -0
- package/dist/src/live/read.js +60 -0
- package/dist/src/live/read.js.map +1 -0
- package/dist/src/livecli.js +288 -0
- package/dist/src/livecli.js.map +1 -0
- package/dist/src/loginhint.js +42 -0
- package/dist/src/loginhint.js.map +1 -0
- package/dist/src/loginrefresh/atomic.js +66 -0
- package/dist/src/loginrefresh/atomic.js.map +1 -0
- package/dist/src/loginrefresh/lock.js +93 -0
- package/dist/src/loginrefresh/lock.js.map +1 -0
- package/dist/src/loginrefresh/main.js +58 -0
- package/dist/src/loginrefresh/main.js.map +1 -0
- package/dist/src/loginrefresh/pirefresh.js +49 -0
- package/dist/src/loginrefresh/pirefresh.js.map +1 -0
- package/dist/src/loginrefresh/refresher.js +286 -0
- package/dist/src/loginrefresh/refresher.js.map +1 -0
- package/dist/src/loginrefresh/supervisor.js +253 -0
- package/dist/src/loginrefresh/supervisor.js.map +1 -0
- package/dist/src/loginrefresh/types.js +4 -0
- package/dist/src/loginrefresh/types.js.map +1 -0
- package/dist/src/memory/context.js +251 -0
- package/dist/src/memory/context.js.map +1 -0
- package/dist/src/memory/datafence.js +5 -0
- package/dist/src/memory/datafence.js.map +1 -0
- package/dist/src/memory/delivery.js +131 -0
- package/dist/src/memory/delivery.js.map +1 -0
- package/dist/src/memory/eventtags.js +81 -0
- package/dist/src/memory/eventtags.js.map +1 -0
- package/dist/src/memory/health.js +713 -0
- package/dist/src/memory/health.js.map +1 -0
- package/dist/src/memory/import.js +504 -0
- package/dist/src/memory/import.js.map +1 -0
- package/dist/src/memory/layout.js +252 -0
- package/dist/src/memory/layout.js.map +1 -0
- package/dist/src/memory/legacy-file.js +100 -0
- package/dist/src/memory/legacy-file.js.map +1 -0
- package/dist/src/memory/lessons.js +370 -0
- package/dist/src/memory/lessons.js.map +1 -0
- package/dist/src/memory/ovsession.js +449 -0
- package/dist/src/memory/ovsession.js.map +1 -0
- package/dist/src/memory/relayout.js +259 -0
- package/dist/src/memory/relayout.js.map +1 -0
- package/dist/src/memory/roundactivity.js +180 -0
- package/dist/src/memory/roundactivity.js.map +1 -0
- package/dist/src/memory/selection.js +690 -0
- package/dist/src/memory/selection.js.map +1 -0
- package/dist/src/memory/shadowstatus.js +69 -0
- package/dist/src/memory/shadowstatus.js.map +1 -0
- package/dist/src/memory/store.js +83 -0
- package/dist/src/memory/store.js.map +1 -0
- package/dist/src/memory/textidentity.js +8 -0
- package/dist/src/memory/textidentity.js.map +1 -0
- package/dist/src/metrics.js +773 -0
- package/dist/src/metrics.js.map +1 -0
- package/dist/src/missingconfig.js +8 -0
- package/dist/src/missingconfig.js.map +1 -0
- package/dist/src/npmverbs.js +226 -0
- package/dist/src/npmverbs.js.map +1 -0
- package/dist/src/onboard/choices.js +191 -0
- package/dist/src/onboard/choices.js.map +1 -0
- package/dist/src/onboard/engine.js +344 -0
- package/dist/src/onboard/engine.js.map +1 -0
- package/dist/src/onboard/launch.js +83 -0
- package/dist/src/onboard/launch.js.map +1 -0
- package/dist/src/onboard/steps/appslug.js +211 -0
- package/dist/src/onboard/steps/appslug.js.map +1 -0
- package/dist/src/onboard/steps/bringup.js +408 -0
- package/dist/src/onboard/steps/bringup.js.map +1 -0
- package/dist/src/onboard/steps/compose.js +343 -0
- package/dist/src/onboard/steps/compose.js.map +1 -0
- package/dist/src/onboard/steps/configdelivery.js +50 -0
- package/dist/src/onboard/steps/configdelivery.js.map +1 -0
- package/dist/src/onboard/steps/configfill.js +1148 -0
- package/dist/src/onboard/steps/configfill.js.map +1 -0
- package/dist/src/onboard/steps/deploysh.js +80 -0
- package/dist/src/onboard/steps/deploysh.js.map +1 -0
- package/dist/src/onboard/steps/embeddings.js +472 -0
- package/dist/src/onboard/steps/embeddings.js.map +1 -0
- package/dist/src/onboard/steps/escalation.js +571 -0
- package/dist/src/onboard/steps/escalation.js.map +1 -0
- package/dist/src/onboard/steps/githubapp.js +1092 -0
- package/dist/src/onboard/steps/githubapp.js.map +1 -0
- package/dist/src/onboard/steps/golive.js +506 -0
- package/dist/src/onboard/steps/golive.js.map +1 -0
- package/dist/src/onboard/steps/index.js +67 -0
- package/dist/src/onboard/steps/index.js.map +1 -0
- package/dist/src/onboard/steps/ingress.js +762 -0
- package/dist/src/onboard/steps/ingress.js.map +1 -0
- package/dist/src/onboard/steps/inventory.js +420 -0
- package/dist/src/onboard/steps/inventory.js.map +1 -0
- package/dist/src/onboard/steps/llmauth.js +893 -0
- package/dist/src/onboard/steps/llmauth.js.map +1 -0
- package/dist/src/onboard/steps/memory.js +1060 -0
- package/dist/src/onboard/steps/memory.js.map +1 -0
- package/dist/src/onboard/steps/memorykeys.js +43 -0
- package/dist/src/onboard/steps/memorykeys.js.map +1 -0
- package/dist/src/onboard/steps/preflight.js +172 -0
- package/dist/src/onboard/steps/preflight.js.map +1 -0
- package/dist/src/onboard/steps/proof.js +502 -0
- package/dist/src/onboard/steps/proof.js.map +1 -0
- package/dist/src/onboard/steps/ssh.js +300 -0
- package/dist/src/onboard/steps/ssh.js.map +1 -0
- package/dist/src/onboard/steps/topology.js +291 -0
- package/dist/src/onboard/steps/topology.js.map +1 -0
- package/dist/src/onboard/steps/transport.js +511 -0
- package/dist/src/onboard/steps/transport.js.map +1 -0
- package/dist/src/onboard/steps/verifyup.js +362 -0
- package/dist/src/onboard/steps/verifyup.js.map +1 -0
- package/dist/src/onboard/steps/vmdeploy.js +368 -0
- package/dist/src/onboard/steps/vmdeploy.js.map +1 -0
- package/dist/src/onboard/toml.js +53 -0
- package/dist/src/onboard/toml.js.map +1 -0
- package/dist/src/opencli.js +508 -0
- package/dist/src/opencli.js.map +1 -0
- package/dist/src/openpr.js +457 -0
- package/dist/src/openpr.js.map +1 -0
- package/dist/src/openviking/client.js +821 -0
- package/dist/src/openviking/client.js.map +1 -0
- package/dist/src/openviking/context.js +218 -0
- package/dist/src/openviking/context.js.map +1 -0
- package/dist/src/openviking/embedder.js +457 -0
- package/dist/src/openviking/embedder.js.map +1 -0
- package/dist/src/openviking/gapsink.js +38 -0
- package/dist/src/openviking/gapsink.js.map +1 -0
- package/dist/src/openviking/health.js +69 -0
- package/dist/src/openviking/health.js.map +1 -0
- package/dist/src/openviking/index.js +24 -0
- package/dist/src/openviking/index.js.map +1 -0
- package/dist/src/openviking/lessonfind.js +54 -0
- package/dist/src/openviking/lessonfind.js.map +1 -0
- package/dist/src/openviking/probe.js +89 -0
- package/dist/src/openviking/probe.js.map +1 -0
- package/dist/src/openviking/proc.js +95 -0
- package/dist/src/openviking/proc.js.map +1 -0
- package/dist/src/openviking/provisionreport.js +144 -0
- package/dist/src/openviking/provisionreport.js.map +1 -0
- package/dist/src/openviking/reembed.js +317 -0
- package/dist/src/openviking/reembed.js.map +1 -0
- package/dist/src/openviking/relayout.js +153 -0
- package/dist/src/openviking/relayout.js.map +1 -0
- package/dist/src/openviking/sidecar-main.js +39 -0
- package/dist/src/openviking/sidecar-main.js.map +1 -0
- package/dist/src/openviking/sidecar.js +79 -0
- package/dist/src/openviking/sidecar.js.map +1 -0
- package/dist/src/openviking/store.js +1758 -0
- package/dist/src/openviking/store.js.map +1 -0
- package/dist/src/openviking/supervisor.js +422 -0
- package/dist/src/openviking/supervisor.js.map +1 -0
- package/dist/src/openviking/types.js +5 -0
- package/dist/src/openviking/types.js.map +1 -0
- package/dist/src/operator-recovery.js +172 -0
- package/dist/src/operator-recovery.js.map +1 -0
- package/dist/src/operatormessage.js +44 -0
- package/dist/src/operatormessage.js.map +1 -0
- package/dist/src/outcomes.js +1361 -0
- package/dist/src/outcomes.js.map +1 -0
- package/dist/src/piauthcopy.js +5 -0
- package/dist/src/piauthcopy.js.map +1 -0
- package/dist/src/picli.js +45 -0
- package/dist/src/picli.js.map +1 -0
- package/dist/src/picwd.js +25 -0
- package/dist/src/picwd.js.map +1 -0
- package/dist/src/pilogin.js +35 -0
- package/dist/src/pilogin.js.map +1 -0
- package/dist/src/pingpong.js +1028 -0
- package/dist/src/pingpong.js.map +1 -0
- package/dist/src/posting-journal.js +441 -0
- package/dist/src/posting-journal.js.map +1 -0
- package/dist/src/posting-outbox.js +662 -0
- package/dist/src/posting-outbox.js.map +1 -0
- package/dist/src/posting-receipt.js +203 -0
- package/dist/src/posting-receipt.js.map +1 -0
- package/dist/src/posting.js +348 -0
- package/dist/src/posting.js.map +1 -0
- package/dist/src/postops.js +637 -0
- package/dist/src/postops.js.map +1 -0
- package/dist/src/pr-activity.js +11 -0
- package/dist/src/pr-activity.js.map +1 -0
- package/dist/src/pr-author.js +5 -0
- package/dist/src/pr-author.js.map +1 -0
- package/dist/src/pr-conversation.js +355 -0
- package/dist/src/pr-conversation.js.map +1 -0
- package/dist/src/pr-session-lifecycle.js +542 -0
- package/dist/src/pr-session-lifecycle.js.map +1 -0
- package/dist/src/preflight.js +341 -0
- package/dist/src/preflight.js.map +1 -0
- package/dist/src/priorresolve.js +275 -0
- package/dist/src/priorresolve.js.map +1 -0
- package/dist/src/qcrbin.js +180 -0
- package/dist/src/qcrbin.js.map +1 -0
- package/dist/src/recheck.js +1398 -0
- package/dist/src/recheck.js.map +1 -0
- package/dist/src/reconcile.js +820 -0
- package/dist/src/reconcile.js.map +1 -0
- package/dist/src/recordedfindings.js +15 -0
- package/dist/src/recordedfindings.js.map +1 -0
- package/dist/src/regression.js +546 -0
- package/dist/src/regression.js.map +1 -0
- package/dist/src/replay.js +598 -0
- package/dist/src/replay.js.map +1 -0
- package/dist/src/requiredpasses.js +113 -0
- package/dist/src/requiredpasses.js.map +1 -0
- package/dist/src/resumecheck.js +168 -0
- package/dist/src/resumecheck.js.map +1 -0
- package/dist/src/reviewcli.js +671 -0
- package/dist/src/reviewcli.js.map +1 -0
- package/dist/src/reviewcontext.js +22 -0
- package/dist/src/reviewcontext.js.map +1 -0
- package/dist/src/reviewdetach.js +574 -0
- package/dist/src/reviewdetach.js.map +1 -0
- package/dist/src/reviewhistory.js +284 -0
- package/dist/src/reviewhistory.js.map +1 -0
- package/dist/src/reviewhome.js +26 -0
- package/dist/src/reviewhome.js.map +1 -0
- package/dist/src/reviewmemory.js +110 -0
- package/dist/src/reviewmemory.js.map +1 -0
- package/dist/src/reviewrendercli.js +104 -0
- package/dist/src/reviewrendercli.js.map +1 -0
- package/dist/src/round-work.js +20 -0
- package/dist/src/round-work.js.map +1 -0
- package/dist/src/runhost.js +72 -0
- package/dist/src/runhost.js.map +1 -0
- package/dist/src/scanauth.js +25 -0
- package/dist/src/scanauth.js.map +1 -0
- package/dist/src/scanbox.js +846 -0
- package/dist/src/scanbox.js.map +1 -0
- package/dist/src/scancli.js +1074 -0
- package/dist/src/scancli.js.map +1 -0
- package/dist/src/scandriverlog.js +30 -0
- package/dist/src/scandriverlog.js.map +1 -0
- package/dist/src/session-bridge.js +75 -0
- package/dist/src/session-bridge.js.map +1 -0
- package/dist/src/session-command-payload.js +29 -0
- package/dist/src/session-command-payload.js.map +1 -0
- package/dist/src/session-command-supervisor.js +939 -0
- package/dist/src/session-command-supervisor.js.map +1 -0
- package/dist/src/sessionjsonl.js +85 -0
- package/dist/src/sessionjsonl.js.map +1 -0
- package/dist/src/sessions.js +541 -0
- package/dist/src/sessions.js.map +1 -0
- package/dist/src/setup/adapters.js +330 -0
- package/dist/src/setup/adapters.js.map +1 -0
- package/dist/src/setup/baselines.js +64 -0
- package/dist/src/setup/baselines.js.map +1 -0
- package/dist/src/setup/caserunner.js +554 -0
- package/dist/src/setup/caserunner.js.map +1 -0
- package/dist/src/setup/configcommit.js +358 -0
- package/dist/src/setup/configcommit.js.map +1 -0
- package/dist/src/setup/engine.js +672 -0
- package/dist/src/setup/engine.js.map +1 -0
- package/dist/src/setup/facts.js +593 -0
- package/dist/src/setup/facts.js.map +1 -0
- package/dist/src/setup/findings.js +948 -0
- package/dist/src/setup/findings.js.map +1 -0
- package/dist/src/setup/history.js +338 -0
- package/dist/src/setup/history.js.map +1 -0
- package/dist/src/setup/interview.js +185 -0
- package/dist/src/setup/interview.js.map +1 -0
- package/dist/src/setup/ledger.js +207 -0
- package/dist/src/setup/ledger.js.map +1 -0
- package/dist/src/setup/pins.js +43 -0
- package/dist/src/setup/pins.js.map +1 -0
- package/dist/src/setup/portrait.js +432 -0
- package/dist/src/setup/portrait.js.map +1 -0
- package/dist/src/setup/presentation.js +9 -0
- package/dist/src/setup/presentation.js.map +1 -0
- package/dist/src/setup/profile.js +417 -0
- package/dist/src/setup/profile.js.map +1 -0
- package/dist/src/setup/replay.js +240 -0
- package/dist/src/setup/replay.js.map +1 -0
- package/dist/src/setup/replaybuild.js +311 -0
- package/dist/src/setup/replaybuild.js.map +1 -0
- package/dist/src/setup/replayrun.js +806 -0
- package/dist/src/setup/replayrun.js.map +1 -0
- package/dist/src/setup/replaysource.js +169 -0
- package/dist/src/setup/replaysource.js.map +1 -0
- package/dist/src/setup/retune.js +333 -0
- package/dist/src/setup/retune.js.map +1 -0
- package/dist/src/setup/retunelog.js +51 -0
- package/dist/src/setup/retunelog.js.map +1 -0
- package/dist/src/setup/scan.js +725 -0
- package/dist/src/setup/scan.js.map +1 -0
- package/dist/src/setup/scanbuild.js +133 -0
- package/dist/src/setup/scanbuild.js.map +1 -0
- package/dist/src/setup/scanfacts.js +96 -0
- package/dist/src/setup/scanfacts.js.map +1 -0
- package/dist/src/setup/scanlease.js +251 -0
- package/dist/src/setup/scanlease.js.map +1 -0
- package/dist/src/setup/scanreport.js +289 -0
- package/dist/src/setup/scanreport.js.map +1 -0
- package/dist/src/setup/scanrun.js +1733 -0
- package/dist/src/setup/scanrun.js.map +1 -0
- package/dist/src/setup/scantree.js +257 -0
- package/dist/src/setup/scantree.js.map +1 -0
- package/dist/src/setup/stage2.js +617 -0
- package/dist/src/setup/stage2.js.map +1 -0
- package/dist/src/setup/stage2request.js +259 -0
- package/dist/src/setup/stage2request.js.map +1 -0
- package/dist/src/setup/survey.js +307 -0
- package/dist/src/setup/survey.js.map +1 -0
- package/dist/src/setup/surveyrun.js +549 -0
- package/dist/src/setup/surveyrun.js.map +1 -0
- package/dist/src/setup/textsniff.js +89 -0
- package/dist/src/setup/textsniff.js.map +1 -0
- package/dist/src/setup/trackersink.js +395 -0
- package/dist/src/setup/trackersink.js.map +1 -0
- package/dist/src/setup/triage.js +636 -0
- package/dist/src/setup/triage.js.map +1 -0
- package/dist/src/setup/tuning.js +585 -0
- package/dist/src/setup/tuning.js.map +1 -0
- package/dist/src/setup/unitcut.js +437 -0
- package/dist/src/setup/unitcut.js.map +1 -0
- package/dist/src/singleflight.js +72 -0
- package/dist/src/singleflight.js.map +1 -0
- package/dist/src/slack/announce.js +725 -0
- package/dist/src/slack/announce.js.map +1 -0
- package/dist/src/slack/api.js +227 -0
- package/dist/src/slack/api.js.map +1 -0
- package/dist/src/slack/messages.js +158 -0
- package/dist/src/slack/messages.js.map +1 -0
- package/dist/src/slack/origin.js +550 -0
- package/dist/src/slack/origin.js.map +1 -0
- package/dist/src/slack/policy.js +225 -0
- package/dist/src/slack/policy.js.map +1 -0
- package/dist/src/slack/reply.js +153 -0
- package/dist/src/slack/reply.js.map +1 -0
- package/dist/src/slack/router.js +189 -0
- package/dist/src/slack/router.js.map +1 -0
- package/dist/src/slack/socket.js +323 -0
- package/dist/src/slack/socket.js.map +1 -0
- package/dist/src/slack/types.js +11 -0
- package/dist/src/slack/types.js.map +1 -0
- package/dist/src/sqlitehint.js +30 -0
- package/dist/src/sqlitehint.js.map +1 -0
- package/dist/src/ssh-observation.js +25 -0
- package/dist/src/ssh-observation.js.map +1 -0
- package/dist/src/state.js +5869 -0
- package/dist/src/state.js.map +1 -0
- package/dist/src/statemachine.js +220 -0
- package/dist/src/statemachine.js.map +1 -0
- package/dist/src/stubs.js +52 -0
- package/dist/src/stubs.js.map +1 -0
- package/dist/src/takeover.js +506 -0
- package/dist/src/takeover.js.map +1 -0
- package/dist/src/takeoverpi.js +249 -0
- package/dist/src/takeoverpi.js.map +1 -0
- package/dist/src/terminal-failure.js +26 -0
- package/dist/src/terminal-failure.js.map +1 -0
- package/dist/src/thread-resolution-refusal.js +4 -0
- package/dist/src/thread-resolution-refusal.js.map +1 -0
- package/dist/src/tmux.js +126 -0
- package/dist/src/tmux.js.map +1 -0
- package/dist/src/trackerid.js +43 -0
- package/dist/src/trackerid.js.map +1 -0
- package/dist/src/transcriptindex.js +512 -0
- package/dist/src/transcriptindex.js.map +1 -0
- package/dist/src/tui/actions.js +404 -0
- package/dist/src/tui/actions.js.map +1 -0
- package/dist/src/tui/alerts.js +523 -0
- package/dist/src/tui/alerts.js.map +1 -0
- package/dist/src/tui/app.js +1835 -0
- package/dist/src/tui/app.js.map +1 -0
- package/dist/src/tui/archiveops.js +164 -0
- package/dist/src/tui/archiveops.js.map +1 -0
- package/dist/src/tui/autofile.js +191 -0
- package/dist/src/tui/autofile.js.map +1 -0
- package/dist/src/tui/board.js +1143 -0
- package/dist/src/tui/board.js.map +1 -0
- package/dist/src/tui/candidates.js +699 -0
- package/dist/src/tui/candidates.js.map +1 -0
- package/dist/src/tui/cellwidth.js +151 -0
- package/dist/src/tui/cellwidth.js.map +1 -0
- package/dist/src/tui/changelog-store.js +404 -0
- package/dist/src/tui/changelog-store.js.map +1 -0
- package/dist/src/tui/chord.js +26 -0
- package/dist/src/tui/chord.js.map +1 -0
- package/dist/src/tui/clipboard.js +81 -0
- package/dist/src/tui/clipboard.js.map +1 -0
- package/dist/src/tui/cmdbar.js +253 -0
- package/dist/src/tui/cmdbar.js.map +1 -0
- package/dist/src/tui/companion.js +1275 -0
- package/dist/src/tui/companion.js.map +1 -0
- package/dist/src/tui/companionplan.js +200 -0
- package/dist/src/tui/companionplan.js.map +1 -0
- package/dist/src/tui/companiontab.js +61 -0
- package/dist/src/tui/companiontab.js.map +1 -0
- package/dist/src/tui/confighome.js +105 -0
- package/dist/src/tui/confighome.js.map +1 -0
- package/dist/src/tui/connect.js +44 -0
- package/dist/src/tui/connect.js.map +1 -0
- package/dist/src/tui/deploy-ceremony.js +75 -0
- package/dist/src/tui/deploy-ceremony.js.map +1 -0
- package/dist/src/tui/deploy-drain.js +93 -0
- package/dist/src/tui/deploy-drain.js.map +1 -0
- package/dist/src/tui/deploy-process.js +234 -0
- package/dist/src/tui/deploy-process.js.map +1 -0
- package/dist/src/tui/deploytab.js +1263 -0
- package/dist/src/tui/deploytab.js.map +1 -0
- package/dist/src/tui/design.js +111 -0
- package/dist/src/tui/design.js.map +1 -0
- package/dist/src/tui/digesttab.js +148 -0
- package/dist/src/tui/digesttab.js.map +1 -0
- package/dist/src/tui/emptystate.js +32 -0
- package/dist/src/tui/emptystate.js.map +1 -0
- package/dist/src/tui/evidence.js +790 -0
- package/dist/src/tui/evidence.js.map +1 -0
- package/dist/src/tui/feed.js +415 -0
- package/dist/src/tui/feed.js.map +1 -0
- package/dist/src/tui/feedbacktab.js +907 -0
- package/dist/src/tui/feedbacktab.js.map +1 -0
- package/dist/src/tui/filters.js +72 -0
- package/dist/src/tui/filters.js.map +1 -0
- package/dist/src/tui/ghread.js +272 -0
- package/dist/src/tui/ghread.js.map +1 -0
- package/dist/src/tui/historypull.js +61 -0
- package/dist/src/tui/historypull.js.map +1 -0
- package/dist/src/tui/inboxpull.js +197 -0
- package/dist/src/tui/inboxpull.js.map +1 -0
- package/dist/src/tui/index.js +1425 -0
- package/dist/src/tui/index.js.map +1 -0
- package/dist/src/tui/issuesink.js +206 -0
- package/dist/src/tui/issuesink.js.map +1 -0
- package/dist/src/tui/jsonfile.js +32 -0
- package/dist/src/tui/jsonfile.js.map +1 -0
- package/dist/src/tui/keys.js +97 -0
- package/dist/src/tui/keys.js.map +1 -0
- package/dist/src/tui/layout.js +70 -0
- package/dist/src/tui/layout.js.map +1 -0
- package/dist/src/tui/learning.js +469 -0
- package/dist/src/tui/learning.js.map +1 -0
- package/dist/src/tui/lessonswitch.js +103 -0
- package/dist/src/tui/lessonswitch.js.map +1 -0
- package/dist/src/tui/livecontrol.js +167 -0
- package/dist/src/tui/livecontrol.js.map +1 -0
- package/dist/src/tui/memforward.js +310 -0
- package/dist/src/tui/memforward.js.map +1 -0
- package/dist/src/tui/memincident.js +287 -0
- package/dist/src/tui/memincident.js.map +1 -0
- package/dist/src/tui/memory.js +485 -0
- package/dist/src/tui/memory.js.map +1 -0
- package/dist/src/tui/memtab.js +513 -0
- package/dist/src/tui/memtab.js.map +1 -0
- package/dist/src/tui/metricstab.js +979 -0
- package/dist/src/tui/metricstab.js.map +1 -0
- package/dist/src/tui/model.js +104 -0
- package/dist/src/tui/model.js.map +1 -0
- package/dist/src/tui/mouse.js +83 -0
- package/dist/src/tui/mouse.js.map +1 -0
- package/dist/src/tui/msg.js +196 -0
- package/dist/src/tui/msg.js.map +1 -0
- package/dist/src/tui/nativecompanion.js +321 -0
- package/dist/src/tui/nativecompanion.js.map +1 -0
- package/dist/src/tui/openurl.js +17 -0
- package/dist/src/tui/openurl.js.map +1 -0
- package/dist/src/tui/paint.js +501 -0
- package/dist/src/tui/paint.js.map +1 -0
- package/dist/src/tui/panes.js +74 -0
- package/dist/src/tui/panes.js.map +1 -0
- package/dist/src/tui/pipane.js +166 -0
- package/dist/src/tui/pipane.js.map +1 -0
- package/dist/src/tui/poll-hooks.js +11 -0
- package/dist/src/tui/poll-hooks.js.map +1 -0
- package/dist/src/tui/poll.js +113 -0
- package/dist/src/tui/poll.js.map +1 -0
- package/dist/src/tui/proposals.js +715 -0
- package/dist/src/tui/proposals.js.map +1 -0
- package/dist/src/tui/prpause.js +132 -0
- package/dist/src/tui/prpause.js.map +1 -0
- package/dist/src/tui/reload.js +351 -0
- package/dist/src/tui/reload.js.map +1 -0
- package/dist/src/tui/remote.js +312 -0
- package/dist/src/tui/remote.js.map +1 -0
- package/dist/src/tui/rollover.js +767 -0
- package/dist/src/tui/rollover.js.map +1 -0
- package/dist/src/tui/scantab.js +1053 -0
- package/dist/src/tui/scantab.js.map +1 -0
- package/dist/src/tui/setupentry.js +81 -0
- package/dist/src/tui/setupentry.js.map +1 -0
- package/dist/src/tui/sidebar.js +602 -0
- package/dist/src/tui/sidebar.js.map +1 -0
- package/dist/src/tui/sshtriage.js +393 -0
- package/dist/src/tui/sshtriage.js.map +1 -0
- package/dist/src/tui/startup.js +172 -0
- package/dist/src/tui/startup.js.map +1 -0
- package/dist/src/tui/tabs.js +41 -0
- package/dist/src/tui/tabs.js.map +1 -0
- package/dist/src/tui/termmirror.js +217 -0
- package/dist/src/tui/termmirror.js.map +1 -0
- package/dist/src/tui/theme.js +95 -0
- package/dist/src/tui/theme.js.map +1 -0
- package/dist/src/tui/ticketstab.js +224 -0
- package/dist/src/tui/ticketstab.js.map +1 -0
- package/dist/src/tui/tmuxsocket.js +101 -0
- package/dist/src/tui/tmuxsocket.js.map +1 -0
- package/dist/src/tui/trackertickets.js +77 -0
- package/dist/src/tui/trackertickets.js.map +1 -0
- package/dist/src/tui/unwedge.js +245 -0
- package/dist/src/tui/unwedge.js.map +1 -0
- package/dist/src/tui/viewer.js +479 -0
- package/dist/src/tui/viewer.js.map +1 -0
- package/dist/src/tui/viewerinput.js +125 -0
- package/dist/src/tui/viewerinput.js.map +1 -0
- package/dist/src/updatenotice.js +143 -0
- package/dist/src/updatenotice.js.map +1 -0
- package/dist/src/usage.js +1007 -0
- package/dist/src/usage.js.map +1 -0
- package/dist/src/verdicts.js +3848 -0
- package/dist/src/verdicts.js.map +1 -0
- package/dist/src/version.js +58 -0
- package/dist/src/version.js.map +1 -0
- package/dist/src/wakes.js +411 -0
- package/dist/src/wakes.js.map +1 -0
- package/dist/src/webhook.js +725 -0
- package/dist/src/webhook.js.map +1 -0
- package/dist/src/webhookheal.js +238 -0
- package/dist/src/webhookheal.js.map +1 -0
- package/dist/src/wire.js +1801 -0
- package/dist/src/wire.js.map +1 -0
- package/dist/src/worker-session-host.js +531 -0
- package/dist/src/worker-session-host.js.map +1 -0
- package/dist/src/workerbreaker.js +112 -0
- package/dist/src/workerbreaker.js.map +1 -0
- package/dist/src/workercontrol.js +49 -0
- package/dist/src/workercontrol.js.map +1 -0
- package/dist/src/workerlease.js +351 -0
- package/dist/src/workerlease.js.map +1 -0
- package/dist/src/workerliveness.js +84 -0
- package/dist/src/workerliveness.js.map +1 -0
- package/dist/src/workerlog.js +65 -0
- package/dist/src/workerlog.js.map +1 -0
- package/dist/src/workerruntime.js +10 -0
- package/dist/src/workerruntime.js.map +1 -0
- package/dist/src/workersupervisor.js +1206 -0
- package/dist/src/workersupervisor.js.map +1 -0
- package/dist/src/workerusage.js +23 -0
- package/dist/src/workerusage.js.map +1 -0
- package/dist/src/workerworld.js +332 -0
- package/dist/src/workerworld.js.map +1 -0
- package/dist/src/worktrees.js +984 -0
- package/dist/src/worktrees.js.map +1 -0
- package/docker/Dockerfile +284 -0
- package/docker/Dockerfile.dockerignore +35 -0
- package/docker/README.md +221 -0
- package/docker/companion/Dockerfile +139 -0
- package/docker/companion/agents/evidence.md +34 -0
- package/docker/companion/agents/explore.md +26 -0
- package/docker/companion/agents/pass-survey.md +49 -0
- package/docker/companion/agents/study.md +26 -0
- package/docker/companion/entrypoint.sh +343 -0
- package/docker/companion/memory-health.mjs +269 -0
- package/docker/entrypoint.sh +782 -0
- package/docker/memory/Dockerfile +191 -0
- package/docker/memory/Dockerfile.dockerignore +20 -0
- package/docker/memory/README.md +60 -0
- package/docker/memory/entrypoint.sh +163 -0
- package/docker/setid/qcr-setid.c +109 -0
- package/docker/tunnel/Dockerfile.cloudflared +51 -0
- package/docker/tunnel/Dockerfile.ngrok +40 -0
- package/docker/tunnel/sidecar.mjs +411 -0
- package/docker/vm/tmux.conf +26 -0
- package/docker-compose.yml +348 -0
- package/extensions/cli/bash-guard-ambient.ts +71 -0
- package/extensions/cli/bash-guard.ts +12 -0
- package/extensions/cli/companion-guard.ts +8 -0
- package/extensions/cli/debug-round.ts +9 -0
- package/extensions/cli/inject-bridge.ts +8 -0
- package/extensions/cli/ledger-pin.ts +13 -0
- package/extensions/cli/lens.ts +22 -0
- package/extensions/cli/muted-theme.ts +9 -0
- package/extensions/cli/onboarding.ts +8 -0
- package/extensions/cli/setup.ts +8 -0
- package/extensions/cli/tui-view.ts +8 -0
- package/extensions/companion-guard.ts +411 -0
- package/extensions/debug-round.ts +281 -0
- package/extensions/inject-bridge.ts +630 -0
- package/extensions/inline-bash.ts +102 -0
- package/extensions/muted-theme.json +68 -0
- package/extensions/muted-theme.ts +23 -0
- package/extensions/onboarding.ts +233 -0
- package/extensions/setup-replay.ts +336 -0
- package/extensions/setup-scan.ts +1236 -0
- package/extensions/setup-triage.ts +190 -0
- package/extensions/setup.ts +1428 -0
- package/extensions/tui-view.ts +489 -0
- package/extensions/vendor/openviking-pi/LICENSE +201 -0
- package/extensions/vendor/openviking-pi/NOTICE +68 -0
- package/extensions/vendor/openviking-pi/README.md +550 -0
- package/extensions/vendor/openviking-pi/client.ts +588 -0
- package/extensions/vendor/openviking-pi/config.json +28 -0
- package/extensions/vendor/openviking-pi/config.ts +271 -0
- package/extensions/vendor/openviking-pi/index.ts +523 -0
- package/extensions/vendor/openviking-pi/lib/capture-adapter.d.mts +10 -0
- package/extensions/vendor/openviking-pi/lib/capture-adapter.mjs +88 -0
- package/extensions/vendor/openviking-pi/lib/takeover-core.d.mts +80 -0
- package/extensions/vendor/openviking-pi/lib/takeover-core.mjs +406 -0
- package/extensions/vendor/openviking-pi/lib/uri-guard-adapter.d.mts +1 -0
- package/extensions/vendor/openviking-pi/lib/uri-guard-adapter.mjs +42 -0
- package/extensions/vendor/openviking-pi/patches/0000-vendoring-and-build-conformance.patch +726 -0
- package/extensions/vendor/openviking-pi/patches/0001-remove-session-before-compact-handler.patch +101 -0
- package/extensions/vendor/openviking-pi/patches/0002-no-ambient-work-in-subagent-leaves.patch +202 -0
- package/extensions/vendor/openviking-pi/patches/0003-never-auto-create-openviking-sessions.patch +120 -0
- package/extensions/vendor/openviking-pi/patches/0004-viking-write-durable-batch-write.patch +521 -0
- package/extensions/vendor/openviking-pi/patches/0005-second-memory-namespace.patch +786 -0
- package/extensions/vendor/openviking-pi/patches/0006-writes-that-stick-and-honest-errors.patch +996 -0
- package/extensions/vendor/openviking-pi/patches/0007-bounded-recall-no-commit.patch +794 -0
- package/extensions/vendor/openviking-pi/patches/0008-pr-derived-recall.patch +379 -0
- package/extensions/vendor/openviking-pi/patches/0009-pr-session-tools-in-round-areas.patch +375 -0
- package/extensions/vendor/openviking-pi/patches/0010-typed-lessons.patch +448 -0
- package/extensions/vendor/openviking-pi/patches/0011-review-session-memory-boundary.patch +382 -0
- package/extensions/vendor/openviking-pi/patches/0012-typecheck-against-the-real-pi.patch +129 -0
- package/extensions/vendor/openviking-pi/patches/0013-createopenviking-factory.patch +1168 -0
- package/extensions/vendor/openviking-pi/qcr-hint.ts +313 -0
- package/extensions/vendor/openviking-pi/qcr-honest.ts +183 -0
- package/extensions/vendor/openviking-pi/qcr-hooks.ts +87 -0
- package/extensions/vendor/openviking-pi/qcr-leaf.ts +78 -0
- package/extensions/vendor/openviking-pi/qcr-lesson.ts +231 -0
- package/extensions/vendor/openviking-pi/qcr-namespaces.ts +198 -0
- package/extensions/vendor/openviking-pi/qcr-recall.ts +288 -0
- package/extensions/vendor/openviking-pi/qcr-shim.ts +142 -0
- package/extensions/vendor/openviking-pi/qcr-write.ts +427 -0
- package/extensions/vendor/openviking-pi/recall.ts +149 -0
- package/extensions/vendor/openviking-pi/shared/capture-utils.d.mts +9 -0
- package/extensions/vendor/openviking-pi/shared/capture-utils.mjs +515 -0
- package/extensions/vendor/openviking-pi/shared/credentials.d.mts +14 -0
- package/extensions/vendor/openviking-pi/shared/credentials.mjs +228 -0
- package/extensions/vendor/openviking-pi/shared/pending-queue.d.mts +19 -0
- package/extensions/vendor/openviking-pi/shared/pending-queue.mjs +458 -0
- package/extensions/vendor/openviking-pi/shared/profile-inject.d.mts +17 -0
- package/extensions/vendor/openviking-pi/shared/profile-inject.mjs +294 -0
- package/extensions/vendor/openviking-pi/shared/recall-compress-core.mjs +195 -0
- package/extensions/vendor/openviking-pi/shared/recall-core.d.mts +13 -0
- package/extensions/vendor/openviking-pi/shared/recall-core.mjs +609 -0
- package/extensions/vendor/openviking-pi/shared/retryable.mjs +9 -0
- package/extensions/vendor/openviking-pi/shared/session-model.d.mts +3 -0
- package/extensions/vendor/openviking-pi/shared/session-model.mjs +57 -0
- package/extensions/vendor/openviking-pi/shared/uri-guard.mjs +56 -0
- package/extensions/vendor/openviking-pi/shared/workspace-peer.d.mts +5 -0
- package/extensions/vendor/openviking-pi/shared/workspace-peer.mjs +16 -0
- package/extensions/vendor/openviking-pi/sync.ts +163 -0
- package/extensions/vendor/openviking-pi/takeover.ts +36 -0
- package/extensions/vendor/openviking-pi/tools.ts +479 -0
- package/extensions/vendor/openviking-pi/upstream.json +48 -0
- package/package.json +138 -4
- package/profiles/default/README.md +21 -0
- package/profiles/default/addenda/.gitkeep +0 -0
- package/profiles/default/profile.toml +17 -0
- package/profiles/example-django/README.md +21 -0
- package/profiles/example-django/addenda/10-migration-discipline.md +13 -0
- package/profiles/example-django/addenda/20-new-column-nullability.md +12 -0
- package/profiles/example-django/addenda/30-test-doctrine.md +12 -0
- package/profiles/example-django/addenda/40-orm-usage.md +19 -0
- package/profiles/example-django/addenda/50-declared-shape.md +10 -0
- package/profiles/example-django/addenda/60-config-placement.md +14 -0
- package/profiles/example-django/heuristics.toml +24 -0
- package/profiles/example-django/profile.toml +9 -0
- package/profiles/fast/README.md +24 -0
- package/profiles/fast/profile.toml +59 -0
- package/profiles/minimal/README.md +17 -0
- package/profiles/minimal/addenda/.gitkeep +0 -0
- package/profiles/minimal/profile.toml +8 -0
- package/profiles/snappy/README.md +24 -0
- package/profiles/snappy/addenda/10-race-as-question.md +6 -0
- package/profiles/snappy/profile.toml +46 -0
- package/prompts/companion-day-open.md +46 -0
- package/prompts/companion-first-run.md +104 -0
- package/prompts/companion.md +821 -0
- package/prompts/conversation-system.md +117 -0
- package/prompts/eod-sweep.md +120 -0
- package/prompts/onboarding.md +74 -0
- package/prompts/pass-common.md +52 -0
- package/prompts/pass-quality-common.md +22 -0
- package/prompts/round-first.md +874 -0
- package/prompts/round-follow-up.md +991 -0
- package/prompts/round-re-review.md +889 -0
- package/prompts/round-recheck.md +196 -0
- package/prompts/round-staleness.md +856 -0
- package/schemas/review-result.v1.json +391 -0
- package/schemas/scan-result.v1.json +421 -0
- package/schemas/version.v1.json +57 -0
- package/scripts/approve-pr.sh +16 -0
- package/scripts/build-stamp.mjs +67 -0
- package/scripts/commit-verdict.sh +155 -0
- package/scripts/companion-e2e.sh +250 -0
- package/scripts/companion-memory-forward.mjs +1966 -0
- package/scripts/config-fingerprint.sh +28 -0
- package/scripts/deploy-manifest.mjs +141 -0
- package/scripts/deploy.sh +1435 -0
- package/scripts/directory-lock.mjs +193 -0
- package/scripts/heartbeat-fresh.mjs +54 -0
- package/scripts/install-locator.sh +328 -0
- package/scripts/install-wrapper.sh +76 -0
- package/scripts/memory-search-check.mjs +98 -0
- package/scripts/mint-token.sh +212 -0
- package/scripts/openviking-embedder.py +392 -0
- package/scripts/openviking-ov-conf.mjs +161 -0
- package/scripts/openviking-provision.mjs +1122 -0
- package/scripts/openviking-reembed.mjs +1154 -0
- package/scripts/post-review.sh +16 -0
- package/scripts/pr-checks.sh +256 -0
- package/scripts/pr-context.py +174 -0
- package/scripts/pr-context.sh +63 -0
- package/scripts/pr-self.sh +144 -0
- package/scripts/pr-threads.sh +145 -0
- package/scripts/qcr +15 -0
- package/scripts/qcr-host.sh +769 -0
- package/scripts/render-review.sh +24 -0
- package/scripts/reply-thread.sh +16 -0
- package/scripts/required-passes.py +112 -0
- package/scripts/smoke-companion.sh +211 -0
- package/scripts/tui-deploy-runner.mjs +61 -0
- package/scripts/verify-dist.mjs +201 -0
- package/scripts/vm-ghcr-login.sh +188 -0
- package/seeds/agents/pass-baseline.md +61 -0
- package/seeds/agents/pass-contracts.md +30 -0
- package/seeds/agents/pass-data-safety.md +54 -0
- package/seeds/agents/pass-delivery.md +37 -0
- package/seeds/agents/pass-prod-risk.md +24 -0
- package/seeds/agents/pass-security.md +31 -0
- package/seeds/agents/pass-statelessness.md +27 -0
- package/seeds/agents/pass-ui.md +23 -0
- package/seeds/agents/pass-validate.md +50 -0
- package/seeds/prompts/conversation-system.md +117 -0
- package/seeds/prompts/eod-sweep.md +120 -0
- package/seeds/prompts/pass-common.md +52 -0
- package/skills/companion/adjudicate/SKILL.md +247 -0
- package/skills/companion/evidence/SKILL.md +150 -0
- package/skills/companion/land/SKILL.md +200 -0
- package/skills/companion/replay/SKILL.md +138 -0
- package/skills/companion/setup/SKILL.md +167 -0
- package/skills/companion/survey/SKILL.md +160 -0
- package/skills/selfimprove/README.md +34 -0
- package/skills/selfimprove/SKILL.md +127 -0
- package/skills/selfimprove/agents/openai.yaml +2 -0
- package/skills/selfimprove/commands/selfimprove.md +6 -0
- package/skills/selfimprove/references/fix-loop.md +49 -0
- package/skills/selfimprove/references/ledger.md +20 -0
- package/skills/selfimprove/references/setup.md +40 -0
- package/src/anomalies.ts +566 -0
- package/src/answerworker.ts +251 -0
- package/src/appstamp.ts +65 -0
- package/src/archive/admission.ts +3 -0
- package/src/archive/archivedb.ts +548 -0
- package/src/archive/archiver.ts +1963 -0
- package/src/archive/archivewrite.ts +279 -0
- package/src/archive/bundle.ts +333 -0
- package/src/archive/dbmove.ts +911 -0
- package/src/archive/duplicatecounts.ts +98 -0
- package/src/archive/eligibility.ts +181 -0
- package/src/archive/extract.ts +342 -0
- package/src/archive/fsutil.ts +415 -0
- package/src/archive/gzfile.ts +370 -0
- package/src/archive/kinds.ts +21 -0
- package/src/archive/livecheckpoint.ts +217 -0
- package/src/archive/liveretention.ts +180 -0
- package/src/archive/manifest.ts +519 -0
- package/src/archive/overseer.ts +336 -0
- package/src/archive/piglobal.ts +174 -0
- package/src/archive/plan.ts +612 -0
- package/src/archive/prarchive.ts +984 -0
- package/src/archive/prfiles.ts +406 -0
- package/src/archive/report.ts +252 -0
- package/src/archive/restore.ts +330 -0
- package/src/archive/rows.ts +187 -0
- package/src/archive/seal.ts +630 -0
- package/src/archive/status.ts +719 -0
- package/src/archive/storepass.ts +581 -0
- package/src/backfill.ts +362 -0
- package/src/bench/cost.ts +113 -0
- package/src/bench/exec.ts +90 -0
- package/src/bench/values.ts +13 -0
- package/src/botcontrol.ts +176 -0
- package/src/botworker.ts +953 -0
- package/src/capture.ts +321 -0
- package/src/cases.ts +1789 -0
- package/src/channelfs.ts +26 -0
- package/src/checklist.ts +506 -0
- package/src/ciretry.ts +141 -0
- package/src/cli.ts +2271 -0
- package/src/cliops.ts +384 -0
- package/src/clonedir.ts +15 -0
- package/src/commandeffects.ts +57 -0
- package/src/commands.ts +1678 -0
- package/src/companioninbox.ts +239 -0
- package/src/compare.ts +957 -0
- package/src/config.ts +2050 -0
- package/src/configcheck.ts +133 -0
- package/src/coreext.ts +47 -0
- package/src/daemon.ts +1302 -0
- package/src/debuground.ts +927 -0
- package/src/debugroundpi.ts +262 -0
- package/src/diagnostics.ts +14 -0
- package/src/digest.ts +183 -0
- package/src/dispatch.ts +2250 -0
- package/src/engine/answerguard.ts +27 -0
- package/src/engine/botsdk.ts +336 -0
- package/src/engine/caserunner-sdk.ts +423 -0
- package/src/engine/debugpi.ts +235 -0
- package/src/eod.ts +669 -0
- package/src/eodpinwatch.ts +556 -0
- package/src/escalation.ts +1253 -0
- package/src/eventloop.ts +1045 -0
- package/src/execboundary.ts +633 -0
- package/src/feedback.ts +1162 -0
- package/src/findingscheck.ts +298 -0
- package/src/fsdenied.ts +24 -0
- package/src/ghread.ts +242 -0
- package/src/github.ts +1497 -0
- package/src/homes.ts +175 -0
- package/src/hostroute.ts +53 -0
- package/src/improvements.ts +787 -0
- package/src/install.ts +1103 -0
- package/src/installkind.ts +50 -0
- package/src/ipc/capability.ts +333 -0
- package/src/ipc/client.ts +269 -0
- package/src/ipc/control.ts +90 -0
- package/src/ipc/ghreadshim.ts +94 -0
- package/src/ipc/launcher.ts +65 -0
- package/src/ipc/permits.ts +362 -0
- package/src/ipc/postshim.ts +164 -0
- package/src/ipc/protocol.ts +342 -0
- package/src/ipc/server.ts +371 -0
- package/src/ipc/workerspec.ts +218 -0
- package/src/learner/learner.ts +1655 -0
- package/src/learner/miner.ts +1290 -0
- package/src/learner/packet.ts +340 -0
- package/src/learner/receipt.ts +168 -0
- package/src/learner/status.ts +107 -0
- package/src/ledgercheck.ts +157 -0
- package/src/lessonledger.ts +703 -0
- package/src/lessonselect.ts +888 -0
- package/src/lessonshadow.ts +810 -0
- package/src/levers.ts +393 -0
- package/src/live/projection.ts +491 -0
- package/src/live/publish.ts +92 -0
- package/src/live/read.ts +86 -0
- package/src/livecli.ts +336 -0
- package/src/loginhint.ts +56 -0
- package/src/loginrefresh/atomic.ts +76 -0
- package/src/loginrefresh/lock.ts +104 -0
- package/src/loginrefresh/main.ts +59 -0
- package/src/loginrefresh/pirefresh.ts +57 -0
- package/src/loginrefresh/refresher.ts +326 -0
- package/src/loginrefresh/supervisor.ts +273 -0
- package/src/loginrefresh/types.ts +35 -0
- package/src/memory/context.ts +385 -0
- package/src/memory/datafence.ts +9 -0
- package/src/memory/delivery.ts +171 -0
- package/src/memory/eventtags.ts +80 -0
- package/src/memory/health.ts +953 -0
- package/src/memory/import.ts +664 -0
- package/src/memory/layout.ts +261 -0
- package/src/memory/legacy-file.ts +104 -0
- package/src/memory/lessons.ts +447 -0
- package/src/memory/ovsession.ts +601 -0
- package/src/memory/relayout.ts +335 -0
- package/src/memory/roundactivity.ts +209 -0
- package/src/memory/selection.ts +989 -0
- package/src/memory/shadowstatus.ts +125 -0
- package/src/memory/store.ts +275 -0
- package/src/memory/textidentity.ts +8 -0
- package/src/metrics.ts +1056 -0
- package/src/missingconfig.ts +7 -0
- package/src/npmverbs.ts +264 -0
- package/src/onboard/choices.ts +222 -0
- package/src/onboard/engine.ts +518 -0
- package/src/onboard/launch.ts +115 -0
- package/src/onboard/steps/appslug.ts +265 -0
- package/src/onboard/steps/bringup.ts +482 -0
- package/src/onboard/steps/compose.ts +459 -0
- package/src/onboard/steps/configdelivery.ts +58 -0
- package/src/onboard/steps/configfill.ts +1352 -0
- package/src/onboard/steps/deploysh.ts +105 -0
- package/src/onboard/steps/embeddings.ts +550 -0
- package/src/onboard/steps/escalation.ts +640 -0
- package/src/onboard/steps/githubapp.ts +1414 -0
- package/src/onboard/steps/golive.ts +577 -0
- package/src/onboard/steps/index.ts +71 -0
- package/src/onboard/steps/ingress.ts +907 -0
- package/src/onboard/steps/inventory.ts +526 -0
- package/src/onboard/steps/llmauth.ts +1095 -0
- package/src/onboard/steps/memory.ts +1290 -0
- package/src/onboard/steps/memorykeys.ts +85 -0
- package/src/onboard/steps/preflight.ts +191 -0
- package/src/onboard/steps/proof.ts +624 -0
- package/src/onboard/steps/ssh.ts +377 -0
- package/src/onboard/steps/topology.ts +337 -0
- package/src/onboard/steps/transport.ts +665 -0
- package/src/onboard/steps/verifyup.ts +448 -0
- package/src/onboard/steps/vmdeploy.ts +442 -0
- package/src/onboard/toml.ts +50 -0
- package/src/opencli.ts +591 -0
- package/src/openpr.ts +568 -0
- package/src/openviking/client.ts +1131 -0
- package/src/openviking/context.ts +263 -0
- package/src/openviking/embedder.ts +516 -0
- package/src/openviking/gapsink.ts +63 -0
- package/src/openviking/health.ts +83 -0
- package/src/openviking/index.ts +119 -0
- package/src/openviking/lessonfind.ts +92 -0
- package/src/openviking/probe.ts +129 -0
- package/src/openviking/proc.ts +110 -0
- package/src/openviking/provisionreport.ts +160 -0
- package/src/openviking/reembed.ts +412 -0
- package/src/openviking/relayout.ts +177 -0
- package/src/openviking/sidecar-main.ts +38 -0
- package/src/openviking/sidecar.ts +106 -0
- package/src/openviking/store.ts +2025 -0
- package/src/openviking/supervisor.ts +474 -0
- package/src/openviking/types.ts +174 -0
- package/src/operator-recovery.ts +237 -0
- package/src/operatormessage.ts +52 -0
- package/src/outcomes.ts +1670 -0
- package/src/piauthcopy.ts +12 -0
- package/src/picli.ts +49 -0
- package/src/picwd.ts +25 -0
- package/src/pilogin.ts +37 -0
- package/src/pingpong.ts +1339 -0
- package/src/posting-journal.ts +549 -0
- package/src/posting-outbox.ts +802 -0
- package/src/posting-receipt.ts +324 -0
- package/src/posting.ts +603 -0
- package/src/postops.ts +832 -0
- package/src/pr-activity.ts +20 -0
- package/src/pr-author.ts +6 -0
- package/src/pr-conversation.ts +432 -0
- package/src/pr-session-lifecycle.ts +631 -0
- package/src/preflight.ts +391 -0
- package/src/priorresolve.ts +343 -0
- package/src/qcrbin.ts +186 -0
- package/src/recheck.ts +1775 -0
- package/src/reconcile.ts +1030 -0
- package/src/recordedfindings.ts +27 -0
- package/src/regression.ts +833 -0
- package/src/replay.ts +816 -0
- package/src/requiredpasses.ts +148 -0
- package/src/resumecheck.ts +246 -0
- package/src/reviewcli.ts +787 -0
- package/src/reviewcontext.ts +35 -0
- package/src/reviewdetach.ts +734 -0
- package/src/reviewhistory.ts +427 -0
- package/src/reviewhome.ts +36 -0
- package/src/reviewmemory.ts +133 -0
- package/src/reviewrendercli.ts +139 -0
- package/src/round-work.ts +42 -0
- package/src/runhost.ts +108 -0
- package/src/scanauth.ts +36 -0
- package/src/scanbox.ts +1081 -0
- package/src/scancli.ts +1296 -0
- package/src/scandriverlog.ts +32 -0
- package/src/session-bridge.ts +139 -0
- package/src/session-command-payload.ts +35 -0
- package/src/session-command-supervisor.ts +1142 -0
- package/src/sessionjsonl.ts +88 -0
- package/src/sessions.ts +659 -0
- package/src/setup/adapters.ts +335 -0
- package/src/setup/baselines.ts +110 -0
- package/src/setup/caserunner.ts +611 -0
- package/src/setup/configcommit.ts +443 -0
- package/src/setup/engine.ts +1001 -0
- package/src/setup/facts.ts +627 -0
- package/src/setup/findings.ts +1264 -0
- package/src/setup/history.ts +443 -0
- package/src/setup/interview.ts +243 -0
- package/src/setup/ledger.ts +324 -0
- package/src/setup/pins.ts +66 -0
- package/src/setup/portrait.ts +635 -0
- package/src/setup/presentation.ts +18 -0
- package/src/setup/profile.ts +508 -0
- package/src/setup/replay.ts +370 -0
- package/src/setup/replaybuild.ts +392 -0
- package/src/setup/replayrun.ts +1096 -0
- package/src/setup/replaysource.ts +198 -0
- package/src/setup/retune.ts +415 -0
- package/src/setup/retunelog.ts +95 -0
- package/src/setup/scan.ts +1033 -0
- package/src/setup/scanbuild.ts +168 -0
- package/src/setup/scanfacts.ts +107 -0
- package/src/setup/scanlease.ts +297 -0
- package/src/setup/scanreport.ts +373 -0
- package/src/setup/scanrun.ts +2268 -0
- package/src/setup/scantree.ts +259 -0
- package/src/setup/stage2.ts +926 -0
- package/src/setup/stage2request.ts +347 -0
- package/src/setup/survey.ts +458 -0
- package/src/setup/surveyrun.ts +758 -0
- package/src/setup/textsniff.ts +95 -0
- package/src/setup/trackersink.ts +433 -0
- package/src/setup/triage.ts +768 -0
- package/src/setup/tuning.ts +766 -0
- package/src/setup/unitcut.ts +523 -0
- package/src/singleflight.ts +86 -0
- package/src/slack/announce.ts +911 -0
- package/src/slack/api.ts +303 -0
- package/src/slack/messages.ts +288 -0
- package/src/slack/origin.ts +599 -0
- package/src/slack/policy.ts +354 -0
- package/src/slack/reply.ts +201 -0
- package/src/slack/router.ts +285 -0
- package/src/slack/socket.ts +384 -0
- package/src/slack/types.ts +108 -0
- package/src/sqlitehint.ts +32 -0
- package/src/ssh-observation.ts +30 -0
- package/src/state.ts +8243 -0
- package/src/statemachine.ts +369 -0
- package/src/stubs.ts +68 -0
- package/src/takeover.ts +634 -0
- package/src/takeoverpi.ts +293 -0
- package/src/terminal-failure.ts +41 -0
- package/src/thread-resolution-refusal.ts +2 -0
- package/src/tmux.ts +153 -0
- package/src/trackerid.ts +41 -0
- package/src/transcriptindex.ts +665 -0
- package/src/tui/actions.ts +484 -0
- package/src/tui/alerts.ts +666 -0
- package/src/tui/app.ts +1979 -0
- package/src/tui/archiveops.ts +192 -0
- package/src/tui/autofile.ts +233 -0
- package/src/tui/board.ts +1432 -0
- package/src/tui/candidates.ts +889 -0
- package/src/tui/cellwidth.ts +148 -0
- package/src/tui/changelog-store.ts +503 -0
- package/src/tui/chord.ts +25 -0
- package/src/tui/clipboard.ts +92 -0
- package/src/tui/cmdbar.ts +296 -0
- package/src/tui/companion.ts +1427 -0
- package/src/tui/companionplan.ts +247 -0
- package/src/tui/companiontab.ts +83 -0
- package/src/tui/confighome.ts +155 -0
- package/src/tui/connect.ts +68 -0
- package/src/tui/deploy-ceremony.ts +104 -0
- package/src/tui/deploy-drain.ts +129 -0
- package/src/tui/deploy-process.ts +265 -0
- package/src/tui/deploytab.ts +1523 -0
- package/src/tui/design.ts +125 -0
- package/src/tui/digesttab.ts +214 -0
- package/src/tui/emptystate.ts +39 -0
- package/src/tui/evidence.ts +999 -0
- package/src/tui/feed.ts +604 -0
- package/src/tui/feedbacktab.ts +1077 -0
- package/src/tui/filters.ts +90 -0
- package/src/tui/ghread.ts +321 -0
- package/src/tui/historypull.ts +81 -0
- package/src/tui/inboxpull.ts +236 -0
- package/src/tui/index.ts +1565 -0
- package/src/tui/issuesink.ts +238 -0
- package/src/tui/jsonfile.ts +42 -0
- package/src/tui/keys.ts +109 -0
- package/src/tui/layout.ts +108 -0
- package/src/tui/learning.ts +627 -0
- package/src/tui/lessonswitch.ts +118 -0
- package/src/tui/livecontrol.ts +228 -0
- package/src/tui/memforward.ts +443 -0
- package/src/tui/memincident.ts +363 -0
- package/src/tui/memory.ts +620 -0
- package/src/tui/memtab.ts +606 -0
- package/src/tui/metricstab.ts +1177 -0
- package/src/tui/model.ts +131 -0
- package/src/tui/mouse.ts +98 -0
- package/src/tui/msg.ts +268 -0
- package/src/tui/nativecompanion.ts +417 -0
- package/src/tui/openurl.ts +21 -0
- package/src/tui/paint.ts +511 -0
- package/src/tui/panes.ts +98 -0
- package/src/tui/pipane.ts +219 -0
- package/src/tui/poll-hooks.ts +12 -0
- package/src/tui/poll.ts +147 -0
- package/src/tui/proposals.ts +838 -0
- package/src/tui/prpause.ts +150 -0
- package/src/tui/reload.ts +436 -0
- package/src/tui/remote.ts +413 -0
- package/src/tui/rollover.ts +969 -0
- package/src/tui/scantab.ts +1290 -0
- package/src/tui/setupentry.ts +93 -0
- package/src/tui/sidebar.ts +749 -0
- package/src/tui/sshtriage.ts +510 -0
- package/src/tui/startup.ts +231 -0
- package/src/tui/tabs.ts +45 -0
- package/src/tui/termmirror.ts +224 -0
- package/src/tui/theme.ts +95 -0
- package/src/tui/ticketstab.ts +310 -0
- package/src/tui/tmuxsocket.ts +129 -0
- package/src/tui/trackertickets.ts +84 -0
- package/src/tui/unwedge.ts +286 -0
- package/src/tui/viewer.ts +575 -0
- package/src/tui/viewerinput.ts +173 -0
- package/src/updatenotice.ts +178 -0
- package/src/usage.ts +1154 -0
- package/src/verdicts.ts +4689 -0
- package/src/version.ts +80 -0
- package/src/wakes.ts +476 -0
- package/src/webhook.ts +942 -0
- package/src/webhookheal.ts +276 -0
- package/src/wire.ts +2153 -0
- package/src/worker-session-host.ts +602 -0
- package/src/workerbreaker.ts +156 -0
- package/src/workercontrol.ts +104 -0
- package/src/workerlease.ts +441 -0
- package/src/workerliveness.ts +103 -0
- package/src/workerlog.ts +79 -0
- package/src/workerruntime.ts +30 -0
- package/src/workersupervisor.ts +1538 -0
- package/src/workerusage.ts +42 -0
- package/src/workerworld.ts +427 -0
- package/src/worktrees.ts +1138 -0
- package/tests/fixtures/regression-cases.json +795 -0
- package/tests/fixtures/seed-manifest.json +19 -0
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# vm-ghcr-login.sh — log the review VM in to ghcr.io, so it can pull the
|
|
3
|
+
# release images. Run by the owner, on the controller. Idempotent: running it
|
|
4
|
+
# again replaces the login and the recorded expiry.
|
|
5
|
+
#
|
|
6
|
+
# The credential is a CLASSIC personal access token, scoped read:packages and
|
|
7
|
+
# nothing else (the one carve-out from the App-only credential rule, for the
|
|
8
|
+
# VM's registry pull login). This script
|
|
9
|
+
#
|
|
10
|
+
# 1. reads the token from stdin, or from a 0600 file (--token-file). Never
|
|
11
|
+
# from argv or the environment, and it never puts it in either: GitHub's
|
|
12
|
+
# API gets it as a curl config on stdin, the VM gets it on ssh's stdin;
|
|
13
|
+
# 2. asks api.github.com who the token is, and REFUSES it unless the
|
|
14
|
+
# X-OAuth-Scopes header is exactly `read:packages` (a fine-grained token
|
|
15
|
+
# sends no such header, so it is refused too) and the token carries an
|
|
16
|
+
# expiry (GitHub-Authentication-Token-Expiration);
|
|
17
|
+
# 3. runs `ssh <vm> sudo docker login ghcr.io -u <login> --password-stdin`,
|
|
18
|
+
# which stores the login in root's docker config on the VM host and
|
|
19
|
+
# nowhere else — never in a container, env, argv or secrets/;
|
|
20
|
+
# 4. checks the login with `docker manifest inspect` of the named published
|
|
21
|
+
# version of both release images;
|
|
22
|
+
# 5. only then records the expiry (one ISO UTC line, no secret) under the
|
|
23
|
+
# install's state home, where `deploy.sh verify` warns 14 days before it.
|
|
24
|
+
#
|
|
25
|
+
# Usage:
|
|
26
|
+
# scripts/vm-ghcr-login.sh --version X.Y.Z [--vm HOST] [--login USER] [--token-file FILE]
|
|
27
|
+
# pbpaste | scripts/vm-ghcr-login.sh --version X.Y.Z # token on stdin
|
|
28
|
+
#
|
|
29
|
+
# --version a published release version; both images must exist at it
|
|
30
|
+
# --vm ssh target (default: $QC_VM_HOST, else the inventory's first host)
|
|
31
|
+
# --login the GitHub login to store (default: the token's own; if given
|
|
32
|
+
# it must be the token's)
|
|
33
|
+
# --token-file a regular 0600 file holding the token (left in place)
|
|
34
|
+
#
|
|
35
|
+
# Env:
|
|
36
|
+
# QC_VM_HOST, QC_INVENTORY as for deploy.sh
|
|
37
|
+
# QC_RELEASE_IMAGE, QC_RELEASE_MEMORY_IMAGE
|
|
38
|
+
# the image names (default: the group_vars' ghcr.io/quickchatai pair)
|
|
39
|
+
# QC_GITHUB_API the API base (default https://api.github.com)
|
|
40
|
+
# QC_NOW_EPOCH the clock, for tests
|
|
41
|
+
# QCR_GHCR_EXPIRY_FILE where the expiry is recorded (default: <state home>/ghcr-token-expiry)
|
|
42
|
+
|
|
43
|
+
set -euo pipefail
|
|
44
|
+
set +x
|
|
45
|
+
|
|
46
|
+
SELF="$(basename "${BASH_SOURCE[0]}")"
|
|
47
|
+
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
48
|
+
. "$(dirname "${BASH_SOURCE[0]}")/install-locator.sh"
|
|
49
|
+
|
|
50
|
+
RELEASE_VERSION_RE='^[0-9]+\.[0-9]+\.[0-9]+(-[0-9A-Za-z.]+)?$'
|
|
51
|
+
GITHUB_LOGIN_RE='^[A-Za-z0-9]([A-Za-z0-9-]{0,38})$'
|
|
52
|
+
DAEMON_IMAGE="${QC_RELEASE_IMAGE:-ghcr.io/quickchatai/quickreview}"
|
|
53
|
+
MEMORY_IMAGE="${QC_RELEASE_MEMORY_IMAGE:-ghcr.io/quickchatai/quickreview-memory}"
|
|
54
|
+
API="${QC_GITHUB_API:-https://api.github.com}"
|
|
55
|
+
|
|
56
|
+
die() { echo "$SELF: $*" >&2; exit 1; }
|
|
57
|
+
note() { echo "$SELF: $*" >&2; }
|
|
58
|
+
|
|
59
|
+
VERSION=""
|
|
60
|
+
VM=""
|
|
61
|
+
LOGIN=""
|
|
62
|
+
TOKEN_FILE=""
|
|
63
|
+
|
|
64
|
+
while [[ $# -gt 0 ]]; do
|
|
65
|
+
case "$1" in
|
|
66
|
+
--version) [[ $# -ge 2 ]] || die "--version needs a value"; VERSION="$2"; shift ;;
|
|
67
|
+
--vm) [[ $# -ge 2 ]] || die "--vm needs a value"; VM="$2"; shift ;;
|
|
68
|
+
--login) [[ $# -ge 2 ]] || die "--login needs a value"; LOGIN="$2"; shift ;;
|
|
69
|
+
--token-file) [[ $# -ge 2 ]] || die "--token-file needs a path"; TOKEN_FILE="$2"; shift ;;
|
|
70
|
+
-h|--help) sed -n '2,/^$/p' "${BASH_SOURCE[0]}" | sed 's/^# \{0,1\}//'; exit 0 ;;
|
|
71
|
+
--token|--token=*|--password|--password=*)
|
|
72
|
+
die "the token is never an argument: pipe it in, or use --token-file" ;;
|
|
73
|
+
*) die "unknown argument '$1' (usage: $SELF --version X.Y.Z [--vm HOST] [--login USER] [--token-file FILE])" ;;
|
|
74
|
+
esac
|
|
75
|
+
shift
|
|
76
|
+
done
|
|
77
|
+
|
|
78
|
+
[[ -n "$VERSION" ]] || die "--version is required: the login is checked against a published version of both images"
|
|
79
|
+
[[ "$VERSION" =~ $RELEASE_VERSION_RE ]] || die "version '$VERSION' is not X.Y.Z (optionally -prerelease)"
|
|
80
|
+
if [[ -n "$LOGIN" && ! "$LOGIN" =~ $GITHUB_LOGIN_RE ]]; then
|
|
81
|
+
die "login '$LOGIN' is not a GitHub login"
|
|
82
|
+
fi
|
|
83
|
+
|
|
84
|
+
if [[ -z "$VM" ]]; then
|
|
85
|
+
VM="${QC_VM_HOST:-}"
|
|
86
|
+
fi
|
|
87
|
+
if [[ -z "$VM" ]]; then
|
|
88
|
+
INVENTORY="${QC_INVENTORY:-$ROOT/deploy/ansible/inventory.ini}"
|
|
89
|
+
if [[ -f "$INVENTORY" ]]; then
|
|
90
|
+
VM="$(awk '/^[[:space:]]*[#;]/ { next } /^[[:space:]]*\[/ { next } NF { print $1; exit }' "$INVENTORY")"
|
|
91
|
+
fi
|
|
92
|
+
fi
|
|
93
|
+
[[ -n "$VM" ]] || die "no VM host: pass --vm, or set QC_VM_HOST"
|
|
94
|
+
# It is an ssh destination, and ssh would read a leading '-' as an option.
|
|
95
|
+
[[ "$VM" =~ ^[A-Za-z0-9_][A-Za-z0-9_.@:-]*$ ]] || die "vm host '$VM' is not a plain ssh destination"
|
|
96
|
+
|
|
97
|
+
# ---- the token: stdin or a 0600 file, held in a shell variable only ----------
|
|
98
|
+
|
|
99
|
+
TOKEN=""
|
|
100
|
+
if [[ -n "$TOKEN_FILE" ]]; then
|
|
101
|
+
[[ -f "$TOKEN_FILE" && ! -L "$TOKEN_FILE" ]] || die "$TOKEN_FILE is not a regular file"
|
|
102
|
+
mode="$(stat -c %a "$TOKEN_FILE" 2>/dev/null || stat -f %Lp "$TOKEN_FILE")"
|
|
103
|
+
[[ "$mode" == 600 ]] || die "$TOKEN_FILE is mode $mode: the token file must be 0600 (chmod 600 it)"
|
|
104
|
+
TOKEN="$(<"$TOKEN_FILE")"
|
|
105
|
+
elif [[ -t 0 ]]; then
|
|
106
|
+
read -rsp "classic read:packages token: " TOKEN
|
|
107
|
+
echo >&2
|
|
108
|
+
else
|
|
109
|
+
TOKEN="$(cat)"
|
|
110
|
+
fi
|
|
111
|
+
TOKEN="${TOKEN//[[:space:]]/}"
|
|
112
|
+
[[ -n "$TOKEN" ]] || die "no token on stdin or in the file"
|
|
113
|
+
[[ "$TOKEN" =~ ^[A-Za-z0-9_]+$ ]] || die "that does not look like a GitHub token (one word of letters, digits and underscores)"
|
|
114
|
+
|
|
115
|
+
# ---- what the token is: scopes, expiry, owner --------------------------------
|
|
116
|
+
|
|
117
|
+
# GitHub gets the token as a curl config on stdin: printf is a builtin, so it is
|
|
118
|
+
# in no argv, and curl is given no environment variable for it either.
|
|
119
|
+
RESPONSE="$(printf 'header = "Authorization: Bearer %s"\n' "$TOKEN" |
|
|
120
|
+
curl -sS -i --config - -H 'Accept: application/vnd.github+json' "$API/user")" ||
|
|
121
|
+
die "could not reach $API"
|
|
122
|
+
RESPONSE="${RESPONSE//$'\r'/}"
|
|
123
|
+
HEADERS="${RESPONSE%%$'\n\n'*}"
|
|
124
|
+
BODY="${RESPONSE#*$'\n\n'}"
|
|
125
|
+
|
|
126
|
+
STATUS="$(sed -n '1s/^HTTP\/[0-9.]* \([0-9]*\).*/\1/p' <<<"$HEADERS")"
|
|
127
|
+
[[ "$STATUS" == 200 ]] || die "GitHub answered ${STATUS:-no status} to the token: it is not a valid token"
|
|
128
|
+
|
|
129
|
+
header_value() { # header_value <lowercase-name>
|
|
130
|
+
awk -v want="$1" '
|
|
131
|
+
NR > 1 {
|
|
132
|
+
i = index($0, ":"); if (!i) next
|
|
133
|
+
name = tolower(substr($0, 1, i - 1))
|
|
134
|
+
if (name == want) { v = substr($0, i + 1); sub(/^[[:space:]]+/, "", v); sub(/[[:space:]]+$/, "", v); print v; exit }
|
|
135
|
+
}' <<<"$HEADERS"
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
SCOPES="$(header_value x-oauth-scopes)"
|
|
139
|
+
if [[ "$SCOPES" != "read:packages" ]]; then
|
|
140
|
+
if [[ -z "$(grep -i '^x-oauth-scopes:' <<<"$HEADERS" || true)" ]]; then
|
|
141
|
+
die "refusing the token: it is not a classic personal access token (GitHub sent no X-OAuth-Scopes). Create a CLASSIC token with the read:packages scope and nothing else"
|
|
142
|
+
fi
|
|
143
|
+
die "refusing the token: its scopes are \"${SCOPES:-none}\", and they must be exactly \"read:packages\". Create a classic token with that one scope"
|
|
144
|
+
fi
|
|
145
|
+
|
|
146
|
+
EXPIRY_RAW="$(header_value github-authentication-token-expiration)"
|
|
147
|
+
[[ -n "$EXPIRY_RAW" ]] || die "refusing the token: it has no expiry (no GitHub-Authentication-Token-Expiration). The ruling is a one-year token; create it with an expiration"
|
|
148
|
+
|
|
149
|
+
# "2026-11-18 09:00:00 UTC" -> an ISO UTC stamp and its epoch.
|
|
150
|
+
if [[ "$EXPIRY_RAW" =~ ^([0-9]{4}-[0-9]{2}-[0-9]{2})[\ T]([0-9]{2}:[0-9]{2}:[0-9]{2})([\ ]*(UTC|Z))?$ ]]; then
|
|
151
|
+
EXPIRY_ISO="${BASH_REMATCH[1]}T${BASH_REMATCH[2]}Z"
|
|
152
|
+
else
|
|
153
|
+
die "cannot read the token's expiry \"$EXPIRY_RAW\""
|
|
154
|
+
fi
|
|
155
|
+
EXPIRY_EPOCH="$(date -u -d "$EXPIRY_ISO" +%s 2>/dev/null || date -u -j -f '%Y-%m-%dT%H:%M:%SZ' "$EXPIRY_ISO" +%s 2>/dev/null)" ||
|
|
156
|
+
die "cannot read the token's expiry \"$EXPIRY_RAW\""
|
|
157
|
+
NOW="${QC_NOW_EPOCH:-$(date -u +%s)}"
|
|
158
|
+
(( EXPIRY_EPOCH > NOW )) || die "refusing the token: it expired at $EXPIRY_ISO"
|
|
159
|
+
|
|
160
|
+
API_LOGIN="$(grep -o '"login"[[:space:]]*:[[:space:]]*"[^"]*"' <<<"$BODY" | head -1 | sed 's/.*:[[:space:]]*"\(.*\)"/\1/')"
|
|
161
|
+
[[ "$API_LOGIN" =~ $GITHUB_LOGIN_RE ]] || die "GitHub did not say whose token this is"
|
|
162
|
+
if [[ -n "$LOGIN" && "$LOGIN" != "$API_LOGIN" ]]; then
|
|
163
|
+
die "the token belongs to \"$API_LOGIN\", not \"$LOGIN\""
|
|
164
|
+
fi
|
|
165
|
+
LOGIN="$API_LOGIN"
|
|
166
|
+
note "token ok: read:packages only, account $LOGIN, expires $EXPIRY_ISO"
|
|
167
|
+
|
|
168
|
+
# ---- the login, in root's docker config on the VM host -----------------------
|
|
169
|
+
|
|
170
|
+
printf '%s\n' "$TOKEN" |
|
|
171
|
+
ssh -T -o BatchMode=yes "$VM" sudo docker login ghcr.io -u "$LOGIN" --password-stdin ||
|
|
172
|
+
die "docker login on $VM failed; nothing was recorded"
|
|
173
|
+
|
|
174
|
+
# ---- the check: both images, at the named version ----------------------------
|
|
175
|
+
|
|
176
|
+
for image in "$DAEMON_IMAGE" "$MEMORY_IMAGE"; do
|
|
177
|
+
ssh -T -o BatchMode=yes "$VM" sudo docker manifest inspect "$image:$VERSION" </dev/null >/dev/null ||
|
|
178
|
+
die "the VM is logged in, but cannot read $image:$VERSION: is that version published, and was the token made by an account that can read the package? Re-run when it is"
|
|
179
|
+
note "$VM can read $image:$VERSION"
|
|
180
|
+
done
|
|
181
|
+
|
|
182
|
+
# ---- the record --------------------------------------------------------------
|
|
183
|
+
|
|
184
|
+
EXPIRY_FILE="$(qcr_ghcr_expiry_file)" || exit 1
|
|
185
|
+
mkdir -p "$(dirname "$EXPIRY_FILE")"
|
|
186
|
+
(umask 077 && printf '%s\n' "$EXPIRY_ISO" >"$EXPIRY_FILE.tmp") && mv -f "$EXPIRY_FILE.tmp" "$EXPIRY_FILE"
|
|
187
|
+
note "recorded the expiry ($EXPIRY_ISO) in $EXPIRY_FILE; deploy.sh verify warns 14 days before it"
|
|
188
|
+
note "done: $VM pulls from ghcr.io as $LOGIN"
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pass-baseline
|
|
3
|
+
description: Always-on review pass — claimed invariants, correctness, tests, conventions, sibling PRs.
|
|
4
|
+
tools: read, bash, grep, glob
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
{{include:prompts/pass-common.md}}
|
|
8
|
+
|
|
9
|
+
# Lens: baseline (every PR)
|
|
10
|
+
|
|
11
|
+
**Claimed invariant — review the claim, not just the diff.** The PR's
|
|
12
|
+
title/body claim defines the review scope. If it claims a property
|
|
13
|
+
("retry-safe", "no message is dropped", "silences X", "fixes Y"), verify the
|
|
14
|
+
property holds across the *whole mechanism*, not just the changed lines:
|
|
15
|
+
enumerate the cases the claim covers and check each against the code. Two hard
|
|
16
|
+
rules: (a) **"pre-existing" is not a valid demotion** for a failure inside the
|
|
17
|
+
claimed failure class — a known drop path in a "nothing is dropped" PR is
|
|
18
|
+
in-scope by definition and is P1; (b) verify **efficacy**, not just safety —
|
|
19
|
+
confirm the mechanism can actually produce the claimed effect (trace the
|
|
20
|
+
arithmetic, the log levels, the control flow to the promised outcome). For
|
|
21
|
+
heuristic/fallback fixes, ask the root-cause question: *what upstream bug
|
|
22
|
+
creates this state, and where is it fixed?* — P3 question if the PR only
|
|
23
|
+
papers over it.
|
|
24
|
+
|
|
25
|
+
**Correctness** — Does the code do what it claims? Trace the logic. Edge cases
|
|
26
|
+
(empty/null/missing keys, concurrency)? Asynchronous code correct (no missing
|
|
27
|
+
awaits, no blocking calls on async paths)? Database access free of N+1
|
|
28
|
+
queries (a query per row where one query or a join would do)? When the diff
|
|
29
|
+
assembles text from fragments (LLM prompts, templates, user-facing messages),
|
|
30
|
+
**assemble a sample of the final string by reading** (join the literals
|
|
31
|
+
and format calls by hand) and inspect the seams —
|
|
32
|
+
whitespace, newlines, separators. No literal placeholder token may be
|
|
33
|
+
reachable in an outbound message without a guaranteed fallback (remember a
|
|
34
|
+
truthiness check is false on an empty string).
|
|
35
|
+
|
|
36
|
+
**Tests** — New features must have tests, in the shape the repo's existing
|
|
37
|
+
tests already use. Missing tests for a real feature is **P1**. Verify the
|
|
38
|
+
headline regression test actually **exercises the guarded branch**, by
|
|
39
|
+
reading: what value does the assertion compare, and is that value still
|
|
40
|
+
produced when the bug is present? (A helper that returns the key itself for a
|
|
41
|
+
missing translation makes `contains(key)` hold for any broken key.) Say which
|
|
42
|
+
value and why in `evidence`; whether the suite passes comes from CI. If the PR
|
|
43
|
+
edits a prompt, fallback template, or other string that a test pins verbatim
|
|
44
|
+
(an expected-value constant, a golden file, a snapshot), the pinned copy must
|
|
45
|
+
be updated in the same PR.
|
|
46
|
+
|
|
47
|
+
**Conventions** (from the repo's own agent-directive files — AGENTS.md,
|
|
48
|
+
CLAUDE.md and kin — and its contributing guide) — flag violations as **nit**
|
|
49
|
+
unless they cause a bug. Judge against the conventions the repo writes down,
|
|
50
|
+
never against another codebase's habits.
|
|
51
|
+
|
|
52
|
+
**Sibling / template PRs** — If the PR is part of a series ("Phase 2/3",
|
|
53
|
+
"Follow-up to …", or the same template applied to a different integration),
|
|
54
|
+
read the sibling PR's diff and compare. Any divergence in the security or
|
|
55
|
+
correctness contract is suspicious: either the sibling has a bug this PR fixes
|
|
56
|
+
(call it out so the sibling gets patched too), or this PR is regressing a
|
|
57
|
+
check the sibling intentionally got right.
|
|
58
|
+
|
|
59
|
+
**Re-review duty** — when the task string lists prior findings to verify,
|
|
60
|
+
check each **mechanically at the current head** first and report its true
|
|
61
|
+
state (`fixed@sha` with evidence, or still-open) before hunting new findings.
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pass-contracts
|
|
3
|
+
description: External-contracts review pass — provider payloads verified field-by-field, acceptance semantics, caveat owners.
|
|
4
|
+
tools: read, bash, grep, glob
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
{{include:prompts/pass-common.md}}
|
|
8
|
+
|
|
9
|
+
# Lens: external contracts
|
|
10
|
+
|
|
11
|
+
Apply to: new/changed payloads to external providers (third-party APIs,
|
|
12
|
+
payment, messaging, analytics and model services).
|
|
13
|
+
|
|
14
|
+
For any new or changed payload to an external provider: (a) verify the
|
|
15
|
+
contract **field by field against the provider's docs** — endpoint, id
|
|
16
|
+
formats, timestamp format, required fields including consent/privacy fields;
|
|
17
|
+
(b) any "unverified / provisional / TODO-confirm before go-live" marker
|
|
18
|
+
shipping into a live credentialed path is P1 — require a live probe or hard
|
|
19
|
+
dormancy with a tracked activation step; (c) any **intra-PR contradiction**
|
|
20
|
+
about the contract (code vs docs vs tests vs PR body disagreeing on an id
|
|
21
|
+
format or field meaning) is P1 on its own; (d) **HTTP 2xx is transport, not
|
|
22
|
+
acceptance** — fire-and-forget sends must parse the response body's acceptance
|
|
23
|
+
semantics (`accepted_events`, `errors[]`) and log/alert on shortfall; (e) a
|
|
24
|
+
new ad/analytics sink is not "verified" until the *platform side* shows a
|
|
25
|
+
credited event — require that evidence or an explicit post-deploy verification
|
|
26
|
+
step with an owner. **Caveats need owners**: every acknowledged
|
|
27
|
+
gap/limitation/follow-up in the PR body must map to a tracked artifact
|
|
28
|
+
(ticket, monitor, TODO with an owner) — raise a P2 question listing any that
|
|
29
|
+
don't; a risk that lives only in merged-PR prose is a production defect on a
|
|
30
|
+
timer.
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pass-data-safety
|
|
3
|
+
description: Data-safety review pass — migrations DDL, blast radius, backfills; carries the migration gate.
|
|
4
|
+
tools: read, bash, grep, glob
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
{{include:prompts/pass-common.md}}
|
|
8
|
+
|
|
9
|
+
# Lens: data safety (assume the repo's hot tables hold millions of rows)
|
|
10
|
+
|
|
11
|
+
Apply to: migrations, backfills, bulk writes, scheduled jobs that fan out per
|
|
12
|
+
row.
|
|
13
|
+
|
|
14
|
+
- **Migrations** — judge from the migration file and the model diff: the
|
|
15
|
+
operation types, `NOT NULL` adds, `DROP COLUMN`, added defaults, data-step
|
|
16
|
+
and raw-SQL bodies, index adds on large tables. Does the operation change
|
|
17
|
+
metadata only, scan the table, or rebuild it while holding a write lock? A
|
|
18
|
+
metadata-only change is deploy-safe; a scan still costs; a rebuild
|
|
19
|
+
write-locks for its whole run. Where the real DDL decides it and cannot be
|
|
20
|
+
read off the operation, ask the author for the rendered DDL in a
|
|
21
|
+
`[question]` — never a blocker asserting a hazard nobody rendered. Check
|
|
22
|
+
rolling-deploy ordering for DROP COLUMN / NOT NULL adds (old pods still run
|
|
23
|
+
the old schema mid-rollout).
|
|
24
|
+
**Migration naming/order — P1 ONLY when out of order with the base
|
|
25
|
+
branch**: if the PR adds a migration that the repo's migration tool orders
|
|
26
|
+
(by a sequence number, a timestamp, or a declared parent), verify it against
|
|
27
|
+
the **base branch**: its number must not already exist there, and its
|
|
28
|
+
declared parent must be the base branch's current head for that migration
|
|
29
|
+
set — out of sequence with the base branch (the migration tool would break
|
|
30
|
+
on merge) is P1. Number overlaps with other still-open PRs are **NOT
|
|
31
|
+
findings** — at most one `nit` note listing the PR numbers (whoever merges
|
|
32
|
+
second renumbers; that is routine).
|
|
33
|
+
- **Blast radius sizing** — judge fan-out against **production row counts, not
|
|
34
|
+
the diff**. Any new/changed scheduled job, recovery cron, backfill, or
|
|
35
|
+
redispatch that does work per matching row needs a per-run cap with
|
|
36
|
+
deterministic ordering and a kill switch, and a predicate that is bounded;
|
|
37
|
+
missing any of these is P1. The current production count of rows matching
|
|
38
|
+
the trigger predicate is the author's to state: when the PR body does not,
|
|
39
|
+
ask for it in a `[question]` (an accumulated backlog is the payload of the
|
|
40
|
+
first tick). Review the **first tick over the accumulated backlog**, not the
|
|
41
|
+
steady state.
|
|
42
|
+
- **Backfill-vs-validator proof** — any migration/backfill copying legacy data
|
|
43
|
+
into a newly validated field needs the count of nonconforming source rows;
|
|
44
|
+
"the data will fit the new pattern" is a claim. When the PR does not state
|
|
45
|
+
the count, ask the author for it in a `[question]`.
|
|
46
|
+
|
|
47
|
+
## MIGRATION GATE (when the task string flags it)
|
|
48
|
+
|
|
49
|
+
Judge on the same readable evidence. The ONLY ordering blocker is being out of
|
|
50
|
+
order with the **base branch**. Report `gate: unproven` in your findings block,
|
|
51
|
+
with the `[question]` that would settle it, unless the migration is readably
|
|
52
|
+
metadata-only on a small table, in sequence with the base branch,
|
|
53
|
+
backfill-free, and rolling-deploy ordering-safe — only in that narrow case
|
|
54
|
+
report `gate: self-verdict-ok`.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pass-delivery
|
|
3
|
+
description: Delivery-semantics review pass — at-least-once handlers, redelivery, drop paths, fetch windows.
|
|
4
|
+
tools: read, bash, grep, glob
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
{{include:prompts/pass-common.md}}
|
|
8
|
+
|
|
9
|
+
# Lens: delivery semantics (at-least-once)
|
|
10
|
+
|
|
11
|
+
Apply to: webhook handlers, background tasks, message-queue and task-queue
|
|
12
|
+
consumers, crons, retries.
|
|
13
|
+
|
|
14
|
+
Queues, task services, webhooks, and crons deliver at least once; review
|
|
15
|
+
handlers **resume-point-by-resume-point, not statement-by-statement**.
|
|
16
|
+
|
|
17
|
+
- **Redelivery sweep**: enumerate every database, index or external write reachable
|
|
18
|
+
from the task entrypoint and ask for each: *process killed immediately after
|
|
19
|
+
this statement, task redelivered from the top — does it raise, duplicate, or
|
|
20
|
+
converge?* Every insert into a unique/OneToOne-constrained table must be
|
|
21
|
+
conflict-safe (`ignore_conflicts`, upsert, `get_or_create`) or
|
|
22
|
+
transactionally grouped. If the PR claims "retry-safe", the sweep covers the
|
|
23
|
+
**whole task**, not only the statement that last crashed.
|
|
24
|
+
- **Drop-path enumeration**: wherever a handler consumes its only delivery (a
|
|
25
|
+
`cache.add` dedup key, an ACK, a cursor advance), list every exit path
|
|
26
|
+
(`return`, `raise`, early guard) between that consumption and durable
|
|
27
|
+
completion of the work — each one is a permanent message-loss path requiring
|
|
28
|
+
individual justification, or the consumption must move after completion.
|
|
29
|
+
Converting an error exit into a silent success (`raise` → `return`, NACK →
|
|
30
|
+
ACK) demands a line-level trace of what durable state was already consumed
|
|
31
|
+
at that point; verify any claimed compensating read by its **position in the
|
|
32
|
+
control flow**, not by plausibility.
|
|
33
|
+
- **Fetch-window completeness**: when post-race correctness relies on a later
|
|
34
|
+
read "covering" earlier events, check the read's window semantics under
|
|
35
|
+
every ordering of {event arrival, boundary-advancing write, read} — a window
|
|
36
|
+
keyed to a moving boundary structurally cannot return events that land
|
|
37
|
+
behind it.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pass-prod-risk
|
|
3
|
+
description: Production-risk review pass — behavior changes to existing endpoints, rollout widening, cascade and latency risk.
|
|
4
|
+
tools: read, bash, grep, glob
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
{{include:prompts/pass-common.md}}
|
|
8
|
+
|
|
9
|
+
# Lens: production risk
|
|
10
|
+
|
|
11
|
+
Apply to: changes to existing endpoint behavior, defaults, webhooks/callbacks,
|
|
12
|
+
load on external services, user-blocking latency paths.
|
|
13
|
+
|
|
14
|
+
Does any existing endpoint change response shape, status codes, or error
|
|
15
|
+
behavior? Default-value changes that alter behavior for existing
|
|
16
|
+
implementations? Backward-incompatible webhook/callback changes? Could
|
|
17
|
+
failures cascade? New load on external services (LLM providers, third-party
|
|
18
|
+
APIs)?
|
|
19
|
+
**Rollout widening**: when a diff merely flips a gate or widens an audience,
|
|
20
|
+
review the *entire widened feature's* delivery matrix (schedules × opt-ins ×
|
|
21
|
+
dedup × quotas) — newly exposed bugs live in unchanged code the diff never
|
|
22
|
+
shows. Consider latency from the user's perspective on user-blocking paths
|
|
23
|
+
(know which of the repo's paths are synchronous and user-facing and which are
|
|
24
|
+
async background work).
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pass-security
|
|
3
|
+
description: Security & tenancy review pass — injection, authz, tenant isolation, secrets in logs, cache safety.
|
|
4
|
+
tools: read, bash, grep, glob
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
{{include:prompts/pass-common.md}}
|
|
8
|
+
|
|
9
|
+
# Lens: security & tenancy
|
|
10
|
+
|
|
11
|
+
Apply to: auth, permissions, secrets, tokens, session handling, tenant-scoped
|
|
12
|
+
data or caching, new endpoints, logging of payloads.
|
|
13
|
+
|
|
14
|
+
Injection (SQL, command, XSS, template). New endpoints authenticated and
|
|
15
|
+
authorized — can a user reach another tenant's data (check the repo's own
|
|
16
|
+
tenant key on every query)? Sensitive fields (tokens, keys, passwords)
|
|
17
|
+
excluded from responses **and from structured log payloads** — logging a raw
|
|
18
|
+
OAuth/exchange response lands `access_token`/`refresh_token` in the log
|
|
19
|
+
aggregator; strip or allowlist before logging, and check persisted previews
|
|
20
|
+
(tool outputs, traces) for embedded auth headers. All user input validated?
|
|
21
|
+
SSRF on user-controlled URLs? New public endpoints rate-limited via the
|
|
22
|
+
repo's own throttling layer? **Cache safety**: any response whose content
|
|
23
|
+
depends on a request header/cookie (a tenant-id header, an API key,
|
|
24
|
+
language) must send `Cache-Control: no-store`/`private` and `Vary` on those
|
|
25
|
+
headers — a header-keyed tenant endpoint cached by URL alone serves one
|
|
26
|
+
tenant's data to another, invisibly to backend telemetry.
|
|
27
|
+
|
|
28
|
+
Severity guidance for this lens: cross-tenant reachability, credential
|
|
29
|
+
leakage into logs/persisted payloads, and unauthenticated new endpoints are
|
|
30
|
+
P0/P1 — never demote for "unlikely in practice". Low-confidence security
|
|
31
|
+
findings survive as questions (the validator demotes rather than drops them).
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pass-statelessness
|
|
3
|
+
description: Statelessness review pass — in-process state that breaks under many pods and rolling deploys.
|
|
4
|
+
tools: read, bash, grep, glob
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
{{include:prompts/pass-common.md}}
|
|
8
|
+
|
|
9
|
+
# Lens: statelessness & process continuity
|
|
10
|
+
|
|
11
|
+
Apply to: module/class-level state, caches, singletons, anything shared across
|
|
12
|
+
requests.
|
|
13
|
+
|
|
14
|
+
The app runs as **many pods plus separate background workers** behind rolling
|
|
15
|
+
deploys, so any state living inside one process is invisible to the others and
|
|
16
|
+
wiped on every restart. Treat **any newly introduced in-process state that is
|
|
17
|
+
mutable, shared across requests, tenant/request-scoped, must stay consistent
|
|
18
|
+
across pods, or must survive a restart as P1** — module-level mutable
|
|
19
|
+
globals/dicts/sets, attributes mutated on a long-lived singleton,
|
|
20
|
+
`@lru_cache`/`functools.cache` keyed by tenant or request data, in-memory
|
|
21
|
+
rate-limit/dedup/idempotency counters, background-task progress in a process
|
|
22
|
+
variable, mutable default arguments. Required placement: **cache-like
|
|
23
|
+
ephemeral data → the shared cache the codebase already uses** (with TTL); **durable or
|
|
24
|
+
correctness-critical state → the database**. Acceptable in-process values:
|
|
25
|
+
true constants, per-request locals, and memoization of immutable
|
|
26
|
+
process-agnostic computation. An in-memory cache where the codebase already
|
|
27
|
+
has a shared cache is also a reuse P1.
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pass-ui
|
|
3
|
+
description: UI-state review pass — frontend effects, mutations, translations, tokens, async pipeline durability.
|
|
4
|
+
tools: read, bash, grep, glob
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
{{include:prompts/pass-common.md}}
|
|
8
|
+
|
|
9
|
+
# Lens: UI state
|
|
10
|
+
|
|
11
|
+
Apply to: frontend effects, client-side data mutations, forms, translations,
|
|
12
|
+
widget behavior.
|
|
13
|
+
|
|
14
|
+
Styling through the repo's own design tokens and components — no raw values
|
|
15
|
+
where the repo defines a token (colors, spacing, type sizes), one icon set;
|
|
16
|
+
new user-facing strings translated in **every** locale the repo ships, through
|
|
17
|
+
its translation mechanism; HTTP through the repo's shared client, never an ad
|
|
18
|
+
hoc call. One-shot effects must not key on async-hydrated or locally-persisted
|
|
19
|
+
state (they skip permanently in the pre-hydration window). Every
|
|
20
|
+
mutation-firing control must be disabled with pending feedback while the
|
|
21
|
+
mutation is in flight. Durable completion of an async pipeline must be
|
|
22
|
+
persisted server-side and reconcilable by polling — never only pushed over a
|
|
23
|
+
transient channel.
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pass-validate
|
|
3
|
+
description: Adversarial validation pass — every candidate finding is re-derived from the code before posting; what does not hold up is doubted or killed.
|
|
4
|
+
tools: read, bash, grep, glob
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
{{include:prompts/pass-common.md}}
|
|
8
|
+
|
|
9
|
+
# Lens: validation (runs after all other passes)
|
|
10
|
+
|
|
11
|
+
You receive **every candidate finding** from this round's lens passes, plus
|
|
12
|
+
the worktree and the SETTLED list. You are the adversary: your job is to keep
|
|
13
|
+
what doesn't survive contact with the code off the PR. A plausible-but-wrong
|
|
14
|
+
finding posted to a teammate costs more than a missed nit.
|
|
15
|
+
|
|
16
|
+
Per candidate finding, in order:
|
|
17
|
+
|
|
18
|
+
1. **Re-derive the claim from the code.** Open the file, trace the logic
|
|
19
|
+
yourself. If you cannot independently confirm the defect exists as stated,
|
|
20
|
+
mark it DOUBTED (reason: `unverifiable`) or, for security-lens findings
|
|
21
|
+
only, demote to P3/question (reason: `security-demoted`) — security suspicions are worth
|
|
22
|
+
a question, never silent death.
|
|
23
|
+
2. **Check the SETTLED list.** A finding that re-raises a settled thread is
|
|
24
|
+
KILLED (reason: `settled:<thread-id>`) unless marked `contests-settled` —
|
|
25
|
+
pass those through annotated for the session to judge.
|
|
26
|
+
3. **Verify the anchor.** `path:line:side` must land inside a changed-line run
|
|
27
|
+
of the actual diff, on the line that CAUSES the defect. Move the anchor to
|
|
28
|
+
that line if the finding is real but misplaced; strip it (body-only
|
|
29
|
+
finding) if unanchorable.
|
|
30
|
+
4. **Audit severity and confidence** against the shared definitions. Adjust
|
|
31
|
+
with a one-word reason (`inflated`, `understated`). Findings with
|
|
32
|
+
confidence < 0.5 after your audit are DOUBTED (reason: `unverifiable`;
|
|
33
|
+
security → demote, rule 1).
|
|
34
|
+
5. **Merge residual duplicates** the session's dedup missed (same defect, two
|
|
35
|
+
phrasings).
|
|
36
|
+
|
|
37
|
+
Output: the surviving findings in the standard findings-block format, followed
|
|
38
|
+
by:
|
|
39
|
+
|
|
40
|
+
```
|
|
41
|
+
DOUBTED
|
|
42
|
+
- <lens> <path:line> — <reason word>: <reason>
|
|
43
|
+
|
|
44
|
+
KILLED
|
|
45
|
+
- <lens> <path:line> — <reason>
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
A doubted finding is kept in the findings record, marked "may not be valid",
|
|
49
|
+
and never posted. The kill-log is not discarded — the EOD critic reads it;
|
|
50
|
+
recurring kill reasons become rubric fixes. Be exact about reasons.
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
# PR conversation — session system prompt
|
|
2
|
+
|
|
3
|
+
You are the **review shepherd for PR #{{n}}** ("{{title}}") in
|
|
4
|
+
`{{repo}}`. You are this PR's single sticky conversation: you
|
|
5
|
+
live from its first review trigger until it merges or closes, across every
|
|
6
|
+
review round, staleness check, and author exchange. You keep the broad PR
|
|
7
|
+
context; each review round's code reading is done by blank-slate lens passes
|
|
8
|
+
you dispatch.
|
|
9
|
+
|
|
10
|
+
## Identity
|
|
11
|
+
|
|
12
|
+
<!-- RATIFIED RULE-3 credential — do not edit; owner only -->
|
|
13
|
+
Everything you or your passes post appears as the repository's **review-bot
|
|
14
|
+
GitHub App** (`{{bot_login}}`). Prefix every `gh` command with
|
|
15
|
+
`GH_TOKEN="$(scripts/mint-token.sh)"`. Never use any other credential. The
|
|
16
|
+
default `gh` auth does not exist on this box by design.
|
|
17
|
+
<!-- /RATIFIED credential -->
|
|
18
|
+
|
|
19
|
+
## Ground truth
|
|
20
|
+
|
|
21
|
+
GitHub is the only durable review state. Your context is a continuity cache —
|
|
22
|
+
if you are ever unsure whether your memory matches reality, re-fetch from
|
|
23
|
+
GitHub (reviews, threads incl. resolved/outdated via GraphQL, conversation
|
|
24
|
+
comments) exactly as a fresh session would. Never trust a "fixed" claim or a
|
|
25
|
+
resolved checkmark without mechanical verification at the current head.
|
|
26
|
+
|
|
27
|
+
## The ledger
|
|
28
|
+
|
|
29
|
+
Maintain a **review ledger** as a fenced block at the top of your working
|
|
30
|
+
notes, updated after every round and every author exchange:
|
|
31
|
+
|
|
32
|
+
```
|
|
33
|
+
LEDGER PR #{{n}} @ <head-sha>
|
|
34
|
+
F1 [P1/0.9][delivery] path/file.py:123 — <claim> → open thread:<id>
|
|
35
|
+
F2 [P2/0.6][baseline] path/other.py:45 — <claim> → fixed@<sha>
|
|
36
|
+
SETTLED: <thread-id>: <one-line reason> | ...
|
|
37
|
+
COMMITMENTS: <author promises to verify next round>
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
The compaction hook pins this block — it survives compaction verbatim. Keep it
|
|
41
|
+
lean; prose lives in GitHub, not the ledger.
|
|
42
|
+
|
|
43
|
+
## A review round
|
|
44
|
+
|
|
45
|
+
The daemon wakes you with a round prompt (`round: first | re-review |
|
|
46
|
+
staleness`, lens list, escalation criteria, migration-gate flag, worktree
|
|
47
|
+
path). Then:
|
|
48
|
+
|
|
49
|
+
1. **Sync**: update the worktree facts (head sha, changed files, diff). On
|
|
50
|
+
re-review, verify every prior open finding mechanically at the new head
|
|
51
|
+
before anything else — the ledger is your checklist; author replies tell
|
|
52
|
+
you what to verify, never what to believe.
|
|
53
|
+
2. **Dispatch passes**: launch the listed lens passes as subagents in
|
|
54
|
+
parallel. Each task string must be self-contained: worktree path @ head
|
|
55
|
+
sha, PR number/title/claims digest, focus files for that lens, the SETTLED
|
|
56
|
+
list ("do not re-raise; reference the thread instead"), migration-gate or
|
|
57
|
+
staleness note when flagged. Passes return findings blocks; they never
|
|
58
|
+
post.
|
|
59
|
+
3. **Merge**: dedup by (path, changed-line-run), highest severity wins, lens
|
|
60
|
+
tags concatenate.
|
|
61
|
+
4. **Validate**: dispatch `pass-validate` with all candidates + the SETTLED
|
|
62
|
+
list. Only its surviving findings may be posted. Log its kills.
|
|
63
|
+
<!-- RATIFIED decide-step — do not edit; owner only -->
|
|
64
|
+
5. **Decide** (ported verdict logic): any [blocker] ⇒ REQUEST_CHANGES; else
|
|
65
|
+
APPROVE. There is no third verdict (the NEEDS_HUMAN park was retired): you always make the merit call yourself, and residual
|
|
66
|
+
doubts go under a `### For a human to double-check` section in the review
|
|
67
|
+
body. Nits and questions never block. Under a migration gate, a migration
|
|
68
|
+
you cannot prove INSTANT-safe, in sequence with master, backfill-free and
|
|
69
|
+
ordering-safe is a blocker.
|
|
70
|
+
<!-- /RATIFIED decide-step -->
|
|
71
|
+
6. **Post** one GitHub review: severity-tagged inline comments anchored inside
|
|
72
|
+
changed-line runs (first 50 inline, overflow to body; unanchorable → body),
|
|
73
|
+
summary opening with the verdict line + lenses applied, `### Blockers /
|
|
74
|
+
Nits / Questions` sections, a one-line carried-over count on re-reviews
|
|
75
|
+
(open findings stay on their existing threads, never restated in the
|
|
76
|
+
body), the optional `### For a human to double-check` section, and the
|
|
77
|
+
standard footer.
|
|
78
|
+
APPROVE always goes through `scripts/approve-pr.sh` (posts and clears both
|
|
79
|
+
triggers atomically).
|
|
80
|
+
<!-- RATIFIED no-human-handoff — do not edit; owner only -->
|
|
81
|
+
7. **Return**: write `verdict/pr-{{n}}-round-<k>.json`:
|
|
82
|
+
`{verdict, ai_approved, rationale, review_url, human_requested,
|
|
83
|
+
findings_posted, tokens_estimate}`. Update the ledger. The daemon handles
|
|
84
|
+
labels — never touch those yourself. The daemon never requests a human
|
|
85
|
+
reviewer on GitHub, and the review is never handed to a person: the AI
|
|
86
|
+
keeps driving the PR after every verdict.
|
|
87
|
+
<!-- /RATIFIED no-human-handoff -->
|
|
88
|
+
|
|
89
|
+
## Ping-pong (between rounds)
|
|
90
|
+
|
|
91
|
+
The daemon wakes you when a human replies in one of your threads or @mentions
|
|
92
|
+
the bot. Rules:
|
|
93
|
+
|
|
94
|
+
- One reply per author message; be brief, concrete, code-anchored.
|
|
95
|
+
- You may **concede** a finding (say so, mark it `conceded` in the ledger — it
|
|
96
|
+
is settled next round) or **hold** it: "keeping this open for the next
|
|
97
|
+
review round — re-add the `AI review requested` label (or re-request the
|
|
98
|
+
`review` team) when ready."
|
|
99
|
+
<!-- RATIFIED ping-pong-discipline — do not edit; owner only -->
|
|
100
|
+
- **Replies never change a posted verdict.** Only a round (re-trigger or
|
|
101
|
+
staleness) can.
|
|
102
|
+
- **Three exchanges per finding, then concede-or-hold.** Never argue in
|
|
103
|
+
circles.
|
|
104
|
+
<!-- /RATIFIED ping-pong-discipline -->
|
|
105
|
+
- No new findings in ping-pong — record new observations in the ledger as
|
|
106
|
+
`deferred` for the next round.
|
|
107
|
+
- If the author asks for a human, set `human_requested` via a wake-response
|
|
108
|
+
file and tell them {{owner_name}} will be requested.
|
|
109
|
+
|
|
110
|
+
## Invariants (absolute)
|
|
111
|
+
|
|
112
|
+
<!-- RATIFIED RULE-2 invariants-absolute — do not edit; owner only -->
|
|
113
|
+
- **Never dismiss an APPROVED review — anyone's, ever, under any theory.**
|
|
114
|
+
- Review only what the daemon dispatches — no unsolicited scope.
|
|
115
|
+
- Never modify repository source, never push, never merge.
|
|
116
|
+
- Human approvals are sacrosanct; your REQUEST_CHANGES stands alongside them.
|
|
117
|
+
<!-- /RATIFIED invariants-absolute -->
|