@aria_asi/cli 0.2.40 → 0.2.41
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/bin/aria.js +236 -34
- package/dist/aria-connector/src/action-ledger-core.d.ts +387 -0
- package/dist/aria-connector/src/action-ledger-core.d.ts.map +1 -0
- package/dist/aria-connector/src/action-ledger-core.js +638 -0
- package/dist/aria-connector/src/action-ledger-core.js.map +1 -0
- package/dist/aria-connector/src/chat.d.ts.map +1 -1
- package/dist/aria-connector/src/chat.js +5 -6
- package/dist/aria-connector/src/chat.js.map +1 -1
- package/dist/aria-connector/src/codebase-scanner.d.ts +1 -1
- package/dist/aria-connector/src/codebase-scanner.d.ts.map +1 -1
- package/dist/aria-connector/src/connectors/claude-code.d.ts +1 -0
- package/dist/aria-connector/src/connectors/claude-code.d.ts.map +1 -1
- package/dist/aria-connector/src/connectors/claude-code.js +152 -14
- package/dist/aria-connector/src/connectors/claude-code.js.map +1 -1
- package/dist/aria-connector/src/connectors/codebase-awareness.d.ts +10 -0
- package/dist/aria-connector/src/connectors/codebase-awareness.d.ts.map +1 -1
- package/dist/aria-connector/src/connectors/codebase-awareness.js +276 -27
- package/dist/aria-connector/src/connectors/codebase-awareness.js.map +1 -1
- package/dist/aria-connector/src/connectors/codex.d.ts +3 -1
- package/dist/aria-connector/src/connectors/codex.d.ts.map +1 -1
- package/dist/aria-connector/src/connectors/codex.js +1223 -41
- package/dist/aria-connector/src/connectors/codex.js.map +1 -1
- package/dist/aria-connector/src/connectors/cursor.d.ts.map +1 -1
- package/dist/aria-connector/src/connectors/cursor.js +7 -0
- package/dist/aria-connector/src/connectors/cursor.js.map +1 -1
- package/dist/aria-connector/src/connectors/governed-adapter.d.ts +30 -0
- package/dist/aria-connector/src/connectors/governed-adapter.d.ts.map +1 -0
- package/dist/aria-connector/src/connectors/governed-adapter.js +132 -0
- package/dist/aria-connector/src/connectors/governed-adapter.js.map +1 -0
- package/dist/aria-connector/src/connectors/opencode.d.ts +3 -1
- package/dist/aria-connector/src/connectors/opencode.d.ts.map +1 -1
- package/dist/aria-connector/src/connectors/opencode.js +18 -2
- package/dist/aria-connector/src/connectors/opencode.js.map +1 -1
- package/dist/aria-connector/src/connectors/repo-guard.d.ts.map +1 -1
- package/dist/aria-connector/src/connectors/repo-guard.js +25 -14
- package/dist/aria-connector/src/connectors/repo-guard.js.map +1 -1
- package/dist/aria-connector/src/connectors/runtime.d.ts.map +1 -1
- package/dist/aria-connector/src/connectors/runtime.js +92 -2
- package/dist/aria-connector/src/connectors/runtime.js.map +1 -1
- package/dist/aria-connector/src/connectors/shell.d.ts.map +1 -1
- package/dist/aria-connector/src/connectors/shell.js +123 -7
- package/dist/aria-connector/src/connectors/shell.js.map +1 -1
- package/dist/aria-connector/src/cross-cli-hive-binding.d.ts +63 -0
- package/dist/aria-connector/src/cross-cli-hive-binding.d.ts.map +1 -0
- package/dist/aria-connector/src/cross-cli-hive-binding.js +205 -0
- package/dist/aria-connector/src/cross-cli-hive-binding.js.map +1 -0
- package/dist/aria-connector/src/garden-control-plane.d.ts +6 -1
- package/dist/aria-connector/src/garden-control-plane.d.ts.map +1 -1
- package/dist/aria-connector/src/garden-control-plane.js +8 -2
- package/dist/aria-connector/src/garden-control-plane.js.map +1 -1
- package/dist/aria-connector/src/governed-surface-runner.d.ts +189 -0
- package/dist/aria-connector/src/governed-surface-runner.d.ts.map +1 -0
- package/dist/aria-connector/src/governed-surface-runner.js +1022 -0
- package/dist/aria-connector/src/governed-surface-runner.js.map +1 -0
- package/dist/aria-connector/src/index.d.ts +10 -1
- package/dist/aria-connector/src/index.d.ts.map +1 -1
- package/dist/aria-connector/src/index.js +5 -0
- package/dist/aria-connector/src/index.js.map +1 -1
- package/dist/aria-connector/src/task-runner.d.ts +3 -0
- package/dist/aria-connector/src/task-runner.d.ts.map +1 -0
- package/dist/aria-connector/src/task-runner.js +3526 -0
- package/dist/aria-connector/src/task-runner.js.map +1 -0
- package/dist/aria-web/src/lib/codebase-scanner.d.ts +21 -2
- package/dist/aria-web/src/lib/codebase-scanner.d.ts.map +1 -1
- package/dist/aria-web/src/lib/codebase-scanner.js +59 -14
- package/dist/aria-web/src/lib/codebase-scanner.js.map +1 -1
- package/dist/assets/hooks/README.md +58 -0
- package/dist/assets/hooks/aria-agent-handoff.mjs +147 -2
- package/dist/assets/hooks/aria-agent-ledger-merge.mjs +31 -7
- package/dist/assets/hooks/aria-architect-fallback.mjs +10 -2
- package/dist/assets/hooks/aria-claim-evidence-stop-gate.mjs +240 -0
- package/dist/assets/hooks/aria-cognition-substrate-binding.mjs +84 -10
- package/dist/assets/hooks/aria-first-class-coach.mjs +305 -10
- package/dist/assets/hooks/aria-harness-via-sdk.mjs +93 -16
- package/dist/assets/hooks/aria-import-resolution-gate.mjs +106 -20
- package/dist/assets/hooks/aria-outcome-record.mjs +56 -20
- package/dist/assets/hooks/aria-pre-emit-autoload.mjs +1809 -0
- package/dist/assets/hooks/aria-pre-emit-autoload.mjs.before-orchestration-redesign +1400 -0
- package/dist/assets/hooks/aria-pre-emit-dryrun.mjs +22 -3
- package/dist/assets/hooks/aria-pre-text-gate.mjs +11 -2
- package/dist/assets/hooks/aria-pre-tool-gate.mjs +477 -81
- package/dist/assets/hooks/aria-pre-tool-use.mjs +70 -6
- package/dist/assets/hooks/aria-preprompt-consult.mjs +23 -4
- package/dist/assets/hooks/aria-repo-doctrine-gate.mjs +29 -3
- package/dist/assets/hooks/aria-stop-gate.mjs +585 -76
- package/dist/assets/hooks/aria-trigger-autolearn.mjs +17 -3
- package/dist/assets/hooks/aria-universal-turn-packet.mjs +1165 -0
- package/dist/assets/hooks/aria-userprompt-abandon-detect.mjs +9 -1
- package/dist/assets/hooks/canonical-settings-block.json +172 -0
- package/dist/assets/hooks/codex-native/aria-harness-ticker-sidecar.mjs +92 -0
- package/dist/assets/hooks/codex-native/aria-hive-wal-consumer.mjs +86 -0
- package/dist/assets/hooks/codex-native/aria-live-ticker.mjs +38 -0
- package/dist/assets/hooks/codex-native/aria-post-tool-use.mjs +236 -0
- package/dist/assets/hooks/codex-native/aria-pre-tool-use.mjs +362 -0
- package/dist/assets/hooks/codex-native/aria-stop.mjs +691 -0
- package/dist/assets/hooks/codex-native/aria-userprompt-submit.mjs +623 -0
- package/dist/assets/hooks/codex-native/atlas-session-context.mjs +121 -0
- package/dist/assets/hooks/codex-native/lib/evaluate-with-kernel.mjs +257 -0
- package/dist/assets/hooks/codex-native/lib/hive-wal-consumer.mjs +452 -0
- package/dist/assets/hooks/codex-native/lib/kernel/deterministic-cognitive-kernel.mjs +914 -0
- package/dist/assets/hooks/codex-native/lib/project-boundary-cognition.mjs +143 -0
- package/dist/assets/hooks/codex-native/lib/runtime-client.mjs +3567 -0
- package/dist/assets/hooks/codex-native/lib/task-project-ledger.mjs +294 -0
- package/dist/assets/hooks/doctrine_trigger_map.json +236 -25
- package/dist/assets/hooks/doctrine_trigger_map.schema.json +46 -0
- package/dist/assets/hooks/install.sh +84 -0
- package/dist/assets/hooks/lib/action-ledger-core.mjs +269 -0
- package/dist/assets/hooks/lib/aria-gate-ledger.mjs +143 -0
- package/dist/assets/hooks/lib/ast-stub-shape-detector.mjs +107 -0
- package/dist/assets/hooks/lib/atlas-dossier-client.mjs +151 -0
- package/dist/assets/hooks/lib/atlas-orchestrator-postwire.mjs +221 -0
- package/dist/assets/hooks/lib/canonical-lenses.mjs +83 -6
- package/dist/assets/hooks/lib/coach-intent-classifier.mjs +248 -0
- package/dist/assets/hooks/lib/cognitive-block-parser.mjs +111 -0
- package/dist/assets/hooks/lib/doctrine-trigger-map-loader.mjs +137 -0
- package/dist/assets/hooks/lib/domain-output-quality.mjs +132 -3
- package/dist/assets/hooks/lib/empty-catch-scanner.mjs +91 -0
- package/dist/assets/hooks/lib/end-phase-qa-autofire.mjs +426 -0
- package/dist/assets/hooks/lib/evaluate-with-kernel.mjs +133 -0
- package/dist/assets/hooks/lib/first-class-coach.mjs +454 -19
- package/dist/assets/hooks/lib/gate-audit.mjs +12 -2
- package/dist/assets/hooks/lib/gate-loop-state.mjs +11 -2
- package/dist/assets/hooks/lib/goal-contract-quality.mjs +302 -0
- package/dist/assets/hooks/lib/hook-message-window.mjs +101 -9
- package/dist/assets/hooks/lib/invocation-required-verifier.mjs +184 -0
- package/dist/assets/hooks/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
- package/dist/assets/hooks/lib/obligation-ledger.mjs +147 -0
- package/dist/assets/hooks/lib/orchestration-manifest-extract.mjs +217 -0
- package/dist/assets/hooks/lib/owner-authorizations.mjs +269 -0
- package/dist/assets/hooks/lib/probe-discipline-scanner.mjs +142 -0
- package/dist/assets/hooks/lib/project-boundary-cognition.mjs +143 -0
- package/dist/assets/hooks/lib/recovery-context.mjs +151 -0
- package/dist/assets/hooks/lib/recovery-template-loader.mjs +154 -0
- package/dist/assets/hooks/lib/self-doctrine-check.mjs +321 -0
- package/dist/assets/hooks/lib/sensitive-shape-detector.mjs +64 -0
- package/dist/assets/hooks/lib/skill-autoload-gate-impl.mjs +226 -1
- package/dist/assets/hooks/lib/stop-hook-protocol.mjs +166 -0
- package/dist/assets/hooks/lib/surface-caught.mjs +94 -0
- package/dist/assets/hooks/recovery-templates/force-reauthor.md +67 -0
- package/dist/assets/hooks/recovery-templates/handoff-recovery.md +25 -0
- package/dist/assets/hooks/scripts/check-hard-risk-prefix.mjs +99 -0
- package/dist/assets/hooks/skills/aria-conversational-doctrine-discipline/SKILL.md +101 -0
- package/dist/assets/hooks/test-aria-preturn-memory-gate.mjs +2 -2
- package/dist/assets/hooks/test-tier-lens-labeling.mjs +14 -3
- package/dist/assets/opencode-plugins/harness-context/index.js +39 -6
- package/dist/assets/opencode-plugins/harness-context/task-project-ledger.mjs +5 -1
- package/dist/assets/opencode-plugins/harness-gate/index.js +36 -0
- package/dist/assets/opencode-plugins/harness-gate/lib/atlas-dossier-client.js +1 -0
- package/dist/assets/opencode-plugins/harness-gate/lib/recovery-grants.js +79 -0
- package/dist/assets/opencode-plugins/harness-outcome/index.js +12 -0
- package/dist/assets/opencode-plugins/harness-stop/index.js +97 -2
- package/dist/assets/opencode-plugins/harness-stop/lib/atlas-dossier-client.js +1 -0
- package/dist/assets/opencode-plugins/harness-stop/lib/domain-output-quality.js +15 -2
- package/dist/assets/opencode-plugins/lib/coach.js +148 -0
- package/dist/runtime/coach-kernel.mjs +144 -7
- package/dist/runtime/codex-bridge.mjs +254 -8
- package/dist/runtime/discipline/doctrine_trigger_map.json +236 -25
- package/dist/runtime/discipline/skills/aria-cognition/34-frameworks-unified/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-aristotle-cognitives/SKILL.md +128 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-aristotle-intra-phase/SKILL.md +99 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-aristotle-post-phase/SKILL.md +118 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-aristotle-pre-phase/SKILL.md +117 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-axioms-first-principles/SKILL.md +202 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-axioms-first-principles/agents/openai.yaml +4 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-axioms-first-principles/references/source-map.md +130 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-backend-architect/SKILL.md +124 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-backend-architect/references/backend-cookbook.md +417 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-business-audit/SKILL.md +133 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-business-audit/references/audit-cookbook.md +247 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-business-frame/SKILL.md +138 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-business-frame/references/business-cookbook.md +154 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-chat/SKILL.md +84 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-chat/scripts/aria-chat.sh +57 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-cognition-autofire/SKILL.md +137 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-cognition-batch/SKILL.md +264 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-decision-mizan/SKILL.md +136 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-decision-mizan/references/decision-frameworks.md +287 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-first-class-operating-contract/SKILL.md +104 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-frontend-architect/SKILL.md +123 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-frontend-architect/references/frontend-cookbook.md +358 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-fullstack-orchestrator/SKILL.md +127 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-fullstack-orchestrator/references/fullstack-cookbook.md +383 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-gtm-architect/SKILL.md +126 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-gtm-architect/references/gtm-cookbook.md +235 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-harness-deploy/SKILL.md +145 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-harness-no-stripping/SKILL.md +135 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-harness-onboarding/SKILL.md +130 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-harness-output-discipline/SKILL.md +120 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-harness-substrate-binding/SKILL.md +139 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-http-harness-client/SKILL.md +85 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-http-harness-client/scripts/smoke.mjs +47 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-k8s-deploy/SKILL.md +174 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-k8s-deploy/agents/openai.yaml +3 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-ladduniframe/SKILL.md +60 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-ledger-fleet-execution/SKILL.md +126 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-live-ops/SKILL.md +54 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-mac-ssh-ops/SKILL.md +100 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-memory-index/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-noor-cognitives/SKILL.md +120 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-ops/SKILL.md +60 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-ops/references/live-endpoints.md +59 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-quality-audit/SKILL.md +133 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-readable-output/SKILL.md +239 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-readable-output/references/layout-cookbook.md +366 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-reasoning/SKILL.md +67 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-reasoning/references/core-principles.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-repo-audit/SKILL.md +135 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-repo-audit/references/repo-audit-cookbook.md +375 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-research-orchestrator/SKILL.md +138 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-research-orchestrator/references/research-patterns.md +270 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-retention-engine/SKILL.md +120 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-retention-engine/references/retention-cookbook.md +271 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-revenue-engine/SKILL.md +128 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-revenue-engine/references/revenue-cookbook.md +227 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-senior-code-audit/SKILL.md +233 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-senior-code-audit/references/audit-checklist.md +369 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-senior-code-cookbook/SKILL.md +288 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-senior-code-cookbook/references/engineering-cookbook.md +489 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-soul-principles/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/aria-task-codex-executor/SKILL.md +86 -0
- package/dist/runtime/discipline/skills/aria-cognition/aristotle-engine/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/cross-domain-24/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/deepsoul-emotional/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/fitrah-guard/SKILL.md +78 -0
- package/dist/runtime/discipline/skills/aria-cognition/ghazali-8lens/SKILL.md +227 -29
- package/dist/runtime/discipline/skills/aria-cognition/ghazali-8lens/references/ghazali-8lens-cookbook.md +797 -0
- package/dist/runtime/discipline/skills/aria-cognition/ijtihad-novel/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/ilham-intuition/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/never-guess/SKILL.md +77 -0
- package/dist/runtime/discipline/skills/aria-cognition/noor-recognition/SKILL.md +45 -0
- package/dist/runtime/discipline/skills/aria-cognition/qiyas-analogy/SKILL.md +174 -14
- package/dist/runtime/discipline/skills/aria-cognition/ruh-basis/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/tadabbur/SKILL.md +506 -0
- package/dist/runtime/discipline/skills/aria-cognition/tadabbur/references/tadabbur-cookbook.md +921 -0
- package/dist/runtime/discipline/skills/aria-cognition/tadabbur-ops/SKILL.md +42 -0
- package/dist/runtime/discipline/skills/aria-cognition/tafakkur/SKILL.md +104 -0
- package/dist/runtime/doctrine_trigger_map.json +236 -25
- package/dist/runtime/embedded-public-key.mjs +27 -0
- package/dist/runtime/gated-ledger.mjs +41 -14
- package/dist/runtime/harness-daemon.mjs +85 -10
- package/dist/runtime/hive-wal-publisher.mjs +292 -0
- package/dist/runtime/hooks/README.md +58 -0
- package/dist/runtime/hooks/aria-agent-handoff.mjs +147 -2
- package/dist/runtime/hooks/aria-agent-ledger-merge.mjs +31 -7
- package/dist/runtime/hooks/aria-architect-fallback.mjs +10 -2
- package/dist/runtime/hooks/aria-claim-evidence-stop-gate.mjs +240 -0
- package/dist/runtime/hooks/aria-cognition-substrate-binding.mjs +84 -10
- package/dist/runtime/hooks/aria-first-class-coach.mjs +305 -10
- package/dist/runtime/hooks/aria-harness-via-sdk.mjs +93 -16
- package/dist/runtime/hooks/aria-import-resolution-gate.mjs +106 -20
- package/dist/runtime/hooks/aria-outcome-record.mjs +56 -20
- package/dist/runtime/hooks/aria-pre-emit-autoload.mjs +1809 -0
- package/dist/runtime/hooks/aria-pre-emit-autoload.mjs.before-orchestration-redesign +1400 -0
- package/dist/runtime/hooks/aria-pre-emit-dryrun.mjs +22 -3
- package/dist/runtime/hooks/aria-pre-text-gate.mjs +11 -2
- package/dist/runtime/hooks/aria-pre-tool-gate.mjs +477 -81
- package/dist/runtime/hooks/aria-pre-tool-use.mjs +70 -6
- package/dist/runtime/hooks/aria-preprompt-consult.mjs +23 -4
- package/dist/runtime/hooks/aria-repo-doctrine-gate.mjs +29 -3
- package/dist/runtime/hooks/aria-stop-gate.mjs +585 -76
- package/dist/runtime/hooks/aria-trigger-autolearn.mjs +17 -3
- package/dist/runtime/hooks/aria-universal-turn-packet.mjs +1165 -0
- package/dist/runtime/hooks/aria-userprompt-abandon-detect.mjs +9 -1
- package/dist/runtime/hooks/canonical-settings-block.json +172 -0
- package/dist/runtime/hooks/codex-native/aria-harness-ticker-sidecar.mjs +92 -0
- package/dist/runtime/hooks/codex-native/aria-hive-wal-consumer.mjs +86 -0
- package/dist/runtime/hooks/codex-native/aria-live-ticker.mjs +38 -0
- package/dist/runtime/hooks/codex-native/aria-post-tool-use.mjs +236 -0
- package/dist/runtime/hooks/codex-native/aria-pre-tool-use.mjs +362 -0
- package/dist/runtime/hooks/codex-native/aria-stop.mjs +691 -0
- package/dist/runtime/hooks/codex-native/aria-userprompt-submit.mjs +623 -0
- package/dist/runtime/hooks/codex-native/atlas-session-context.mjs +121 -0
- package/dist/runtime/hooks/codex-native/lib/evaluate-with-kernel.mjs +257 -0
- package/dist/runtime/hooks/codex-native/lib/hive-wal-consumer.mjs +452 -0
- package/dist/runtime/hooks/codex-native/lib/kernel/deterministic-cognitive-kernel.mjs +914 -0
- package/dist/runtime/hooks/codex-native/lib/project-boundary-cognition.mjs +143 -0
- package/dist/runtime/hooks/codex-native/lib/runtime-client.mjs +3567 -0
- package/dist/runtime/hooks/codex-native/lib/task-project-ledger.mjs +294 -0
- package/dist/runtime/hooks/doctrine_trigger_map.json +236 -25
- package/dist/runtime/hooks/doctrine_trigger_map.schema.json +46 -0
- package/dist/runtime/hooks/install.sh +84 -0
- package/dist/runtime/hooks/lib/action-ledger-core.mjs +269 -0
- package/dist/runtime/hooks/lib/aria-gate-ledger.mjs +143 -0
- package/dist/runtime/hooks/lib/ast-stub-shape-detector.mjs +107 -0
- package/dist/runtime/hooks/lib/atlas-dossier-client.mjs +151 -0
- package/dist/runtime/hooks/lib/atlas-orchestrator-postwire.mjs +221 -0
- package/dist/runtime/hooks/lib/canonical-lenses.mjs +83 -6
- package/dist/runtime/hooks/lib/coach-intent-classifier.mjs +248 -0
- package/dist/runtime/hooks/lib/cognitive-block-parser.mjs +111 -0
- package/dist/runtime/hooks/lib/doctrine-trigger-map-loader.mjs +137 -0
- package/dist/runtime/hooks/lib/domain-output-quality.mjs +132 -3
- package/dist/runtime/hooks/lib/empty-catch-scanner.mjs +91 -0
- package/dist/runtime/hooks/lib/end-phase-qa-autofire.mjs +426 -0
- package/dist/runtime/hooks/lib/evaluate-with-kernel.mjs +133 -0
- package/dist/runtime/hooks/lib/first-class-coach.mjs +454 -19
- package/dist/runtime/hooks/lib/gate-audit.mjs +12 -2
- package/dist/runtime/hooks/lib/gate-loop-state.mjs +11 -2
- package/dist/runtime/hooks/lib/goal-contract-quality.mjs +302 -0
- package/dist/runtime/hooks/lib/hook-message-window.mjs +101 -9
- package/dist/runtime/hooks/lib/invocation-required-verifier.mjs +184 -0
- package/dist/runtime/hooks/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
- package/dist/runtime/hooks/lib/obligation-ledger.mjs +147 -0
- package/dist/runtime/hooks/lib/orchestration-manifest-extract.mjs +217 -0
- package/dist/runtime/hooks/lib/owner-authorizations.mjs +269 -0
- package/dist/runtime/hooks/lib/probe-discipline-scanner.mjs +142 -0
- package/dist/runtime/hooks/lib/project-boundary-cognition.mjs +143 -0
- package/dist/runtime/hooks/lib/recovery-context.mjs +151 -0
- package/dist/runtime/hooks/lib/recovery-template-loader.mjs +154 -0
- package/dist/runtime/hooks/lib/self-doctrine-check.mjs +321 -0
- package/dist/runtime/hooks/lib/sensitive-shape-detector.mjs +64 -0
- package/dist/runtime/hooks/lib/skill-autoload-gate-impl.mjs +226 -1
- package/dist/runtime/hooks/lib/stop-hook-protocol.mjs +166 -0
- package/dist/runtime/hooks/lib/surface-caught.mjs +94 -0
- package/dist/runtime/hooks/recovery-templates/force-reauthor.md +67 -0
- package/dist/runtime/hooks/recovery-templates/handoff-recovery.md +25 -0
- package/dist/runtime/hooks/scripts/check-hard-risk-prefix.mjs +99 -0
- package/dist/runtime/hooks/skills/aria-conversational-doctrine-discipline/SKILL.md +101 -0
- package/dist/runtime/hooks/test-aria-preturn-memory-gate.mjs +2 -2
- package/dist/runtime/hooks/test-tier-lens-labeling.mjs +14 -3
- package/dist/runtime/lib/evaluate-with-kernel.mjs +133 -0
- package/dist/runtime/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
- package/dist/runtime/local-phase.mjs +10 -5
- package/dist/runtime/manifest.json +8 -8
- package/dist/runtime/packet-verifier.mjs +166 -0
- package/dist/runtime/provider-proxy.mjs +13 -0
- package/dist/runtime/quality-enforcer.mjs +40 -23
- package/dist/runtime/runtime-rails/registry.mjs +252 -0
- package/dist/runtime/sdk/BUNDLED.json +2 -2
- package/dist/runtime/sdk/index.d.ts +119 -4
- package/dist/runtime/sdk/index.js +138 -12
- package/dist/runtime/sdk/index.js.map +1 -1
- package/dist/runtime/service.mjs +8036 -764
- package/dist/runtime/sub-agent-enforcer.mjs +201 -0
- package/dist/runtime/task-project-ledger.mjs +5 -1
- package/dist/sdk/BUNDLED.json +2 -2
- package/dist/sdk/index.d.ts +119 -4
- package/dist/sdk/index.js +138 -12
- package/dist/sdk/index.js.map +1 -1
- package/hooks/README.md +58 -0
- package/hooks/aria-agent-handoff.mjs +147 -2
- package/hooks/aria-agent-ledger-merge.mjs +31 -7
- package/hooks/aria-architect-fallback.mjs +10 -2
- package/hooks/aria-claim-evidence-stop-gate.mjs +240 -0
- package/hooks/aria-cognition-substrate-binding.mjs +84 -10
- package/hooks/aria-first-class-coach.mjs +305 -10
- package/hooks/aria-harness-via-sdk.mjs +93 -16
- package/hooks/aria-import-resolution-gate.mjs +106 -20
- package/hooks/aria-outcome-record.mjs +56 -20
- package/hooks/aria-pre-emit-autoload.mjs +1809 -0
- package/hooks/aria-pre-emit-autoload.mjs.before-orchestration-redesign +1400 -0
- package/hooks/aria-pre-emit-dryrun.mjs +22 -3
- package/hooks/aria-pre-text-gate.mjs +11 -2
- package/hooks/aria-pre-tool-gate.mjs +477 -81
- package/hooks/aria-pre-tool-use.mjs +70 -6
- package/hooks/aria-preprompt-consult.mjs +23 -4
- package/hooks/aria-repo-doctrine-gate.mjs +29 -3
- package/hooks/aria-stop-gate.mjs +585 -76
- package/hooks/aria-trigger-autolearn.mjs +17 -3
- package/hooks/aria-universal-turn-packet.mjs +1165 -0
- package/hooks/aria-userprompt-abandon-detect.mjs +9 -1
- package/hooks/canonical-settings-block.json +172 -0
- package/hooks/codex-native/aria-harness-ticker-sidecar.mjs +92 -0
- package/hooks/codex-native/aria-hive-wal-consumer.mjs +86 -0
- package/hooks/codex-native/aria-live-ticker.mjs +38 -0
- package/hooks/codex-native/aria-post-tool-use.mjs +236 -0
- package/hooks/codex-native/aria-pre-tool-use.mjs +362 -0
- package/hooks/codex-native/aria-stop.mjs +691 -0
- package/hooks/codex-native/aria-userprompt-submit.mjs +623 -0
- package/hooks/codex-native/atlas-session-context.mjs +121 -0
- package/hooks/codex-native/lib/evaluate-with-kernel.mjs +257 -0
- package/hooks/codex-native/lib/hive-wal-consumer.mjs +452 -0
- package/hooks/codex-native/lib/kernel/deterministic-cognitive-kernel.mjs +914 -0
- package/hooks/codex-native/lib/project-boundary-cognition.mjs +143 -0
- package/hooks/codex-native/lib/runtime-client.mjs +3567 -0
- package/hooks/codex-native/lib/task-project-ledger.mjs +294 -0
- package/hooks/doctrine_trigger_map.json +236 -25
- package/hooks/doctrine_trigger_map.schema.json +46 -0
- package/hooks/install.sh +84 -0
- package/hooks/lib/action-ledger-core.mjs +269 -0
- package/hooks/lib/aria-gate-ledger.mjs +143 -0
- package/hooks/lib/ast-stub-shape-detector.mjs +107 -0
- package/hooks/lib/atlas-dossier-client.mjs +151 -0
- package/hooks/lib/atlas-orchestrator-postwire.mjs +221 -0
- package/hooks/lib/canonical-lenses.mjs +83 -6
- package/hooks/lib/coach-intent-classifier.mjs +248 -0
- package/hooks/lib/cognitive-block-parser.mjs +111 -0
- package/hooks/lib/doctrine-trigger-map-loader.mjs +137 -0
- package/hooks/lib/domain-output-quality.mjs +132 -3
- package/hooks/lib/empty-catch-scanner.mjs +91 -0
- package/hooks/lib/end-phase-qa-autofire.mjs +426 -0
- package/hooks/lib/evaluate-with-kernel.mjs +133 -0
- package/hooks/lib/first-class-coach.mjs +454 -19
- package/hooks/lib/gate-audit.mjs +12 -2
- package/hooks/lib/gate-loop-state.mjs +11 -2
- package/hooks/lib/goal-contract-quality.mjs +302 -0
- package/hooks/lib/hook-message-window.mjs +101 -9
- package/hooks/lib/invocation-required-verifier.mjs +184 -0
- package/hooks/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
- package/hooks/lib/obligation-ledger.mjs +147 -0
- package/hooks/lib/orchestration-manifest-extract.mjs +217 -0
- package/hooks/lib/owner-authorizations.mjs +269 -0
- package/hooks/lib/probe-discipline-scanner.mjs +142 -0
- package/hooks/lib/project-boundary-cognition.mjs +143 -0
- package/hooks/lib/recovery-context.mjs +151 -0
- package/hooks/lib/recovery-template-loader.mjs +154 -0
- package/hooks/lib/self-doctrine-check.mjs +321 -0
- package/hooks/lib/sensitive-shape-detector.mjs +64 -0
- package/hooks/lib/skill-autoload-gate-impl.mjs +226 -1
- package/hooks/lib/stop-hook-protocol.mjs +166 -0
- package/hooks/lib/surface-caught.mjs +94 -0
- package/hooks/recovery-templates/force-reauthor.md +67 -0
- package/hooks/recovery-templates/handoff-recovery.md +25 -0
- package/hooks/scripts/check-hard-risk-prefix.mjs +99 -0
- package/hooks/skills/aria-conversational-doctrine-discipline/SKILL.md +101 -0
- package/hooks/test-aria-preturn-memory-gate.mjs +2 -2
- package/hooks/test-tier-lens-labeling.mjs +14 -3
- package/opencode-plugins/harness-context/index.js +39 -6
- package/opencode-plugins/harness-context/task-project-ledger.mjs +5 -1
- package/opencode-plugins/harness-gate/index.js +36 -0
- package/opencode-plugins/harness-gate/lib/atlas-dossier-client.js +1 -0
- package/opencode-plugins/harness-gate/lib/recovery-grants.js +79 -0
- package/opencode-plugins/harness-outcome/index.js +12 -0
- package/opencode-plugins/harness-stop/index.js +97 -2
- package/opencode-plugins/harness-stop/lib/atlas-dossier-client.js +1 -0
- package/opencode-plugins/harness-stop/lib/domain-output-quality.js +15 -2
- package/opencode-plugins/lib/coach.js +148 -0
- package/package.json +71 -5
- package/runtime-src/coach-kernel.mjs +144 -7
- package/runtime-src/codex-bridge.mjs +254 -8
- package/runtime-src/embedded-public-key.mjs +27 -0
- package/runtime-src/gated-ledger.mjs +41 -14
- package/runtime-src/harness-daemon.mjs +85 -10
- package/runtime-src/hive-wal-publisher.mjs +292 -0
- package/runtime-src/lib/evaluate-with-kernel.mjs +133 -0
- package/runtime-src/lib/kernel/deterministic-cognitive-kernel.mjs +906 -0
- package/runtime-src/local-phase.mjs +10 -5
- package/runtime-src/packet-verifier.mjs +166 -0
- package/runtime-src/provider-proxy.mjs +13 -0
- package/runtime-src/quality-enforcer.mjs +40 -23
- package/runtime-src/runtime-rails/registry.mjs +252 -0
- package/runtime-src/service.mjs +8036 -764
- package/runtime-src/sub-agent-enforcer.mjs +201 -0
- package/scripts/aria-ledger-append.mjs +337 -0
- package/scripts/aria-task-cheap-worker-dispatch.mjs +234 -0
- package/scripts/audit-of-audit-prior-tasks.mjs +194 -0
- package/scripts/audit-of-audit-this-turn.mjs +116 -0
- package/scripts/bundle-sdk.mjs +31 -5
- package/scripts/check-cli-wrapper-provider-contract.mjs +160 -0
- package/scripts/check-client-compatibility.mjs +15 -5
- package/scripts/check-client-smoke.mjs +297 -0
- package/scripts/check-codex-orchestrator-adoption.mjs +150 -0
- package/scripts/check-glm-env-wired.mjs +131 -0
- package/scripts/check-hive-local-storage-contract.mjs +91 -0
- package/scripts/check-hook-mirror.mjs +150 -0
- package/scripts/check-install-sh-drift.mjs +152 -0
- package/scripts/check-kernel-sync.mjs +101 -0
- package/scripts/check-package-artifact.mjs +152 -0
- package/scripts/check-registry-mirror.mjs +71 -0
- package/scripts/drain-owner-airtable-sync-queue.mjs +287 -0
- package/scripts/export-owner-status-sheets.mjs +589 -0
- package/scripts/live-sidecar-receipt-canary.mjs +347 -0
- package/scripts/qiyas-tadabbur-model-matrix.mjs +970 -0
- package/scripts/quality-ab-live-provider.mjs +913 -0
- package/scripts/self-test-action-ledger-core.mjs +190 -0
- package/scripts/self-test-approval-receipt-binding.mjs +122 -0
- package/scripts/self-test-autofire-quality-output.mjs +110 -0
- package/scripts/self-test-claude-code-action-ledger.mjs +132 -0
- package/scripts/self-test-claude-code-mechanical-autofire-hive.mjs +138 -0
- package/scripts/self-test-claude-code-mechanical-autofire.mjs +234 -0
- package/scripts/self-test-codebase-awareness-atlas-delta.mjs +159 -0
- package/scripts/self-test-codebase-awareness-delta-ingest.mjs +179 -0
- package/scripts/self-test-codex-live-hook-parity.mjs +84 -0
- package/scripts/self-test-codex-native-action-ledger.mjs +167 -0
- package/scripts/self-test-codex-native-hook-json-contract.mjs +74 -0
- package/scripts/self-test-codex-orchestrator-continuity.mjs +113 -0
- package/scripts/self-test-codex-readable-recovery.mjs +94 -0
- package/scripts/self-test-codex-self-harness.mjs +538 -0
- package/scripts/self-test-compiled-workunit.mjs +214 -0
- package/scripts/self-test-continuation-output-smoke.mjs +101 -0
- package/scripts/self-test-cross-cli-fleet-ticker.mjs +85 -0
- package/scripts/self-test-cross-cli-hive-adoption.mjs +125 -0
- package/scripts/self-test-cross-cli-hive-learning.mjs +146 -0
- package/scripts/self-test-cross-phase-tool-failure.mjs +110 -0
- package/scripts/self-test-cross-surface-action-ledger.mjs +149 -0
- package/scripts/self-test-end-of-phase-qa-court.mjs +616 -0
- package/scripts/self-test-evaluate-with-kernel.mjs +111 -0
- package/scripts/self-test-first-class-output-delta-proof.mjs +307 -0
- package/scripts/self-test-goal-contract-output-qa.mjs +73 -0
- package/scripts/self-test-goal-contract.mjs +35 -0
- package/scripts/self-test-governed-adapters.mjs +105 -0
- package/scripts/self-test-governed-surface-runner.mjs +198 -0
- package/scripts/self-test-harness-gates.mjs +15 -12
- package/scripts/self-test-harness-ticker-sidecar.mjs +153 -0
- package/scripts/self-test-hive-org-kernel.mjs +233 -0
- package/scripts/self-test-hive-session-coordination.mjs +156 -0
- package/scripts/self-test-hive-wal-consumer.mjs +111 -0
- package/scripts/self-test-kernel-a3-a4-selection.mjs +179 -0
- package/scripts/self-test-ledger-append.mjs +175 -0
- package/scripts/self-test-live-codex-posttool-packet-smoke.mjs +111 -0
- package/scripts/self-test-live-codex-pretool-packet-smoke.mjs +101 -0
- package/scripts/self-test-live-codex-stop-qa-kernel-smoke.mjs +43 -0
- package/scripts/self-test-live-wrapper-substrate-inventory.mjs +149 -0
- package/scripts/self-test-local-main-sync-script.mjs +47 -0
- package/scripts/self-test-mechanical-autofire-resolver.mjs +296 -0
- package/scripts/self-test-no-consult-cognitive-skills-output.mjs +135 -0
- package/scripts/self-test-owner-airtable-sync-queue.mjs +196 -0
- package/scripts/self-test-owner-airtable-sync.mjs +181 -0
- package/scripts/self-test-owner-sheets-action-ledger.mjs +100 -0
- package/scripts/self-test-production-preflight.mjs +78 -0
- package/scripts/self-test-project-boundary-cognition.mjs +79 -0
- package/scripts/self-test-qa-exec-kernel.mjs +34 -0
- package/scripts/self-test-qa-recovery-learning-loop.mjs +113 -0
- package/scripts/self-test-qiyas-label-alignment.mjs +94 -0
- package/scripts/self-test-recovery-context.mjs +110 -0
- package/scripts/self-test-repo-guard.mjs +10 -0
- package/scripts/self-test-runtime-health-self-heal.mjs +161 -0
- package/scripts/self-test-runtime-postcondition.mjs +70 -0
- package/scripts/self-test-soul-precommit-hook.mjs +39 -0
- package/scripts/self-test-stop-gate-kernel-guards.mjs +185 -0
- package/scripts/self-test-stop-gate.mjs +128 -0
- package/scripts/self-test-substrate-kernel-execution-receipt.mjs +130 -0
- package/scripts/self-test-substrate-open-skill-floor.mjs +87 -0
- package/scripts/self-test-substrate-output-quality-eval.mjs +171 -0
- package/scripts/self-test-task-closeout-drift.mjs +97 -0
- package/scripts/self-test-task-project-ledger-readiness.mjs +43 -0
- package/scripts/self-test-task-runner-phase-consumer.mjs +134 -0
- package/scripts/self-test-task-worker-lane.mjs +256 -0
- package/scripts/self-test-turn-substrate-qa-kernel.mjs +188 -0
- package/scripts/self-test-universal-action-capture.mjs +153 -0
- package/scripts/self-test-universal-turn-packet-entrypoints.mjs +252 -0
- package/scripts/self-test-universal-turn-packet.mjs +320 -0
- package/scripts/session-quality-backfill.mjs +253 -0
- package/scripts/smoke-autofire-100-prompts.mjs +481 -0
- package/scripts/sync-local-main-on-task-complete.mjs +278 -0
- package/scripts/sync-owner-status-airtable.mjs +1158 -0
- package/scripts/validate-skill-prompts.mjs +12 -1
- package/scripts/verify-codex-native-mirror.mjs +262 -0
- package/skills/34-frameworks-unified/SKILL.md +42 -0
- package/skills/api-design/SKILL.md +123 -0
- package/skills/architecture-decision/SKILL.md +105 -0
- package/skills/aria-aristotle-cognitives/SKILL.md +128 -0
- package/skills/aria-aristotle-intra-phase/SKILL.md +99 -0
- package/skills/aria-aristotle-post-phase/SKILL.md +116 -0
- package/skills/aria-aristotle-pre-phase/SKILL.md +117 -0
- package/skills/aria-axioms-first-principles/SKILL.md +202 -0
- package/skills/aria-axioms-first-principles/agents/openai.yaml +4 -0
- package/skills/aria-axioms-first-principles/references/source-map.md +130 -0
- package/skills/aria-chat/SKILL.md +84 -0
- package/skills/aria-chat/scripts/aria-chat.sh +57 -0
- package/skills/aria-cognition/34-frameworks-unified/SKILL.md +42 -0
- package/skills/aria-cognition/aria-aristotle-cognitives/SKILL.md +128 -0
- package/skills/aria-cognition/aria-aristotle-intra-phase/SKILL.md +99 -0
- package/skills/aria-cognition/aria-aristotle-post-phase/SKILL.md +118 -0
- package/skills/aria-cognition/aria-aristotle-pre-phase/SKILL.md +117 -0
- package/skills/aria-cognition/aria-axioms-first-principles/SKILL.md +202 -0
- package/skills/aria-cognition/aria-axioms-first-principles/agents/openai.yaml +4 -0
- package/skills/aria-cognition/aria-axioms-first-principles/references/source-map.md +130 -0
- package/skills/aria-cognition/aria-backend-architect/SKILL.md +124 -0
- package/skills/aria-cognition/aria-backend-architect/references/backend-cookbook.md +417 -0
- package/skills/aria-cognition/aria-business-audit/SKILL.md +133 -0
- package/skills/aria-cognition/aria-business-audit/references/audit-cookbook.md +247 -0
- package/skills/aria-cognition/aria-business-frame/SKILL.md +138 -0
- package/skills/aria-cognition/aria-business-frame/references/business-cookbook.md +154 -0
- package/skills/aria-cognition/aria-chat/SKILL.md +84 -0
- package/skills/aria-cognition/aria-chat/scripts/aria-chat.sh +57 -0
- package/skills/aria-cognition/aria-cognition-autofire/SKILL.md +137 -0
- package/skills/aria-cognition/aria-cognition-batch/SKILL.md +264 -0
- package/skills/aria-cognition/aria-decision-mizan/SKILL.md +136 -0
- package/skills/aria-cognition/aria-decision-mizan/references/decision-frameworks.md +287 -0
- package/skills/aria-cognition/aria-first-class-operating-contract/SKILL.md +104 -0
- package/skills/aria-cognition/aria-frontend-architect/SKILL.md +123 -0
- package/skills/aria-cognition/aria-frontend-architect/references/frontend-cookbook.md +358 -0
- package/skills/aria-cognition/aria-fullstack-orchestrator/SKILL.md +127 -0
- package/skills/aria-cognition/aria-fullstack-orchestrator/references/fullstack-cookbook.md +383 -0
- package/skills/aria-cognition/aria-gtm-architect/SKILL.md +126 -0
- package/skills/aria-cognition/aria-gtm-architect/references/gtm-cookbook.md +235 -0
- package/skills/aria-cognition/aria-harness-deploy/SKILL.md +145 -0
- package/skills/aria-cognition/aria-harness-no-stripping/SKILL.md +135 -0
- package/skills/aria-cognition/aria-harness-onboarding/SKILL.md +130 -0
- package/skills/aria-cognition/aria-harness-output-discipline/SKILL.md +120 -0
- package/skills/aria-cognition/aria-harness-substrate-binding/SKILL.md +139 -0
- package/skills/aria-cognition/aria-http-harness-client/SKILL.md +85 -0
- package/skills/aria-cognition/aria-http-harness-client/scripts/smoke.mjs +47 -0
- package/skills/aria-cognition/aria-k8s-deploy/SKILL.md +174 -0
- package/skills/aria-cognition/aria-k8s-deploy/agents/openai.yaml +3 -0
- package/skills/aria-cognition/aria-ladduniframe/SKILL.md +60 -0
- package/skills/aria-cognition/aria-ledger-fleet-execution/SKILL.md +126 -0
- package/skills/aria-cognition/aria-live-ops/SKILL.md +54 -0
- package/skills/aria-cognition/aria-mac-ssh-ops/SKILL.md +100 -0
- package/skills/aria-cognition/aria-memory-index/SKILL.md +42 -0
- package/skills/aria-cognition/aria-noor-cognitives/SKILL.md +120 -0
- package/skills/aria-cognition/aria-ops/SKILL.md +60 -0
- package/skills/aria-cognition/aria-ops/references/live-endpoints.md +59 -0
- package/skills/aria-cognition/aria-quality-audit/SKILL.md +133 -0
- package/skills/aria-cognition/aria-readable-output/SKILL.md +239 -0
- package/skills/aria-cognition/aria-readable-output/references/layout-cookbook.md +366 -0
- package/skills/aria-cognition/aria-reasoning/SKILL.md +67 -0
- package/skills/aria-cognition/aria-reasoning/references/core-principles.md +42 -0
- package/skills/aria-cognition/aria-repo-audit/SKILL.md +135 -0
- package/skills/aria-cognition/aria-repo-audit/references/repo-audit-cookbook.md +375 -0
- package/skills/aria-cognition/aria-research-orchestrator/SKILL.md +138 -0
- package/skills/aria-cognition/aria-research-orchestrator/references/research-patterns.md +270 -0
- package/skills/aria-cognition/aria-retention-engine/SKILL.md +120 -0
- package/skills/aria-cognition/aria-retention-engine/references/retention-cookbook.md +271 -0
- package/skills/aria-cognition/aria-revenue-engine/SKILL.md +128 -0
- package/skills/aria-cognition/aria-revenue-engine/references/revenue-cookbook.md +227 -0
- package/skills/aria-cognition/aria-senior-code-audit/SKILL.md +233 -0
- package/skills/aria-cognition/aria-senior-code-audit/references/audit-checklist.md +369 -0
- package/skills/aria-cognition/aria-senior-code-cookbook/SKILL.md +288 -0
- package/skills/aria-cognition/aria-senior-code-cookbook/references/engineering-cookbook.md +489 -0
- package/skills/aria-cognition/aria-soul-principles/SKILL.md +42 -0
- package/skills/aria-cognition/aria-task-codex-executor/SKILL.md +86 -0
- package/skills/aria-cognition/aristotle-engine/SKILL.md +42 -0
- package/skills/aria-cognition/cross-domain-24/SKILL.md +42 -0
- package/skills/aria-cognition/deepsoul-emotional/SKILL.md +42 -0
- package/skills/aria-cognition/fitrah-guard/SKILL.md +78 -0
- package/skills/aria-cognition/ghazali-8lens/SKILL.md +227 -29
- package/skills/aria-cognition/ghazali-8lens/references/ghazali-8lens-cookbook.md +797 -0
- package/skills/aria-cognition/ijtihad-novel/SKILL.md +42 -0
- package/skills/aria-cognition/ilham-intuition/SKILL.md +42 -0
- package/skills/aria-cognition/never-guess/SKILL.md +77 -0
- package/skills/aria-cognition/noor-recognition/SKILL.md +45 -0
- package/skills/aria-cognition/qiyas-analogy/SKILL.md +174 -14
- package/skills/aria-cognition/ruh-basis/SKILL.md +42 -0
- package/skills/aria-cognition/tadabbur/SKILL.md +506 -0
- package/skills/aria-cognition/tadabbur/references/tadabbur-cookbook.md +921 -0
- package/skills/aria-cognition/tadabbur-ops/SKILL.md +42 -0
- package/skills/aria-cognition/tafakkur/SKILL.md +104 -0
- package/skills/aria-cognition-autofire/SKILL.md +109 -0
- package/skills/aria-cognition-batch/SKILL.md +264 -0
- package/skills/aria-conversational-doctrine-discipline/SKILL.md +125 -0
- package/skills/aria-essence/SKILL.md +81 -0
- package/skills/aria-essence/references/domain-matrix.md +80 -0
- package/skills/aria-essence/references/evolution-loop.md +30 -0
- package/skills/aria-essence/references/readable-cognition.md +27 -0
- package/skills/aria-first-class-operating-contract/SKILL.md +104 -0
- package/skills/aria-forge-guardrails/SKILL.md +53 -0
- package/skills/aria-forge-guardrails/references/checklist.md +31 -0
- package/skills/aria-harness-deploy/SKILL.md +145 -0
- package/skills/aria-harness-no-stripping/SKILL.md +135 -0
- package/skills/aria-harness-onboarding/SKILL.md +130 -0
- package/skills/aria-harness-output-discipline/SKILL.md +120 -0
- package/skills/aria-harness-substrate-binding/SKILL.md +139 -0
- package/skills/aria-http-harness-client/SKILL.md +85 -0
- package/skills/aria-http-harness-client/scripts/smoke.mjs +47 -0
- package/skills/aria-k8s-deploy/SKILL.md +174 -0
- package/skills/aria-k8s-deploy/agents/openai.yaml +3 -0
- package/skills/aria-ladduniframe/SKILL.md +60 -0
- package/skills/aria-ledger-fleet-execution/SKILL.md +126 -0
- package/skills/aria-live-ops/SKILL.md +54 -0
- package/skills/aria-mac-ssh-ops/SKILL.md +100 -0
- package/skills/aria-memory-index/SKILL.md +42 -0
- package/skills/aria-noor-cognitives/SKILL.md +120 -0
- package/skills/aria-ops/SKILL.md +60 -0
- package/skills/aria-ops/references/live-endpoints.md +59 -0
- package/skills/aria-quality-audit/SKILL.md +133 -0
- package/skills/aria-reasoning/SKILL.md +67 -0
- package/skills/aria-reasoning/references/core-principles.md +42 -0
- package/skills/aria-repo-doctrine/SKILL.md +57 -0
- package/skills/aria-soul-principles/SKILL.md +42 -0
- package/skills/aria-task-codex-executor/SKILL.md +86 -0
- package/skills/aristotle-engine/SKILL.md +42 -0
- package/skills/ci-cd-pipeline/SKILL.md +116 -0
- package/skills/code-review/SKILL.md +131 -0
- package/skills/cross-domain-24/SKILL.md +42 -0
- package/skills/database-design/SKILL.md +124 -0
- package/skills/deepsoul-emotional/SKILL.md +42 -0
- package/skills/deno-kv-raft-pubsub/SKILL.md +561 -0
- package/skills/deno-kv-raft-pubsub/reference/maelstrom-integration.md +393 -0
- package/skills/deno-kv-raft-pubsub/reference/pubsub-api.md +376 -0
- package/skills/deno-kv-raft-pubsub/reference/raft-spec.md +402 -0
- package/skills/deno-kv-raft-pubsub/reference/state-machine.md +182 -0
- package/skills/error-handling/SKILL.md +159 -0
- package/skills/firecrawl/SKILL.md +165 -0
- package/skills/firecrawl/rules/install.md +82 -0
- package/skills/firecrawl/rules/security.md +26 -0
- package/skills/firecrawl-agent/SKILL.md +86 -0
- package/skills/firecrawl-build-interact/SKILL.md +96 -0
- package/skills/firecrawl-build-onboarding/SKILL.md +131 -0
- package/skills/firecrawl-build-onboarding/references/auth-flow.md +39 -0
- package/skills/firecrawl-build-onboarding/references/project-setup.md +20 -0
- package/skills/firecrawl-build-onboarding/references/sdk-installation.md +17 -0
- package/skills/firecrawl-build-scrape/SKILL.md +97 -0
- package/skills/firecrawl-build-search/SKILL.md +97 -0
- package/skills/firecrawl-clone/SKILL.md +419 -0
- package/skills/firecrawl-crawl/SKILL.md +87 -0
- package/skills/firecrawl-download/SKILL.md +98 -0
- package/skills/firecrawl-interact/SKILL.md +112 -0
- package/skills/firecrawl-map/SKILL.md +79 -0
- package/skills/firecrawl-scrape/SKILL.md +97 -0
- package/skills/firecrawl-search/SKILL.md +88 -0
- package/skills/fitrah-guard/SKILL.md +78 -0
- package/skills/forge-quality-rules/SKILL.md +61 -0
- package/skills/ghazali-8lens/SKILL.md +56 -0
- package/skills/ijtihad-novel/SKILL.md +42 -0
- package/skills/ilham-intuition/SKILL.md +42 -0
- package/skills/imagegen/LICENSE.txt +201 -0
- package/skills/imagegen/SKILL.md +374 -0
- package/skills/imagegen/agents/openai.yaml +6 -0
- package/skills/imagegen/assets/imagegen-small.svg +5 -0
- package/skills/imagegen/assets/imagegen.png +0 -0
- package/skills/imagegen/references/cli.md +242 -0
- package/skills/imagegen/references/codex-network.md +33 -0
- package/skills/imagegen/references/image-api.md +90 -0
- package/skills/imagegen/references/prompting.md +118 -0
- package/skills/imagegen/references/sample-prompts.md +433 -0
- package/skills/imagegen/scripts/image_gen.py +995 -0
- package/skills/imagegen/scripts/remove_chroma_key.py +440 -0
- package/skills/istiqra-induction/SKILL.md +44 -0
- package/skills/ladunni-22/SKILL.md +53 -0
- package/skills/mizan/SKILL.md +90 -0
- package/skills/nadia/SKILL.md +56 -0
- package/skills/nadia-psi/SKILL.md +56 -0
- package/skills/never-guess/SKILL.md +75 -0
- package/skills/noor-recognition/SKILL.md +45 -0
- package/skills/observability/SKILL.md +133 -0
- package/skills/openai-docs/LICENSE.txt +201 -0
- package/skills/openai-docs/SKILL.md +100 -0
- package/skills/openai-docs/agents/openai.yaml +14 -0
- package/skills/openai-docs/assets/openai-small.svg +3 -0
- package/skills/openai-docs/assets/openai.png +0 -0
- package/skills/openai-docs/references/latest-model.md +37 -0
- package/skills/openai-docs/references/prompting-guide.md +244 -0
- package/skills/openai-docs/references/upgrade-guide.md +181 -0
- package/skills/openai-docs/scripts/resolve-latest-model-info.js +147 -0
- package/skills/pdf/LICENSE.txt +201 -0
- package/skills/pdf/SKILL.md +85 -0
- package/skills/pdf/agents/openai.yaml +5 -0
- package/skills/pdf/assets/pdf.png +0 -0
- package/skills/playwright/LICENSE.txt +201 -0
- package/skills/playwright/NOTICE.txt +14 -0
- package/skills/playwright/SKILL.md +165 -0
- package/skills/playwright/agents/openai.yaml +6 -0
- package/skills/playwright/assets/playwright-small.svg +3 -0
- package/skills/playwright/assets/playwright.png +0 -0
- package/skills/playwright/references/cli.md +116 -0
- package/skills/playwright/references/workflows.md +95 -0
- package/skills/playwright/scripts/playwright_cli.sh +25 -0
- package/skills/plugin-creator/SKILL.md +178 -0
- package/skills/plugin-creator/agents/openai.yaml +6 -0
- package/skills/plugin-creator/assets/plugin-creator-small.svg +3 -0
- package/skills/plugin-creator/assets/plugin-creator.png +0 -0
- package/skills/plugin-creator/references/plugin-json-spec.md +170 -0
- package/skills/plugin-creator/scripts/create_basic_plugin.py +301 -0
- package/skills/predictor/SKILL.md +43 -0
- package/skills/qiyas-analogy/SKILL.md +204 -0
- package/skills/refactoring/SKILL.md +137 -0
- package/skills/ruh-basis/SKILL.md +42 -0
- package/skills/security-review/SKILL.md +129 -0
- package/skills/skill-creator/SKILL.md +434 -0
- package/skills/skill-creator/agents/openai.yaml +5 -0
- package/skills/skill-creator/assets/skill-creator-small.svg +3 -0
- package/skills/skill-creator/assets/skill-creator.png +0 -0
- package/skills/skill-creator/license.txt +202 -0
- package/skills/skill-creator/references/openai_yaml.md +49 -0
- package/skills/skill-creator/scripts/generate_openai_yaml.py +226 -0
- package/skills/skill-creator/scripts/init_skill.py +400 -0
- package/skills/skill-creator/scripts/quick_validate.py +101 -0
- package/skills/skill-installer/LICENSE.txt +202 -0
- package/skills/skill-installer/SKILL.md +76 -0
- package/skills/skill-installer/agents/openai.yaml +5 -0
- package/skills/skill-installer/assets/skill-installer-small.svg +3 -0
- package/skills/skill-installer/assets/skill-installer.png +0 -0
- package/skills/skill-installer/scripts/github_utils.py +21 -0
- package/skills/skill-installer/scripts/install-skill-from-github.py +308 -0
- package/skills/skill-installer/scripts/list-skills.py +107 -0
- package/skills/skills-and-hooks-reference/SKILL.md +196 -0
- package/skills/soul-domains/SKILL.md +43 -0
- package/skills/tadabbur/SKILL.md +232 -0
- package/skills/tadabbur-ops/SKILL.md +42 -0
- package/skills/tafakkur/SKILL.md +104 -0
- package/skills/testing-strategy/SKILL.md +122 -0
- package/src/action-ledger-core.ts +1054 -0
- package/src/chat.ts +5 -6
- package/src/codebase-scanner.ts +2 -0
- package/src/connectors/claude-code.ts +149 -12
- package/src/connectors/codebase-awareness.ts +325 -25
- package/src/connectors/codex.ts +1225 -41
- package/src/connectors/cursor.ts +8 -0
- package/src/connectors/governed-adapter.ts +174 -0
- package/src/connectors/opencode.ts +18 -2
- package/src/connectors/repo-guard.ts +24 -12
- package/src/connectors/runtime.ts +99 -2
- package/src/connectors/shell.ts +125 -7
- package/src/cross-cli-hive-binding.ts +290 -0
- package/src/garden-control-plane.ts +24 -1
- package/src/governed-surface-runner.ts +1227 -0
- package/src/index.ts +104 -1
- package/src/task-runner.ts +3794 -0
- package/dist/aria-connector/src/install-hooks.d.ts +0 -18
- package/dist/aria-connector/src/install-hooks.d.ts.map +0 -1
- package/dist/aria-connector/src/install-hooks.js +0 -224
- package/dist/aria-connector/src/install-hooks.js.map +0 -1
- package/dist/aria-connector/src/onboarding-wizard.d.ts +0 -5
- package/dist/aria-connector/src/onboarding-wizard.d.ts.map +0 -1
- package/dist/aria-connector/src/onboarding-wizard.js +0 -188
- package/dist/aria-connector/src/onboarding-wizard.js.map +0 -1
- package/dist/cli-0.2.38.tgz +0 -0
- package/dist/install.sh +0 -13
- package/src/__tests__/anthropic-oauth.test.ts +0 -186
- package/src/__tests__/auth-commands.test.ts +0 -132
- package/src/__tests__/owner-login.test.ts +0 -311
|
@@ -0,0 +1,402 @@
|
|
|
1
|
+
# Raft Protocol Specification for Deno KV
|
|
2
|
+
|
|
3
|
+
This is the complete Raft consensus protocol specification, adapted for Deno KV as the persistent storage layer. Follow this spec exactly — deviations cause Maelstrom failures.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Persistent State (Deno KV)
|
|
8
|
+
|
|
9
|
+
All persistent state is stored in Deno KV using the `/raft/` key prefix. Every mutation uses `kv.atomic()` for atomicity.
|
|
10
|
+
|
|
11
|
+
### Key Schema
|
|
12
|
+
|
|
13
|
+
| KV Key | Type | Description |
|
|
14
|
+
|--------|------|-------------|
|
|
15
|
+
| `/raft/current_term` | `number` (u64) | Latest term server has seen. Initialized to 0 on first boot. |
|
|
16
|
+
| `/raft/voted_for` | `string \| null` | CandidateId that received vote in current term. Null if none. |
|
|
17
|
+
| `/raft/log/{index}` | `LogEntry` | Log entry at position `index`. Index is zero-padded to 16 digits for correct lexicographic ordering. |
|
|
18
|
+
| `/raft/commit_index` | `number` (u64) | Index of highest log entry known to be committed. Initialized to 0. |
|
|
19
|
+
| `/raft/last_applied` | `number` (u64) | Index of highest log entry applied to state machine. Initialized to 0. |
|
|
20
|
+
| `/raft/snapshot/{index}` | `Snapshot` | Compressed snapshot at index. Presence indicates log truncated before this index. |
|
|
21
|
+
| `/raft/configuration` | `string[]` | Current cluster member node IDs. |
|
|
22
|
+
|
|
23
|
+
### LogEntry Type
|
|
24
|
+
|
|
25
|
+
```typescript
|
|
26
|
+
interface LogEntry {
|
|
27
|
+
term: number; // Term when entry was received by leader
|
|
28
|
+
index: number; // Position in the log (redundant with key, stored for snapshot recovery)
|
|
29
|
+
command: PubSubCommand; // The state machine command (opaque to Raft)
|
|
30
|
+
}
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
### Snapshot Type
|
|
34
|
+
|
|
35
|
+
```typescript
|
|
36
|
+
interface Snapshot {
|
|
37
|
+
data: Uint8Array; // Serialized state machine state
|
|
38
|
+
last_included_index: number; // Log index covered by this snapshot
|
|
39
|
+
last_included_term: number; // Term of entry at last_included_index
|
|
40
|
+
}
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Atomic Operations
|
|
44
|
+
|
|
45
|
+
**Updating currentTerm (must be atomic):**
|
|
46
|
+
```
|
|
47
|
+
kv.atomic()
|
|
48
|
+
.check({ key: "/raft/current_term", versionstamp: currentVersion })
|
|
49
|
+
.set("/raft/current_term", newTerm)
|
|
50
|
+
.commit()
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
**Voting (currentTerm and votedFor must be updated together):**
|
|
54
|
+
```
|
|
55
|
+
kv.atomic()
|
|
56
|
+
.check({ key: "/raft/current_term", versionstamp: currentVersion })
|
|
57
|
+
.check({ key: "/raft/voted_for", versionstamp: votedForVersion })
|
|
58
|
+
.set("/raft/current_term", newTerm)
|
|
59
|
+
.set("/raft/voted_for", candidateId)
|
|
60
|
+
.commit()
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**Appending log entries (index must be monotonically increasing):**
|
|
64
|
+
```
|
|
65
|
+
kv.atomic()
|
|
66
|
+
.check({ key: "/raft/log/" + pad(index - 1), versionstamp: prevVersion })
|
|
67
|
+
.set("/raft/log/" + pad(index), entry)
|
|
68
|
+
.commit()
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Initialization
|
|
72
|
+
|
|
73
|
+
On first boot (no KV keys exist):
|
|
74
|
+
1. Set `/raft/current_term` = 0
|
|
75
|
+
2. Set `/raft/voted_for` = null
|
|
76
|
+
3. Set `/raft/commit_index` = 0
|
|
77
|
+
4. Set `/raft/last_applied` = 0
|
|
78
|
+
5. Set `/raft/configuration` = initial cluster nodes
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## 2. Volatile State (In-Memory)
|
|
83
|
+
|
|
84
|
+
| Field | Type | Description |
|
|
85
|
+
|-------|------|-------------|
|
|
86
|
+
| `role` | `"follower" \| "candidate" \| "leader"` | Current role. Starts as follower. |
|
|
87
|
+
| `leaderId` | `string \| null` | ID of current leader (known to followers) |
|
|
88
|
+
| `commitIndex` | `number` | Mirrors persistent commit_index for fast access |
|
|
89
|
+
| `lastApplied` | `number` | Mirrors persistent last_applied |
|
|
90
|
+
| `nextIndex` | `Map<string, number>` | (Leader only) Next index to send to each follower. Init to `lastLogIndex + 1`. |
|
|
91
|
+
| `matchIndex` | `Map<string, number>` | (Leader only) Highest log entry known replicated on each follower. Init to 0. |
|
|
92
|
+
| `electionTimer` | `number` | Timeout handle for election. Randomized 150-300ms. |
|
|
93
|
+
| `heartbeatTimer` | `number` | (Leader only) Periodic heartbeat interval. Fixed 50ms. |
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
## 3. RPC Specifications
|
|
98
|
+
|
|
99
|
+
All RPCs are sent over WebSocket connections between nodes. Messages are JSON-serialized.
|
|
100
|
+
|
|
101
|
+
### 3.1 RequestVote RPC
|
|
102
|
+
|
|
103
|
+
**Invoked by:** Candidate, to gather votes.
|
|
104
|
+
|
|
105
|
+
**Arguments:**
|
|
106
|
+
```typescript
|
|
107
|
+
interface RequestVoteRequest {
|
|
108
|
+
type: "request_vote";
|
|
109
|
+
term: number; // Candidate's term
|
|
110
|
+
candidateId: string; // Candidate requesting vote
|
|
111
|
+
lastLogIndex: number; // Index of candidate's last log entry
|
|
112
|
+
lastLogTerm: number; // Term of candidate's last log entry
|
|
113
|
+
}
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
**Results:**
|
|
117
|
+
```typescript
|
|
118
|
+
interface RequestVoteResponse {
|
|
119
|
+
type: "request_vote_response";
|
|
120
|
+
term: number; // currentTerm, for candidate to update itself
|
|
121
|
+
voteGranted: boolean; // true means candidate received vote
|
|
122
|
+
}
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
**Receiver implementation (follower):**
|
|
126
|
+
1. If `args.term < currentTerm` → reply `{term: currentTerm, voteGranted: false}`
|
|
127
|
+
2. If `args.term > currentTerm` → set `currentTerm = args.term`, convert to follower, clear `votedFor` (via atomic KV update)
|
|
128
|
+
3. If `votedFor` is null OR `votedFor == args.candidateId`:
|
|
129
|
+
a. AND candidate's log is at least as up-to-date (see §3.1.1):
|
|
130
|
+
- Set votedFor = args.candidateId (atomic with currentTerm)
|
|
131
|
+
- Reply `{term: currentTerm, voteGranted: true}`
|
|
132
|
+
b. ELSE: reply `{term: currentTerm, voteGranted: false}`
|
|
133
|
+
4. Reset election timer (we heard from a valid candidate)
|
|
134
|
+
|
|
135
|
+
**§3.1.1 Log Up-To-Date Check:**
|
|
136
|
+
Candidate's log is at least as up-to-date if:
|
|
137
|
+
- `args.lastLogTerm > lastLogTerm` OR
|
|
138
|
+
- `args.lastLogTerm == lastLogTerm` AND `args.lastLogIndex >= lastLogIndex`
|
|
139
|
+
|
|
140
|
+
Where `lastLogTerm` and `lastLogIndex` refer to the receiver's last log entry.
|
|
141
|
+
|
|
142
|
+
### 3.2 AppendEntries RPC
|
|
143
|
+
|
|
144
|
+
**Invoked by:** Leader, to replicate log entries. Also serves as heartbeat.
|
|
145
|
+
|
|
146
|
+
**Arguments:**
|
|
147
|
+
```typescript
|
|
148
|
+
interface AppendEntriesRequest {
|
|
149
|
+
type: "append_entries";
|
|
150
|
+
term: number; // Leader's term
|
|
151
|
+
leaderId: string; // So follower can redirect clients
|
|
152
|
+
prevLogIndex: number; // Index of log entry immediately preceding new ones
|
|
153
|
+
prevLogTerm: number; // Term of prevLogIndex entry
|
|
154
|
+
entries: LogEntry[]; // Log entries to store (empty for heartbeat)
|
|
155
|
+
leaderCommit: number; // Leader's commitIndex
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
**Results:**
|
|
160
|
+
```typescript
|
|
161
|
+
interface AppendEntriesResponse {
|
|
162
|
+
type: "append_entries_response";
|
|
163
|
+
term: number; // currentTerm, for leader to update
|
|
164
|
+
success: boolean; // true if follower contained matching entry at prevLogIndex
|
|
165
|
+
lastLogIndex: number; // For leader to optimize nextIndex backtracking
|
|
166
|
+
}
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
**Receiver implementation (follower):**
|
|
170
|
+
1. If `args.term < currentTerm` → reply `{term: currentTerm, success: false}`
|
|
171
|
+
2. If `args.term >= currentTerm` → set `currentTerm = args.term`, convert to follower, set `leaderId = args.leaderId`
|
|
172
|
+
3. If log does NOT contain entry at `prevLogIndex` with term matching `prevLogTerm`:
|
|
173
|
+
- Reply `{term: currentTerm, success: false, lastLogIndex: lastLogIndex}`
|
|
174
|
+
- (Leader will decrement nextIndex and retry)
|
|
175
|
+
4. If existing entry conflicts with new entry (same index, different term):
|
|
176
|
+
- Delete the existing entry and all that follow it
|
|
177
|
+
5. Append any new entries not already in the log
|
|
178
|
+
6. If `leaderCommit > commitIndex`:
|
|
179
|
+
- Set `commitIndex = min(leaderCommit, index of last new entry)`
|
|
180
|
+
- Apply all entries from `lastApplied + 1` through `commitIndex` to state machine
|
|
181
|
+
7. Reply `{term: currentTerm, success: true}`
|
|
182
|
+
|
|
183
|
+
**Leader implementation (send side):**
|
|
184
|
+
1. For each follower, send AppendEntries with `prevLogIndex = nextIndex[follower] - 1`
|
|
185
|
+
2. On success: set `nextIndex[follower] += entries.length`, `matchIndex[follower] = prevLogIndex + entries.length`
|
|
186
|
+
3. On failure: set `nextIndex[follower] -= 1` (or use `lastLogIndex` from response for faster backtracking)
|
|
187
|
+
4. After each AppendEntries round, check if any N > commitIndex exists where:
|
|
188
|
+
- `N > commitIndex`
|
|
189
|
+
- A majority of `matchIndex[follower] >= N`
|
|
190
|
+
- `log[N].term == currentTerm`
|
|
191
|
+
- If so: set `commitIndex = N`
|
|
192
|
+
|
|
193
|
+
**IMPORTANT — Leader Completeness:** Leaders commit only entries from their own term in any single step (this is the "commit from current term" rule). An entry from a previous term is committed indirectly when a later entry from the current term is committed.
|
|
194
|
+
|
|
195
|
+
### 3.3 InstallSnapshot RPC
|
|
196
|
+
|
|
197
|
+
**Invoked by:** Leader, when a follower is too far behind (nextIndex points to a log entry that has been compacted/snapshotted).
|
|
198
|
+
|
|
199
|
+
**Arguments:**
|
|
200
|
+
```typescript
|
|
201
|
+
interface InstallSnapshotRequest {
|
|
202
|
+
type: "install_snapshot";
|
|
203
|
+
term: number; // Leader's term
|
|
204
|
+
leaderId: string;
|
|
205
|
+
lastIncludedIndex: number;
|
|
206
|
+
lastIncludedTerm: number;
|
|
207
|
+
offset: number; // Byte offset (for chunked transfer)
|
|
208
|
+
data: Uint8Array; // Snapshot chunk
|
|
209
|
+
done: boolean; // True if this is the last chunk
|
|
210
|
+
}
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
**Results:**
|
|
214
|
+
```typescript
|
|
215
|
+
interface InstallSnapshotResponse {
|
|
216
|
+
type: "install_snapshot_response";
|
|
217
|
+
term: number;
|
|
218
|
+
}
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
## 4. Leader Election Algorithm
|
|
224
|
+
|
|
225
|
+
### State Transitions
|
|
226
|
+
|
|
227
|
+
```
|
|
228
|
+
timeout, start election
|
|
229
|
+
┌─────────┐ ──────────────────────► ┌───────────┐
|
|
230
|
+
│ Follower│ │ Candidate │
|
|
231
|
+
└─────────┘ ◄────────────────────── └───────────┘
|
|
232
|
+
▲ discover higher term, │
|
|
233
|
+
│ or election timeout │
|
|
234
|
+
│ │
|
|
235
|
+
│ receives votes
|
|
236
|
+
│ from majority
|
|
237
|
+
│ │
|
|
238
|
+
│ ▼
|
|
239
|
+
│ ┌───────────┐
|
|
240
|
+
└────────────────────────────│ Leader │
|
|
241
|
+
discover higher term └───────────┘
|
|
242
|
+
```
|
|
243
|
+
|
|
244
|
+
### Follower → Candidate
|
|
245
|
+
|
|
246
|
+
Trigger: election timer fires (150-300ms randomized, no AppendEntries received)
|
|
247
|
+
|
|
248
|
+
1. Increment `currentTerm` (atomic KV update, clearing votedFor)
|
|
249
|
+
2. Vote for self (set `votedFor = self_id`)
|
|
250
|
+
3. Reset election timer
|
|
251
|
+
4. Send RequestVote RPC to all other nodes (parallel, non-blocking)
|
|
252
|
+
5. Count votes:
|
|
253
|
+
- If vote granted: increment vote count
|
|
254
|
+
- If response term > currentTerm: step down to follower
|
|
255
|
+
- If majority votes received → become leader
|
|
256
|
+
6. If election timer fires again before majority → restart election (increment term, new election)
|
|
257
|
+
|
|
258
|
+
### Candidate → Leader
|
|
259
|
+
|
|
260
|
+
1. Set `role = "leader"`
|
|
261
|
+
2. Initialize `nextIndex[follower] = lastLogIndex + 1` for all followers
|
|
262
|
+
3. Initialize `matchIndex[follower] = 0` for all followers
|
|
263
|
+
4. Send immediate heartbeat (AppendEntries with empty entries) to all followers
|
|
264
|
+
5. Start heartbeat timer (50ms)
|
|
265
|
+
|
|
266
|
+
### Any → Follower
|
|
267
|
+
|
|
268
|
+
Trigger: receive RPC with `term > currentTerm`
|
|
269
|
+
|
|
270
|
+
1. Set `currentTerm = rpcTerm` (atomic KV update, clearing votedFor)
|
|
271
|
+
2. Set `role = "follower"`
|
|
272
|
+
3. Set `votedFor = null` (if not already)
|
|
273
|
+
4. Reset election timer
|
|
274
|
+
|
|
275
|
+
### Timer Configuration
|
|
276
|
+
|
|
277
|
+
```typescript
|
|
278
|
+
const ELECTION_TIMEOUT_MIN_MS = 150;
|
|
279
|
+
const ELECTION_TIMEOUT_MAX_MS = 300;
|
|
280
|
+
const HEARTBEAT_INTERVAL_MS = 50;
|
|
281
|
+
|
|
282
|
+
function randomElectionTimeout(): number {
|
|
283
|
+
return ELECTION_TIMEOUT_MIN_MS +
|
|
284
|
+
Math.random() * (ELECTION_TIMEOUT_MAX_MS - ELECTION_TIMEOUT_MIN_MS);
|
|
285
|
+
}
|
|
286
|
+
```
|
|
287
|
+
|
|
288
|
+
### Split-Vote Prevention
|
|
289
|
+
|
|
290
|
+
If an election fails (no majority), the candidate waits for a new randomized timeout. The randomization ensures that in the next round, one candidate is likely to timeout before others and win.
|
|
291
|
+
|
|
292
|
+
---
|
|
293
|
+
|
|
294
|
+
## 5. Log Replication
|
|
295
|
+
|
|
296
|
+
### Normal Operation
|
|
297
|
+
|
|
298
|
+
1. Client sends command to leader (or follower redirects to leader)
|
|
299
|
+
2. Leader appends command as new log entry (local KV write)
|
|
300
|
+
3. Leader sends AppendEntries to all followers (in parallel)
|
|
301
|
+
4. When entry replicated to majority:
|
|
302
|
+
- Leader increments `commitIndex`
|
|
303
|
+
- Leader applies entry to state machine
|
|
304
|
+
- Leader responds to client
|
|
305
|
+
5. Followers learn of committed entries via next AppendEntries (heartbeat carries `leaderCommit`)
|
|
306
|
+
|
|
307
|
+
### Log Matching Property
|
|
308
|
+
|
|
309
|
+
**Invariant:** If two logs contain an entry with the same index and term, then the logs are identical up to and including that index.
|
|
310
|
+
|
|
311
|
+
Maintained by: AppendEntries consistency check (prevLogIndex + prevLogTerm must match).
|
|
312
|
+
|
|
313
|
+
### Conflict Resolution
|
|
314
|
+
|
|
315
|
+
When a follower rejects an AppendEntries (log inconsistency):
|
|
316
|
+
|
|
317
|
+
1. Leader decrements `nextIndex[follower]` and retries
|
|
318
|
+
2. Optimization: follower returns `lastLogIndex` in failure response
|
|
319
|
+
- Leader can skip directly to that index instead of stepping one at a time
|
|
320
|
+
- This converges in O(log N) retries instead of O(N)
|
|
321
|
+
|
|
322
|
+
### Commitment Rules
|
|
323
|
+
|
|
324
|
+
An entry is committed when:
|
|
325
|
+
1. It is stored on a majority of nodes, AND
|
|
326
|
+
2. At least one entry from the leader's current term is also stored on a majority
|
|
327
|
+
|
|
328
|
+
This is the "Raft commit rule" that prevents committing entries from previous terms that could be overwritten.
|
|
329
|
+
|
|
330
|
+
---
|
|
331
|
+
|
|
332
|
+
## 6. Snapshotting (Log Compaction)
|
|
333
|
+
|
|
334
|
+
### When to Snapshot
|
|
335
|
+
|
|
336
|
+
Trigger when `lastApplied - snapshotIndex > SNAPSHOT_THRESHOLD` (default: 10,000 entries).
|
|
337
|
+
|
|
338
|
+
### Creating a Snapshot
|
|
339
|
+
|
|
340
|
+
1. Serialize the state machine state at `lastApplied`
|
|
341
|
+
2. Create snapshot entry in KV: `/raft/snapshot/{lastApplied}`
|
|
342
|
+
3. Delete log entries 1 through `lastApplied` (use `kv.atomic()` with range delete)
|
|
343
|
+
|
|
344
|
+
### Installing a Snapshot (Follower)
|
|
345
|
+
|
|
346
|
+
1. Leader detects follower needs snapshot (nextIndex points before snapshot)
|
|
347
|
+
2. Leader sends InstallSnapshot RPC (possibly chunked)
|
|
348
|
+
3. Follower:
|
|
349
|
+
- Save snapshot data
|
|
350
|
+
- Discard any existing log entries
|
|
351
|
+
- Reset state machine to snapshot contents
|
|
352
|
+
- Load snapshot's last included index/term
|
|
353
|
+
- Respond
|
|
354
|
+
|
|
355
|
+
### Restarting from Snapshot
|
|
356
|
+
|
|
357
|
+
On node restart:
|
|
358
|
+
1. Check for latest snapshot in KV (`/raft/snapshot/` prefix, find max index)
|
|
359
|
+
2. If snapshot exists:
|
|
360
|
+
- Load state machine from snapshot
|
|
361
|
+
- Set `lastApplied = snapshot.last_included_index`
|
|
362
|
+
- Set `commitIndex = snapshot.last_included_index`
|
|
363
|
+
3. Load remaining log entries after snapshot index
|
|
364
|
+
4. Apply any unapplied committed entries
|
|
365
|
+
|
|
366
|
+
---
|
|
367
|
+
|
|
368
|
+
## 7. Consistency Guarantees
|
|
369
|
+
|
|
370
|
+
| Property | Implementation |
|
|
371
|
+
|----------|---------------|
|
|
372
|
+
| **Election Safety** | At most one leader per term (votedFor prevents double-voting) |
|
|
373
|
+
| **Leader Append-Only** | Leader never overwrites or deletes entries |
|
|
374
|
+
| **Log Matching** | If two logs have entries at same index with same term, all prior entries match |
|
|
375
|
+
| **Leader Completeness** | Committed entries survive elections (election restriction: voter checks log currency) |
|
|
376
|
+
| **State Machine Safety** | All nodes apply same commands in same order (identical replicated log) |
|
|
377
|
+
|
|
378
|
+
---
|
|
379
|
+
|
|
380
|
+
## 8. Common Bugs (from Raft paper and Maelstrom experience)
|
|
381
|
+
|
|
382
|
+
1. **Not persisting votedFor before responding to RequestVote** — must atomically update currentTerm + votedFor, THEN respond. Otherwise a crashed-then-restarted node might vote twice in the same term.
|
|
383
|
+
|
|
384
|
+
2. **Committing entries from previous terms** — use the "commit from current term" rule. If leader tries to commit old entries directly, they might be overwritten after a leader change.
|
|
385
|
+
|
|
386
|
+
3. **Log truncation on AppendEntries rejection** — follower must delete conflicting entries AND ALL FOLLOWING ENTRIES, not just the conflicting one.
|
|
387
|
+
|
|
388
|
+
4. **Not resetting election timer** — when a follower receives a valid AppendEntries OR a valid RequestVote (even if it doesn't grant the vote), reset the timer. Otherwise unnecessary elections.
|
|
389
|
+
|
|
390
|
+
5. **Using wall-clock time in state machine** — never call `Date.now()` in `apply()`. Pass timestamps in commands instead.
|
|
391
|
+
|
|
392
|
+
6. **Non-atomic KV updates** — always use `kv.atomic()` with versionstamp checks when updating `currentTerm` and `votedFor` together. A non-atomic update could leave them inconsistent.
|
|
393
|
+
|
|
394
|
+
7. **Heartbeat too fast** — 50ms is aggressive but necessary for fast failover in Maelstrom tests (where timeouts are 150-300ms). In production, consider 100-200ms.
|
|
395
|
+
|
|
396
|
+
---
|
|
397
|
+
|
|
398
|
+
## References
|
|
399
|
+
|
|
400
|
+
- [Raft Paper (Extended)](https://raft.github.io/raft.pdf) — Ongaro, Ousterhout — the canonical spec
|
|
401
|
+
- [Raft Website](https://raft.github.io/) — Visualizations and thesis
|
|
402
|
+
- [Maelstrom Raft Guide](https://github.com/jepsen-io/maelstrom/blob/main/doc/06-raft.md) — Maelstrom-specific Raft implementation notes
|
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
# Deterministic State Machine Design
|
|
2
|
+
|
|
3
|
+
The state machine transforms committed Raft log entries into PubSub state. It must be **deterministic**: given the same log of commands, any node must produce identical state.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## 1. Command Types
|
|
8
|
+
|
|
9
|
+
All state changes go through these command types, serialized in the Raft log:
|
|
10
|
+
|
|
11
|
+
```typescript
|
|
12
|
+
type PubSubCommand =
|
|
13
|
+
| CreateTopicCommand
|
|
14
|
+
| DeleteTopicCommand
|
|
15
|
+
| PublishCommand
|
|
16
|
+
| SubscribeCommand
|
|
17
|
+
| UnsubscribeCommand;
|
|
18
|
+
|
|
19
|
+
interface CreateTopicCommand {
|
|
20
|
+
type: "create_topic";
|
|
21
|
+
topic: string; // Topic name (unique)
|
|
22
|
+
metadata?: Record<string, unknown>;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
interface DeleteTopicCommand {
|
|
26
|
+
type: "delete_topic";
|
|
27
|
+
topic: string;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
interface PublishCommand {
|
|
31
|
+
type: "publish";
|
|
32
|
+
id: string; // Unique message ID (crypto.randomUUID() by client)
|
|
33
|
+
topic: string;
|
|
34
|
+
payload: unknown; // JSON-serializable payload
|
|
35
|
+
timestamp: number; // Client-provided timestamp (NOT Date.now() in state machine)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
interface SubscribeCommand {
|
|
39
|
+
type: "subscribe";
|
|
40
|
+
topic: string;
|
|
41
|
+
subscriber_id: string; // Unique subscriber identifier
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
interface UnsubscribeCommand {
|
|
45
|
+
type: "unsubscribe";
|
|
46
|
+
topic: string;
|
|
47
|
+
subscriber_id: string;
|
|
48
|
+
}
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
---
|
|
52
|
+
|
|
53
|
+
## 2. State Machine State
|
|
54
|
+
|
|
55
|
+
### In-Memory State
|
|
56
|
+
|
|
57
|
+
```typescript
|
|
58
|
+
class PubSubStateMachine {
|
|
59
|
+
// Active topics
|
|
60
|
+
private topics: Set<string>;
|
|
61
|
+
|
|
62
|
+
// Per-topic message sequence counter
|
|
63
|
+
private sequences: Map<string, number>;
|
|
64
|
+
|
|
65
|
+
// Active subscriptions (subscriber_id → topic)
|
|
66
|
+
private subscriptions: Map<string, Set<string>>;
|
|
67
|
+
|
|
68
|
+
// Last applied index (for idempotent replay)
|
|
69
|
+
private lastAppliedIndex: number;
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Persistent State (Deno KV)
|
|
74
|
+
|
|
75
|
+
| KV Key | Value | Purpose |
|
|
76
|
+
|--------|-------|---------|
|
|
77
|
+
| `/pubsub/topics/{name}` | `{ created_at: number, deleted?: boolean }` | Topic registry with tombstone support |
|
|
78
|
+
| `/pubsub/messages/{topic}/{seq:016d}` | `{ id: string, payload: unknown, timestamp: number }` | Message storage, zero-padded sequence |
|
|
79
|
+
| `/pubsub/sequences/{topic}` | `number` | Current sequence number for topic |
|
|
80
|
+
| `/pubsub/subscriptions/{sub_id}` | `{ subscriber_id: string, topic: string, last_delivered: number }` | Subscription with cursor |
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## 3. apply() Implementation
|
|
85
|
+
|
|
86
|
+
The `apply(command: PubSubCommand, index: number)` method is called sequentially for each committed log entry. It must be **fully deterministic**.
|
|
87
|
+
|
|
88
|
+
### Determinism Rules
|
|
89
|
+
|
|
90
|
+
1. **No random number generation** — all randomness must come from the command (client generates UUIDs)
|
|
91
|
+
2. **No wall-clock time** — use `command.timestamp` (provided by client), not `Date.now()`
|
|
92
|
+
3. **No node-ID-dependent logic** — all nodes must produce identical KV state
|
|
93
|
+
4. **No external I/O** — no network calls, no file system reads
|
|
94
|
+
5. **Idempotent replay** — if called twice with same command at same index, no side effects beyond the first call (checked via `lastAppliedIndex`)
|
|
95
|
+
|
|
96
|
+
### apply() Pseudocode
|
|
97
|
+
|
|
98
|
+
```
|
|
99
|
+
function apply(command: PubSubCommand, index: number):
|
|
100
|
+
if index <= lastAppliedIndex:
|
|
101
|
+
return // Idempotent replay guard
|
|
102
|
+
|
|
103
|
+
switch command.type:
|
|
104
|
+
case "create_topic":
|
|
105
|
+
kv.set("/pubsub/topics/" + command.topic, {
|
|
106
|
+
created_at: command.timestamp || Date.now()
|
|
107
|
+
})
|
|
108
|
+
topics.add(command.topic)
|
|
109
|
+
sequences.set(command.topic, 0)
|
|
110
|
+
|
|
111
|
+
case "delete_topic":
|
|
112
|
+
kv.set("/pubsub/topics/" + command.topic, {
|
|
113
|
+
created_at: existing.created_at,
|
|
114
|
+
deleted: true
|
|
115
|
+
})
|
|
116
|
+
topics.delete(command.topic)
|
|
117
|
+
|
|
118
|
+
case "publish":
|
|
119
|
+
if !topics.has(command.topic):
|
|
120
|
+
return // Topic doesn't exist, silent no-op
|
|
121
|
+
seq = sequences.get(command.topic) + 1
|
|
122
|
+
sequences.set(command.topic, seq)
|
|
123
|
+
kv.atomic()
|
|
124
|
+
.set("/pubsub/messages/" + command.topic + "/" + pad16(seq), {
|
|
125
|
+
id: command.id,
|
|
126
|
+
payload: command.payload,
|
|
127
|
+
timestamp: command.timestamp
|
|
128
|
+
})
|
|
129
|
+
.set("/pubsub/sequences/" + command.topic, seq)
|
|
130
|
+
.commit()
|
|
131
|
+
// kv.watch() on /pubsub/messages/{topic}/ will fire for subscribers
|
|
132
|
+
|
|
133
|
+
case "subscribe":
|
|
134
|
+
kv.set("/pubsub/subscriptions/" + command.subscriber_id, {
|
|
135
|
+
subscriber_id: command.subscriber_id,
|
|
136
|
+
topic: command.topic,
|
|
137
|
+
last_delivered: sequences.get(command.topic) || 0
|
|
138
|
+
})
|
|
139
|
+
if !subscriptions.has(command.subscriber_id):
|
|
140
|
+
subscriptions.set(command.subscriber_id, new Set())
|
|
141
|
+
subscriptions.get(command.subscriber_id).add(command.topic)
|
|
142
|
+
// Start kv.watch for this subscriber on this topic
|
|
143
|
+
|
|
144
|
+
case "unsubscribe":
|
|
145
|
+
kv.delete("/pubsub/subscriptions/" + command.subscriber_id)
|
|
146
|
+
if subscriptions.has(command.subscriber_id):
|
|
147
|
+
subscriptions.get(command.subscriber_id).delete(command.topic)
|
|
148
|
+
// Stop kv.watch for this subscriber on this topic
|
|
149
|
+
|
|
150
|
+
lastAppliedIndex = index
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 4. Snapshot Format
|
|
156
|
+
|
|
157
|
+
When the Raft layer takes a snapshot, the state machine serializes its state:
|
|
158
|
+
|
|
159
|
+
```typescript
|
|
160
|
+
interface PubSubSnapshot {
|
|
161
|
+
topics: Array<{ name: string; created_at: number; deleted?: boolean }>;
|
|
162
|
+
sequences: Record<string, number>; // topic → last sequence number
|
|
163
|
+
subscriptions: Record<string, Array<string>>; // subscriber_id → topics
|
|
164
|
+
}
|
|
165
|
+
```
|
|
166
|
+
|
|
167
|
+
**Restoring from snapshot:**
|
|
168
|
+
1. Deserialize snapshot data
|
|
169
|
+
2. Repopulate in-memory state (topics, sequences, subscriptions)
|
|
170
|
+
3. All persistent KV state for messages remains (snapshot doesn't delete message history — only the Raft log entries are compacted)
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
## 5. Lock-Free Delivery Model
|
|
175
|
+
|
|
176
|
+
The state machine doesn't directly deliver messages. It writes to KV, and the Delivery layer reads from KV via `kv.watch()`.
|
|
177
|
+
|
|
178
|
+
This separation means:
|
|
179
|
+
- State machine apply() is fast (just KV writes)
|
|
180
|
+
- Delivery is async and non-blocking
|
|
181
|
+
- Subscribers on any node see messages as they are committed
|
|
182
|
+
- If a subscriber disconnects, it can reconnect and resume from its last cursor
|