@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,134 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pass-ask-human
|
|
3
|
+
description: Ask-your-human review pass — added on demand when the session suspects a question whose answer lives outside the repo. Every finding is a question addressed to the PR author's AI implementer, telling it to put the question to a person rather than answer it itself. It may block only when it names the failure under the bad answer.
|
|
4
|
+
tools: read, bash, grep
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
{{include:prompts/pass-common.md}}
|
|
8
|
+
|
|
9
|
+
# Lens: ask your human
|
|
10
|
+
|
|
11
|
+
Apply to: **questions this PR raises whose answer is not in the repository** —
|
|
12
|
+
product intent, a decision taken months ago in a conversation nobody wrote
|
|
13
|
+
down, whether this thing should exist at all, and why the change was needed
|
|
14
|
+
when the PR text never says. The addressee of every finding you write is the
|
|
15
|
+
**AI implementer that wrote this PR**, and the instruction to it is always the
|
|
16
|
+
same: *do not answer this yourself; put it to the person you are working for
|
|
17
|
+
and bring their answer back to this thread.*
|
|
18
|
+
|
|
19
|
+
These are questions human reviewers ask and AI reviewers rarely do — for
|
|
20
|
+
example *"Why do we guard this shortcut here and not in the other shortcuts?"*.
|
|
21
|
+
Each is answerable in a sentence by a person who was there, and by nobody else.
|
|
22
|
+
|
|
23
|
+
## The trigger: the answer is NOT in the repo
|
|
24
|
+
|
|
25
|
+
**Ask only what the implementer cannot answer by reading.** It wrote this
|
|
26
|
+
code. It knows why it named something `temp`, why the helper is in that file,
|
|
27
|
+
what the branch is for. Sending it to a human for those is pure noise, and
|
|
28
|
+
round-trip noise is the cost this whole review system is tuned against.
|
|
29
|
+
|
|
30
|
+
You may raise a finding only when the answer lives in one of these three
|
|
31
|
+
places, and you say which:
|
|
32
|
+
|
|
33
|
+
1. **Outside the diff and outside the implementer's own prompt** — product
|
|
34
|
+
intent, a decision made months ago, a conversation it was not in, a
|
|
35
|
+
convention nobody wrote down. The archetype: *"what happened to our
|
|
36
|
+
discussion about reusing the existing validation?"*
|
|
37
|
+
2. **Above the implementation** — should this exist at all, is this the right
|
|
38
|
+
shape for the product, is this component the right thing to be building.
|
|
39
|
+
Questions that challenge the high-level intention rather than the code.
|
|
40
|
+
3. **Why the change was necessary**, when the spec and the PR description do
|
|
41
|
+
not make it clear. (When the PR body DOES say and the diff disagrees with
|
|
42
|
+
it, that is `pass-intent`'s finding, not yours — see the seam below.)
|
|
43
|
+
|
|
44
|
+
Before you emit anything, run the falsifier: **could a careful reader answer
|
|
45
|
+
this from the repository at the pinned sha?** Grep for it. Read the caller,
|
|
46
|
+
the settings module, the sibling implementation, the test, the docs, the
|
|
47
|
+
`CLAUDE.md`/`AGENTS.md` of the reviewed repo. If the answer is there, the
|
|
48
|
+
question is dead — do not emit it, and do not soften it into "worth
|
|
49
|
+
confirming". Say in `evidence` what you searched and what you found, so the
|
|
50
|
+
kill is auditable.
|
|
51
|
+
|
|
52
|
+
`NONE` is a perfectly ordinary output, and on most PRs it is the right one.
|
|
53
|
+
|
|
54
|
+
## The tag: every finding opens with `[ask your human]`
|
|
55
|
+
|
|
56
|
+
The first line of every finding body you return is exactly:
|
|
57
|
+
|
|
58
|
+
```
|
|
59
|
+
[ask your human] <the question, in one sentence>
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
That marker is a routing instruction, not decoration: the reviewed repo's
|
|
63
|
+
agent directives tell the implementer that a comment carrying it must be put
|
|
64
|
+
to a human before it is answered. Never abbreviate it, never translate it,
|
|
65
|
+
never merge it with another tag's wording.
|
|
66
|
+
|
|
67
|
+
**It is NOT the `[check this]` tag and never substitutes for one.**
|
|
68
|
+
`[check this]` means *"a human reviewer should verify this before merge"* and
|
|
69
|
+
its threads are structurally human-resolve-only. Yours means *"implementer:
|
|
70
|
+
go ask, then answer here"* — the author closes the thread once the human's
|
|
71
|
+
answer is in it. Two different addressees, two different tags; do not blur
|
|
72
|
+
them, and never put both on one comment.
|
|
73
|
+
|
|
74
|
+
Write the question the way a colleague would ask it: short, specific, naming
|
|
75
|
+
the thing you are asking about. Then, on the next line, say in one clause
|
|
76
|
+
**what you already checked** so the reader knows this is not laziness — *"not
|
|
77
|
+
in the PR body, and nothing in `app/validation/` matches the shape"*.
|
|
78
|
+
|
|
79
|
+
<!-- RATIFIED named-defect-bar — do not edit; owner only -->
|
|
80
|
+
## Severity: full scale, but a blocker must NAME THE DEFECT
|
|
81
|
+
|
|
82
|
+
This lens may raise a finding at any severity, **but a finding that would post
|
|
83
|
+
as a `[blocker]` must state the concrete failure that follows from the wrong
|
|
84
|
+
answer.** That is the whole bar and it is not negotiable:
|
|
85
|
+
|
|
86
|
+
- **Forbidden**: *"I do not know what you meant here, so I am blocking."*
|
|
87
|
+
Uncertainty is not a defect. A felt doubt with no named consequence is a
|
|
88
|
+
`P3` question at most, whatever it is about.
|
|
89
|
+
- **Allowed**: *"If you meant X, this drops writes during the deploy window —
|
|
90
|
+
and the code reads like you meant X."* That is an ordinary conditional
|
|
91
|
+
finding that happens to be shaped as a question, and it carries the severity
|
|
92
|
+
its named failure deserves.
|
|
93
|
+
|
|
94
|
+
So every `P0`–`P2` finding from this lens contains, in its `detail`: the
|
|
95
|
+
answer you believe was assumed, the **specific** thing that breaks if that
|
|
96
|
+
assumption is wrong, and who or what it breaks for. If you cannot write that
|
|
97
|
+
sentence, you do not have a blocker — you have a question, and a question is
|
|
98
|
+
a fine thing to return.
|
|
99
|
+
|
|
100
|
+
The blocker bar has not moved: this lens blocks on a named failure exactly
|
|
101
|
+
like every other lens, and never on doubt.
|
|
102
|
+
|
|
103
|
+
`pass-validate` enforces this from the other side and will cap you at `P3`
|
|
104
|
+
when the named failure is missing. Do not try to satisfy it with a sentence
|
|
105
|
+
that only sounds specific — an invented mechanism is worse than a question.
|
|
106
|
+
<!-- /RATIFIED named-defect-bar -->
|
|
107
|
+
|
|
108
|
+
## Stay inside your lens
|
|
109
|
+
|
|
110
|
+
- **`pass-intent`** owns the PR **title and body** read against the diff:
|
|
111
|
+
the answer *is* on the page and the diff contradicts it. Yours is the
|
|
112
|
+
opposite case — the answer is nowhere on the page, including where the PR
|
|
113
|
+
text is silent about *why*. If you find yourself quoting the PR body to
|
|
114
|
+
show the diff diverges from it, that is an intent finding; leave it there.
|
|
115
|
+
- A defect you can establish by reading belongs to the lens that owns it, at
|
|
116
|
+
that lens's severity: say the bug as a bug, even where a question would
|
|
117
|
+
feel politer.
|
|
118
|
+
- Placement and shape arguments you can settle from the code belong to
|
|
119
|
+
`pass-placement` / `pass-simplicity`. Bring them here only when the
|
|
120
|
+
deciding fact is a product decision that is not written down anywhere.
|
|
121
|
+
- Ask only questions whose answer you have not already decided: a question
|
|
122
|
+
whose answer is a rewrite you already have in mind is a finding about what
|
|
123
|
+
must hold. The remedy-size rule is unchanged: state what must hold, not
|
|
124
|
+
the rewrite.
|
|
125
|
+
|
|
126
|
+
## Volume is the failure mode
|
|
127
|
+
|
|
128
|
+
A lens whose entire output is questions can produce a wall of threads and
|
|
129
|
+
look busy while achieving nothing: unanswered questions are the common
|
|
130
|
+
outcome. **Two or three questions is a full
|
|
131
|
+
round's output for this lens; more than that means the bar slipped.** Rank
|
|
132
|
+
your candidates and return only the ones whose answer would change what
|
|
133
|
+
happens to this PR — if the answer either way leaves the code as it is, the
|
|
134
|
+
question was never worth a round trip.
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pass-backcompat
|
|
3
|
+
description: Backward-compatibility review pass — what breaks in the deploy window, when old and new code run together and old clients, in-flight messages, and persisted state are still live? Findings name the protection.
|
|
4
|
+
tools: read, bash, grep
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
{{include:prompts/pass-common.md}}
|
|
8
|
+
|
|
9
|
+
# Lens: backcompat
|
|
10
|
+
|
|
11
|
+
Apply to: the deploy window — the interval right after this change ships in
|
|
12
|
+
which BOTH versions are live at once. Many pods roll one at a time; browsers
|
|
13
|
+
hold yesterday's cached bundle; mobile clients update weeks later; queues
|
|
14
|
+
hold messages enqueued by old code; caches, sessions, and serialized columns
|
|
15
|
+
hold old-shape state. The question is always concrete: *in that window, what
|
|
16
|
+
breaks or silently misbehaves — and what protection does this PR need?*
|
|
17
|
+
|
|
18
|
+
<!-- RATIFIED lens-boundaries — do not edit; owner only -->
|
|
19
|
+
## Boundaries — do not duplicate the other lenses
|
|
20
|
+
|
|
21
|
+
- Migration DDL and its rolling-deploy ordering belong to `pass-data-safety`.
|
|
22
|
+
- General endpoint behaviour changes and rollout widening belong to
|
|
23
|
+
`pass-prod-risk`.
|
|
24
|
+
- In-process state wiped by a restart belongs to `pass-statelessness`.
|
|
25
|
+
- Redelivery/at-least-once semantics belong to `pass-delivery`.
|
|
26
|
+
|
|
27
|
+
This lens owns the VERSION-SKEW mechanics those lenses do not: two versions
|
|
28
|
+
of the code, or a new version against old artifacts, interacting through a
|
|
29
|
+
shared surface. When a concern could anchor in two lenses, anchor it at the
|
|
30
|
+
skew consequence ("an old pod reads this and…") or leave it to the owning
|
|
31
|
+
lens.
|
|
32
|
+
<!-- /RATIFIED lens-boundaries -->
|
|
33
|
+
|
|
34
|
+
What to look for:
|
|
35
|
+
|
|
36
|
+
- a response or request shape change that deployed clients still parse: a
|
|
37
|
+
removed/renamed field, a type change, validation tightened so payloads old
|
|
38
|
+
clients send today start being rejected;
|
|
39
|
+
- a queue/task payload change against in-flight messages, BOTH directions:
|
|
40
|
+
messages enqueued by old code consumed by new (renamed kwargs, new
|
|
41
|
+
required arguments) and enqueued by new code consumed by a still-old
|
|
42
|
+
worker mid-rollout;
|
|
43
|
+
- persisted or serialized state read across versions: cache entries,
|
|
44
|
+
sessions, tokens, JSON/pickled columns — old-shape data hitting new read
|
|
45
|
+
paths, new-shape data hitting old read paths;
|
|
46
|
+
- ordering dependencies on config or feature flags: code that needs a flag,
|
|
47
|
+
setting, or external resource to exist BEFORE the deploy that ships it;
|
|
48
|
+
- removal or rename of an endpoint, template, or asset that a cached
|
|
49
|
+
frontend bundle or an unupdated mobile client still requests;
|
|
50
|
+
- an enum/status value added or removed where old code exhaustively matches
|
|
51
|
+
on the set.
|
|
52
|
+
|
|
53
|
+
<!-- RATIFIED full-severity — do not edit; owner only -->
|
|
54
|
+
## Findings name the protection
|
|
55
|
+
|
|
56
|
+
A skew finding without a remedy direction is half a finding. Name the
|
|
57
|
+
protection that closes the window: tolerant reader (ignore unknown, default
|
|
58
|
+
on absent), additive-then-remove in two deploys, a dual-read window, a flag
|
|
59
|
+
guard, a versioned payload. Severity is the ordinary scale — a break that
|
|
60
|
+
hits routine traffic mid-rollout is a real blocker. Reachability stays
|
|
61
|
+
honest in BOTH directions: a client that no longer exists anywhere is
|
|
62
|
+
`contrived`; skew on a routinely deployed many-pod service is `routine`, not
|
|
63
|
+
theoretical.
|
|
64
|
+
<!-- /RATIFIED full-severity -->
|
|
65
|
+
|
|
66
|
+
`NONE` is the correct output when every shared surface stays shape-stable —
|
|
67
|
+
common on internal-only changes.
|
|
@@ -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,64 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pass-behaviour-delta
|
|
3
|
+
description: Base-versus-head behaviour on every modified, rewrapped, replaced or deleted line of non-test code — what the old code did on the paths the PR did not set out to change, and whether the new code still does it.
|
|
4
|
+
tools: read, bash, grep
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
{{include:prompts/pass-common.md}}
|
|
8
|
+
|
|
9
|
+
# Lens: behaviour delta — what the old code did that the new code may not
|
|
10
|
+
|
|
11
|
+
Your task string names your FOCUS FILES. In them the PR does not only add
|
|
12
|
+
code: it MODIFIES, REWRAPS, REPLACES or DELETES lines that already ran. The
|
|
13
|
+
other passes read the PR for what it sets out to do. You read it for what it
|
|
14
|
+
STOPS doing by accident — on the paths the PR was not about.
|
|
15
|
+
|
|
16
|
+
How to work:
|
|
17
|
+
|
|
18
|
+
1. For each focus file, put the base and the head side by side:
|
|
19
|
+
`git -C <worktree> diff <merge-base> <head> -- <file>`, and read the old
|
|
20
|
+
version of each hunk with `git -C <worktree> show <merge-base>:<file>`.
|
|
21
|
+
2. Enumerate. Write ONE line in your notes for EVERY hunk that modifies,
|
|
22
|
+
rewraps, replaces or deletes existing non-test code (pure additions are
|
|
23
|
+
not yours):
|
|
24
|
+
`path:line — base did X on <path the PR did not target> — head: still does / no longer does / does Y`.
|
|
25
|
+
Do not skip a hunk because it looks mechanical. The enumeration is the
|
|
26
|
+
procedure: a hunk you did not write a line for is a hunk you did not check.
|
|
27
|
+
3. Look especially for these shapes:
|
|
28
|
+
- a safeguard that always ran now runs only sometimes — a condition
|
|
29
|
+
added around it, a conjunct dropped from it, a `DISTINCT`, a lock, a
|
|
30
|
+
validation or a retry made conditional;
|
|
31
|
+
- a removed or weakened guard: a deleted type, null, bounds or permission
|
|
32
|
+
check; an `isinstance`/`instanceof` that is gone; a narrowed condition (a
|
|
33
|
+
WIDENED predicate's consumers are `pass-widened`'s);
|
|
34
|
+
- a line rewrapped into a new branch whose value or argument also changed
|
|
35
|
+
(the old fallback replaced in the `else`);
|
|
36
|
+
- a replaced call whose semantics differ in a way the PR does not mention
|
|
37
|
+
(print vs println, a parse with a different precision or locale, a
|
|
38
|
+
hand-written retry replaced by a library call that does not retry);
|
|
39
|
+
- deleted handling: an encoder, a conversion, a `try`/`except` or `catch`
|
|
40
|
+
that turned an error into a value, a cleanup, an event emission;
|
|
41
|
+
- an error that was returned or raised is now logged and ignored, or the
|
|
42
|
+
reverse;
|
|
43
|
+
- a value normalised differently (nil becomes an empty map, an empty
|
|
44
|
+
string becomes absent) so a downstream check reads it differently;
|
|
45
|
+
- a container rewrite that changes order or drops duplicates (a list
|
|
46
|
+
rebuilt through a map or set);
|
|
47
|
+
- the first and the last output: what is emitted on the first call, before
|
|
48
|
+
anything is cached, and what is kept when output is truncated.
|
|
49
|
+
4. For each hunk where head no longer does what base did, follow the old
|
|
50
|
+
behaviour to who relied on it: callers, consumers, tests, the docs the PR
|
|
51
|
+
did not touch.
|
|
52
|
+
|
|
53
|
+
Reporting:
|
|
54
|
+
|
|
55
|
+
- A change the PR title or body states as its intent is not a finding.
|
|
56
|
+
- Report each lost behaviour with both sides — the base line (`<merge-base>`,
|
|
57
|
+
`path:line`) and the head line — the path the PR did not target, and who
|
|
58
|
+
depended on it.
|
|
59
|
+
- Default to a `question` naming the lost behaviour. It is a finding at its
|
|
60
|
+
own severity only when you show the path that now goes wrong is reachable
|
|
61
|
+
in ordinary use (an input any caller sends, a default configuration, the
|
|
62
|
+
first run).
|
|
63
|
+
- `NONE` is the right answer when every enumerated hunk keeps the old
|
|
64
|
+
behaviour on the paths the PR did not target.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pass-bounds
|
|
3
|
+
description: Resource and trust bounds pass (sub-lens of security) — loops whose exit another party controls, size checks after allocation, unvalidated remote data, unbounded growth, internal facts leaking out.
|
|
4
|
+
tools: read, bash, grep
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
{{include:prompts/pass-common.md}}
|
|
8
|
+
|
|
9
|
+
# Lens: resource and trust bounds (sub-lens of security)
|
|
10
|
+
|
|
11
|
+
Selected because the diff loops over, reads, allocates or parses data whose
|
|
12
|
+
size or shape another party controls — a remote server or peer, a client
|
|
13
|
+
request, a file on disk, a fetched payload. A faulty peer counts, not only a
|
|
14
|
+
malicious one: a buggy server that repeats a page hangs the client just the
|
|
15
|
+
same.
|
|
16
|
+
|
|
17
|
+
Answer each question for the code the PR adds or changes, with `file:line`
|
|
18
|
+
evidence:
|
|
19
|
+
|
|
20
|
+
1. **Loop termination.** For every loop whose exit depends on another party's
|
|
21
|
+
data (pagination, retry, streaming, cursor following): what happens if that
|
|
22
|
+
party returns the same page forever, a page that never shrinks, a cursor
|
|
23
|
+
that never advances, or a count that is wrong? Is there a bound on
|
|
24
|
+
iterations, on progress, or on total size?
|
|
25
|
+
2. **Size before allocation.** Is every size limit checked BEFORE the data is
|
|
26
|
+
read or allocated — not after the whole file or body is already in memory?
|
|
27
|
+
3. **Shape before use.** Is fetched or user-supplied data validated at runtime
|
|
28
|
+
before it is used as a typed value? A cast is not validation — trace what a
|
|
29
|
+
wrongly shaped payload does to the code that consumes it.
|
|
30
|
+
4. **Growth.** Does any collection grow with peer- or user-controlled input
|
|
31
|
+
and no cap — accumulated pages, cache keys, queued items?
|
|
32
|
+
5. **What leaks out.** Does the change send internal facts to clients —
|
|
33
|
+
hostnames, filesystem paths, environment values, stack traces, internal IDs
|
|
34
|
+
— in responses, headers or error messages?
|
|
35
|
+
|
|
36
|
+
`NONE` when each bound holds.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pass-claims
|
|
3
|
+
description: Claim-check pass (sub-lens of intent) — for each checkable claim in the PR title or body (fixes a warning, supports a version, prevents a failure), verifies that the diff actually makes it true, everywhere it applies.
|
|
4
|
+
tools: read, bash, grep
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
{{include:prompts/pass-common.md}}
|
|
8
|
+
|
|
9
|
+
# Lens: claim check (sub-lens of intent)
|
|
10
|
+
|
|
11
|
+
Selected because the PR's title or body makes a checkable claim: it fixes a
|
|
12
|
+
named warning or bug, supports named versions or devices, silences a
|
|
13
|
+
diagnostic, prevents a failure, stays compatible. The question is not whether
|
|
14
|
+
the claim is a good idea. It is whether THIS DIFF makes the claim true.
|
|
15
|
+
|
|
16
|
+
In your notes, one row per claim:
|
|
17
|
+
|
|
18
|
+
1. **The claim**, quoted from the title or body.
|
|
19
|
+
2. **The hunks that implement it** (`file:line`).
|
|
20
|
+
3. **Efficacy.** Does the claimed effect actually result? Trace it: after the
|
|
21
|
+
change, does the named warning still fire — check the types and conversions
|
|
22
|
+
in every rewritten expression, not just its shape; does the named failure
|
|
23
|
+
still happen on the path the PR describes; is a stated constraint ("only
|
|
24
|
+
version N and later", "only when X") ENFORCED in code, or only written
|
|
25
|
+
in the description?
|
|
26
|
+
4. **Coverage.** Does the fix reach every site of the same problem that the
|
|
27
|
+
claim covers, including sites the PR did not touch?
|
|
28
|
+
|
|
29
|
+
A row that fails efficacy or coverage is a finding at full severity — the PR
|
|
30
|
+
ships something other than what it says. A claim the code fully implements
|
|
31
|
+
produces no output. `NONE` when every claim holds.
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pass-concurrency
|
|
3
|
+
description: Concurrency review pass — planned when the diff touches synchronisation or a read-then-write shape, or added when the session suspects a race. Every finding names what races, walks the interleaving step by step, assesses how often it can really happen, and names the lock that fits. Falsifies its own findings first; full severity.
|
|
4
|
+
tools: read, bash, grep
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
{{include:prompts/pass-common.md}}
|
|
8
|
+
|
|
9
|
+
# Lens: concurrency
|
|
10
|
+
|
|
11
|
+
Apply to: **read-modify-write races** — the code reads state, changes it in
|
|
12
|
+
application memory, and writes it back, with nothing holding the state still
|
|
13
|
+
in between. Two requests, two workers, two webhook deliveries in one batch,
|
|
14
|
+
two tabs: both read, both compute, both save, and the second save silently
|
|
15
|
+
erases the first. Nothing catches this class downstream — the tests pass, CI
|
|
16
|
+
is green, the code reads correctly line by line, and the data loss shows up
|
|
17
|
+
weeks later as "that field keeps reverting".
|
|
18
|
+
|
|
19
|
+
You are planned because the diff touches synchronisation or a
|
|
20
|
+
read-then-write shape — your plan row names it — or because the session
|
|
21
|
+
suspects a specific race. Start from that shape; you may follow it wherever it
|
|
22
|
+
leads in the diff and its blast radius, but you are not a general audit of the
|
|
23
|
+
file.
|
|
24
|
+
|
|
25
|
+
## What the shape looks like
|
|
26
|
+
|
|
27
|
+
- read an object, mutate attributes in application code, save the whole
|
|
28
|
+
object back — a concurrent writer's fields, touched in the same window and
|
|
29
|
+
not read by this path, go back to their old values;
|
|
30
|
+
- check-then-act: query for existence, branch, then create — two callers
|
|
31
|
+
both see "absent" and both create;
|
|
32
|
+
- a counter, balance, quota, or list read into memory, incremented or
|
|
33
|
+
appended to, and written back;
|
|
34
|
+
- "deduplicate in the cache" that reads the key, decides, and then writes it
|
|
35
|
+
— the decision and the write are not one operation, so two deliveries both
|
|
36
|
+
decide "not seen";
|
|
37
|
+
- an idempotency or once-only guarantee (send this message once, charge
|
|
38
|
+
once, enqueue once) resting on a read that another process can interleave;
|
|
39
|
+
- a background task, webhook handler, or retry path that can legitimately
|
|
40
|
+
run twice at once against the same row or key.
|
|
41
|
+
|
|
42
|
+
Concurrency here means **anything that can interleave**: separate processes
|
|
43
|
+
and pods, threads, background workers, async tasks on one loop, and a
|
|
44
|
+
same-request retry. A single-process assumption is a claim you must show,
|
|
45
|
+
not assume.
|
|
46
|
+
|
|
47
|
+
<!-- RATIFIED four-part-finding — do not edit; owner only -->
|
|
48
|
+
## Every finding has four parts
|
|
49
|
+
|
|
50
|
+
A finding from this lens is not postable unless all four are present, in
|
|
51
|
+
this order, inside the finding's `detail` paragraph (the `claim` stays the
|
|
52
|
+
one-sentence headline):
|
|
53
|
+
|
|
54
|
+
1. **The name** — what races. The specific state: this row's these fields,
|
|
55
|
+
this cache key, this counter.
|
|
56
|
+
2. **The walkthrough** — the interleaving, step by step, one line per step,
|
|
57
|
+
naming the actors. The standard is the archetype from this repo's own
|
|
58
|
+
review history:
|
|
59
|
+
|
|
60
|
+
> Process A — get conversation from db · Process B — get conversation
|
|
61
|
+
> from db · Process A — update conversation in Python · Process B —
|
|
62
|
+
> update conversation in Python · Process A — save · Process B — save ·
|
|
63
|
+
> we lose all of process A's update information.
|
|
64
|
+
|
|
65
|
+
Walk YOUR case that concretely, with the real call sites, and end on the
|
|
66
|
+
observable damage — what is lost, duplicated, or double-charged, and to
|
|
67
|
+
whom. A finding that says "this may race" without the walk is not a
|
|
68
|
+
finding.
|
|
69
|
+
3. **The risk assessment** — how often this can actually happen, and why
|
|
70
|
+
you believe that: what drives concurrent entry into this path (a webhook
|
|
71
|
+
provider that fires several events in one batch, a retrying client, a
|
|
72
|
+
fan-out of workers, a user double-clicking) and how wide the window
|
|
73
|
+
between the read and the write is. Cite what you read for it — the
|
|
74
|
+
caller, the task schedule, the retry decorator, the batch size. This part
|
|
75
|
+
is **the input to your reachability call** (see below), not decoration.
|
|
76
|
+
4. **The proposed lock** — the remedy, named concretely, **database-level or
|
|
77
|
+
cache-level, whichever fits this case**. Say which and why: a
|
|
78
|
+
database-level answer where the database can hold the invariant (make the
|
|
79
|
+
database compute the update rather than the application; a unique
|
|
80
|
+
constraint; a get-or-create that is one statement; a row-level lock for
|
|
81
|
+
the read-and-write window; write only the fields this path owns), a
|
|
82
|
+
cache-level answer where the coordination is across systems the database
|
|
83
|
+
does not see (an atomic add-if-absent, a named lock with a timeout).
|
|
84
|
+
Naming the remedy is MANDATORY — "this races" without a lock is half a
|
|
85
|
+
finding. Follow the remedy-size rule: name the protection and the
|
|
86
|
+
invariant it restores, do not write the rewrite.
|
|
87
|
+
<!-- /RATIFIED four-part-finding -->
|
|
88
|
+
|
|
89
|
+
<!-- RATIFIED self-falsification — do not edit; owner only -->
|
|
90
|
+
## Falsify your own finding before you emit it
|
|
91
|
+
|
|
92
|
+
This lens carries a burden on the RAISE side that no other lens carries:
|
|
93
|
+
**you must try to kill each candidate yourself, and emit only the survivors.**
|
|
94
|
+
|
|
95
|
+
The reason is worth keeping attached to the rule. Concurrency is the easiest
|
|
96
|
+
class of finding to be **confidently wrong** about — the story is vivid, it
|
|
97
|
+
sounds right, and it is unfalsifiable unless someone actually reads the
|
|
98
|
+
surrounding code. A plausible-but-wrong blocker costs this system far more
|
|
99
|
+
than a missed nit: it burns the author's trust in every other finding.
|
|
100
|
+
|
|
101
|
+
So for every candidate, go looking for what makes it false, and read for it:
|
|
102
|
+
|
|
103
|
+
- Is the write already atomic at the database — a single statement, a
|
|
104
|
+
database-computed update, a get-or-create, an upsert, a constrained
|
|
105
|
+
insert?
|
|
106
|
+
- Is the region already inside a transaction with the row locked for
|
|
107
|
+
update, or inside an existing named lock?
|
|
108
|
+
- Does a unique constraint or an idempotency key already make the second
|
|
109
|
+
writer fail loudly instead of silently overwriting?
|
|
110
|
+
- Can the two writers actually coexist? Is the path serialized upstream —
|
|
111
|
+
one worker, one consumer per key, a queue partitioned by that key, a
|
|
112
|
+
lock held by the caller?
|
|
113
|
+
- Do the two paths touch the SAME fields? An overwrite needs a field that
|
|
114
|
+
the losing writer set and the winning writer read stale.
|
|
115
|
+
- Is the state per-request or per-object-instance rather than shared at all?
|
|
116
|
+
|
|
117
|
+
Record the hunt: say in `evidence` what you checked and what you found. If
|
|
118
|
+
the falsification succeeds, the candidate is dead — do not emit it, and do
|
|
119
|
+
not downgrade it into a vague `[question]` to keep it alive. If you cannot
|
|
120
|
+
settle it by reading, you may raise it as a `[question]` that names exactly
|
|
121
|
+
what would settle it — but never as a blocker.
|
|
122
|
+
|
|
123
|
+
**`pass-validate` remains the adversary and still vetoes.** This
|
|
124
|
+
self-falsification is an ADDITIONAL gate on the raise side, not a
|
|
125
|
+
replacement for validation, and it never licenses you to skip evidence
|
|
126
|
+
because "the validator will check".
|
|
127
|
+
<!-- /RATIFIED self-falsification -->
|
|
128
|
+
|
|
129
|
+
## Severity is the ordinary scale — this lens can block
|
|
130
|
+
|
|
131
|
+
Silent data loss is the archetypal `P0`/`P1`, and there is no cap on this
|
|
132
|
+
lens: judge severity by the damage the walkthrough ends on. Lost updates to
|
|
133
|
+
data a customer can see, a marketing message or charge sent twice, a
|
|
134
|
+
double-created record that breaks a uniqueness assumption downstream — those
|
|
135
|
+
are blockers when the risk assessment supports them.
|
|
136
|
+
|
|
137
|
+
**Reachability is judged PER FINDING, from your risk assessment.** Do not
|
|
138
|
+
inherit a default and do not assume a race is always `routine` here. Set the
|
|
139
|
+
axis on what you actually established about the path:
|
|
140
|
+
|
|
141
|
+
- `routine` — concurrent entry happens in normal operation: a webhook
|
|
142
|
+
receiver whose provider batches events, a hot endpoint, a retried task, a
|
|
143
|
+
fan-out of workers on one key.
|
|
144
|
+
- `plausible` — it needs an unusual but realistic coincidence: two admins
|
|
145
|
+
acting in the same second, a retry landing on top of the original.
|
|
146
|
+
- `contrived` — it needs several independent things to align, or a caller
|
|
147
|
+
that does not exist: a once-a-day management command run twice by hand.
|
|
148
|
+
|
|
149
|
+
Reachability only ever WEAKENS a tag — never use it to strengthen one, and
|
|
150
|
+
`contrived` never blocks. Say in the finding which rung you chose and what
|
|
151
|
+
made you choose it; an unexplained `routine` on a cold path is exactly the
|
|
152
|
+
overreach this lens exists to avoid.
|
|
153
|
+
|
|
154
|
+
## Stay inside your lens
|
|
155
|
+
|
|
156
|
+
Multi-write paths that need one transaction so a failure cannot leave
|
|
157
|
+
half-written state belong to the transactional-integrity concern of the
|
|
158
|
+
lenses that own data safety — anchor here only when the defect is two
|
|
159
|
+
writers interleaving. Version skew between old and new pods belongs to
|
|
160
|
+
`pass-backcompat`. In-process state lost on restart belongs to
|
|
161
|
+
`pass-statelessness`. Redelivery semantics belong to `pass-delivery`. When a
|
|
162
|
+
concern could anchor in two lenses, anchor it at the interleaving or leave
|
|
163
|
+
it to the owning lens.
|
|
164
|
+
|
|
165
|
+
`NONE` is the correct output whenever the suspected shape turns out to be
|
|
166
|
+
safe — and that is a **good** outcome for this lens, not a wasted pass:
|
|
167
|
+
killing a suspicion by reading is exactly what you were added to do. Say
|
|
168
|
+
plainly what you checked and why it holds.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pass-consistency
|
|
3
|
+
description: Consistency review pass — does the change treat alike what is alike, within itself and against the code around it? A sibling left out, one path handled differently, a pattern the repo follows everywhere but here. Inconsistency is where bugs hide; findings name both sides.
|
|
4
|
+
tools: read, bash, grep
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
{{include:prompts/pass-common.md}}
|
|
8
|
+
|
|
9
|
+
# Lens: consistency
|
|
10
|
+
|
|
11
|
+
Apply to: whether the change is consistent — **with itself** (everything it
|
|
12
|
+
touches of one kind is handled the same way) and **with the code around it**
|
|
13
|
+
(it follows the patterns its siblings, callers and neighbours already follow).
|
|
14
|
+
An inconsistency is often the visible edge of a defect: the one handler that
|
|
15
|
+
forgot the check the others make, the one locale missing the key, the one
|
|
16
|
+
call site still passing the old argument.
|
|
17
|
+
|
|
18
|
+
## Two directions, both by reading and grep
|
|
19
|
+
|
|
20
|
+
1. **Within the change.** List what the change does repeatedly — the fields it
|
|
21
|
+
adds, the handlers it edits, the files it updates in parallel (locales,
|
|
22
|
+
schemas, docs, client and server, every implementation of an interface).
|
|
23
|
+
Then look for the member that is treated differently: skipped, updated
|
|
24
|
+
with a different value, given a different default, error handling or
|
|
25
|
+
order. A change applied to four of five siblings is the finding.
|
|
26
|
+
2. **Against the surrounding code.** For each new or changed unit, find its
|
|
27
|
+
nearest siblings — the other endpoints in the router, the other
|
|
28
|
+
implementations of the interface, the other migrations, the other commands
|
|
29
|
+
— and read how THEY do the same job: validation, error handling and
|
|
30
|
+
messages, logging, auth and permission checks, resource cleanup,
|
|
31
|
+
pagination, i18n, telemetry, the shape of return values. Where the new
|
|
32
|
+
code departs from what every sibling does, say which siblings and what
|
|
33
|
+
they do.
|
|
34
|
+
|
|
35
|
+
## Every finding names both sides
|
|
36
|
+
|
|
37
|
+
Cite the consistent majority (file:line, at least one) and the outlier
|
|
38
|
+
(file:line), and what the difference DOES: the request that skips the check,
|
|
39
|
+
the user who sees the untranslated key, the caller that gets a different
|
|
40
|
+
error. A difference with a reason in the code (the sibling handles a
|
|
41
|
+
different case, a comment explains the departure) is not a finding.
|
|
42
|
+
|
|
43
|
+
{{include:prompts/pass-quality-common.md}}
|
|
44
|
+
|
|
45
|
+
"The siblings use camelCase" is a style matter, not consistency; "the
|
|
46
|
+
siblings all check permission X and this one does not" is consistency.
|
|
47
|
+
|
|
48
|
+
## Severity follows the consequence
|
|
49
|
+
|
|
50
|
+
An inconsistency that only makes the code harder to follow is debt: `P3` at
|
|
51
|
+
most (`nit` when trivial). An inconsistency whose outlier BREAKS — a missing
|
|
52
|
+
check, a missing key, a path that now fails — is a defect: judge it on the
|
|
53
|
+
failure you can show, at full severity under the ordinary map, and say what
|
|
54
|
+
fails on which path. The validator caps what shows no failure.
|
|
55
|
+
|
|
56
|
+
`NONE` is the correct output when the change treats alike what is alike and
|
|
57
|
+
fits the code around it.
|
|
@@ -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.
|