@bongos/core 1.17.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/.bongos-core.json +5727 -0
- package/.claude/skills/blocker-review/SKILL.md +91 -0
- package/.claude/skills/blocker-solve/SKILL.md +96 -0
- package/.claude/skills/builder-backup/SKILL.md +54 -0
- package/.claude/skills/builder-box/SKILL.md +45 -0
- package/.claude/skills/builder-claim/SKILL.md +76 -0
- package/.claude/skills/builder-connect/SKILL.md +59 -0
- package/.claude/skills/builder-cost/SKILL.md +47 -0
- package/.claude/skills/builder-end/SKILL.md +81 -0
- package/.claude/skills/builder-exit/SKILL.md +88 -0
- package/.claude/skills/builder-key/SKILL.md +40 -0
- package/.claude/skills/builder-reauth/SKILL.md +50 -0
- package/.claude/skills/builder-redteam/SKILL.md +109 -0
- package/.claude/skills/builder-release/SKILL.md +41 -0
- package/.claude/skills/builder-setup/SKILL.md +62 -0
- package/.claude/skills/builder-ship/SKILL.md +79 -0
- package/.claude/skills/builder-stage/SKILL.md +51 -0
- package/.claude/skills/builder-start/SKILL.md +46 -0
- package/.claude/skills/close-box/SKILL.md +43 -0
- package/.claude/skills/design-sync/SKILL.md +69 -0
- package/.claude/skills/dev/SKILL.md +49 -0
- package/.claude/skills/feedback/SKILL.md +32 -0
- package/.claude/skills/figma-design-sync/SKILL.md +74 -0
- package/.claude/skills/goal-review/SKILL.md +89 -0
- package/.claude/skills/idea-triage/SKILL.md +144 -0
- package/.claude/skills/ideate/SKILL.md +82 -0
- package/.claude/skills/merge-mode/SKILL.md +169 -0
- package/.claude/skills/new-project/SKILL.md +108 -0
- package/.claude/skills/otb-character-review/SKILL.md +71 -0
- package/.claude/skills/otb-design-review/SKILL.md +47 -0
- package/.claude/skills/otb-feedback-capture/SKILL.md +45 -0
- package/.claude/skills/otb-figma-sync/SKILL.md +54 -0
- package/.claude/skills/otb-tile-generate/SKILL.md +45 -0
- package/.claude/skills/paint/SKILL.md +70 -0
- package/.claude/skills/planning-session/SKILL.md +299 -0
- package/.claude/skills/priority-session/SKILL.md +134 -0
- package/.claude/skills/read-session-export/SKILL.md +58 -0
- package/.claude/skills/recall/SKILL.md +52 -0
- package/.claude/skills/session-handoff/SKILL.md +46 -0
- package/.claude/skills/status/SKILL.md +33 -0
- package/.devcontainer/Dockerfile +69 -0
- package/.devcontainer/README.md +73 -0
- package/.devcontainer/devcontainer-lock.json +19 -0
- package/.devcontainer/devcontainer.json +93 -0
- package/.devcontainer/healthcheck.sh +84 -0
- package/.devcontainer/init-firewall.sh +198 -0
- package/.devcontainer/post-create.sh +153 -0
- package/.dockerignore +36 -0
- package/.env.local.example +32 -0
- package/.gitattributes +83 -0
- package/.gitignore +91 -0
- package/CLAUDE.md +242 -0
- package/CODE_OF_CONDUCT.md +46 -0
- package/CONTRIBUTING.md +51 -0
- package/Dockerfile +46 -0
- package/GOVERNANCE.md +44 -0
- package/LICENSE +661 -0
- package/README.md +88 -0
- package/bin/bongos.js +222 -0
- package/clients/bongos-client/README.md +48 -0
- package/clients/bongos-client/bongos-client.global.js +617 -0
- package/clients/bongos-client/examples/hello-world.mjs +62 -0
- package/clients/bongos-client/index.cjs +619 -0
- package/clients/bongos-client/index.d.ts +793 -0
- package/clients/bongos-client/index.mjs +614 -0
- package/clients/bongos-client/package.json +32 -0
- package/config/branding.neutral.json +60 -0
- package/config/design-tokens.neutral.json +51 -0
- package/config/design-tokens.schema.json +96 -0
- package/config/modules.neutral.json +9 -0
- package/docker-compose.yml +52 -0
- package/docker-entrypoint.sh +30 -0
- package/docs/adr/0001-stack-choice-single-vps.md +45 -0
- package/docs/adr/0002-digitalocean-over-hetzner.md +27 -0
- package/docs/adr/0003-cloudflare-origin-cert-over-letsencrypt.md +35 -0
- package/docs/adr/0004-amazonprimea-name-and-trademark-acceptance.md +45 -0
- package/docs/adr/0005-invisible-other-players-in-v1.md +37 -0
- package/docs/adr/0006-singleton-worldroom-plus-queueroom.md +30 -0
- package/docs/adr/0007-persistent-identity-via-localstorage-uuid.md +31 -0
- package/docs/adr/0008-family-based-tile-generation.md +86 -0
- package/docs/adr/0008-google-chat-oauth-user-auth.md +37 -0
- package/docs/adr/0009-autotile-architecture.md +181 -0
- package/docs/adr/0010-pms-architecture.md +70 -0
- package/docs/adr/0011-terrain-id-rendering-model.md +174 -0
- package/docs/adr/0012-ground-object-cell-split.md +208 -0
- package/docs/adr/0013-paths-as-object-overlays-with-autotile-dispatch.md +158 -0
- package/docs/adr/0014-families-canonical-over-vocabulary.md +103 -0
- package/docs/adr/0015-task-dependencies-and-auto-promotion.md +125 -0
- package/docs/adr/0016-trust-boundary-server-enforced-permissions.md +132 -0
- package/docs/adr/0017-code-simplification-and-repo-cleanliness.md +74 -0
- package/docs/adr/0018-three-rank-model-goes-live.md +97 -0
- package/docs/adr/0019-red-team-bounty-payout-table.md +52 -0
- package/docs/adr/0020-security-model-public-stub.md +70 -0
- package/docs/adr/0021-per-builder-skill-model-preferences.md +99 -0
- package/docs/adr/0022-secrets-policy.md +124 -0
- package/docs/adr/0023-kind-multipliers-and-idea-bonus.md +118 -0
- package/docs/adr/0024-cloneable-repo-local-first-memory.md +277 -0
- package/docs/adr/0024-multi-agent-system-architecture.md +125 -0
- package/docs/adr/0025-offsite-backup-vendor-digitalocean-spaces.md +59 -0
- package/docs/adr/0025-structured-criterion-task-link.md +44 -0
- package/docs/adr/0026-bfg-memory-hygiene-and-cross-builder-learning.md +117 -0
- package/docs/adr/0027-bfg-session-inefficiency-evaluator.md +170 -0
- package/docs/adr/0028-honest-llm-spend-accounting.md +109 -0
- package/docs/adr/0029-status-page-outage-resilience.md +59 -0
- package/docs/adr/0030-builders-hall-live-updates.md +59 -0
- package/docs/adr/0031-cloud-dev-environments-for-builders.md +222 -0
- package/docs/adr/0032-discord-mirror-of-gds.md +50 -0
- package/docs/adr/0033-discord-bot-service-principal.md +82 -0
- package/docs/adr/0034-thetes-graduated-newcomer-rank.md +53 -0
- package/docs/adr/0035-builder-onboarding-three-paths.md +128 -0
- package/docs/adr/0036-builders-subdomain-and-ui-reorg.md +40 -0
- package/docs/adr/0037-discord-channel-management.md +51 -0
- package/docs/adr/0038-chromebook-ttyd-cloudflare-tunnel.md +111 -0
- package/docs/adr/0039-setup-first-onboarding-ux.md +49 -0
- package/docs/adr/0040-remote-control-default-browser-onramp.md +47 -0
- package/docs/adr/0041-temporary-grader-bypass-killswitch.md +40 -0
- package/docs/adr/0042-builder-self-deploy-ci-auto-merge.md +82 -0
- package/docs/adr/0043-git-ssh-trust-boundary-and-rank-floor-on-permission-paths.md +74 -0
- package/docs/adr/0044-mediterranean-palette-replacement.md +73 -0
- package/docs/adr/0044-per-box-live-game-preview.md +57 -0
- package/docs/adr/0045-devbox-desktop-app.md +133 -0
- package/docs/adr/0046-sandbox-first-review-gate.md +72 -0
- package/docs/adr/0047-discord-bugs-intake-anti-abuse.md +36 -0
- package/docs/adr/0048-works-in-progress-ia-split.md +32 -0
- package/docs/adr/0049-split-parallel-safety-contract.md +46 -0
- package/docs/adr/0050-device-flow-admission-invite-gated-by-default.md +43 -0
- package/docs/adr/0051-full-session-transcript-corpus.md +57 -0
- package/docs/adr/0052-sandbox-for-everyone-game-only-preview.md +70 -0
- package/docs/adr/0053-scoped-dev-box-session.md +55 -0
- package/docs/adr/0054-session-token-reward-cost-plus.md +63 -0
- package/docs/adr/0055-server-mediated-branch-publish.md +47 -0
- package/docs/adr/0056-prod-deploy-script-mirror-and-healthcheck-retry.md +62 -0
- package/docs/adr/0057-container-cost-ledger.md +28 -0
- package/docs/adr/0057-discord-archon-approval-channels.md +64 -0
- package/docs/adr/0058-automatic-gate-surface-gatekeeper.md +64 -0
- package/docs/adr/0059-single-approval-remove-devbox-approval-gate.md +37 -0
- package/docs/adr/0060-gds-retrieval-layer.md +97 -0
- package/docs/adr/0061-context-layer-decomposition.md +61 -0
- package/docs/adr/0062-medusa-instance-model-decoupling.md +107 -0
- package/docs/adr/0063-generated-repo-map-symbol-skeleton.md +44 -0
- package/docs/adr/0064-rename-medusa-to-cloud-bongos.md +49 -0
- package/docs/adr/0065-agpl-nonprofit-ai-first-governance.md +69 -0
- package/docs/adr/0066-generated-file-map-sections.md +51 -0
- package/docs/adr/0067-session-start-fast-forward-pull.md +43 -0
- package/docs/adr/0068-shared-art-key-for-newcomers.md +38 -0
- package/docs/adr/0069-hall-live-channel-sse-decouple.md +35 -0
- package/docs/adr/0070-deterministic-session-card-delivery.md +44 -0
- package/docs/adr/0071-box-confirm-before-destroyed-and-drift-reconcile.md +59 -0
- package/docs/adr/0072-bongos-app-mac-signed-first-windows-deferred.md +35 -0
- package/docs/adr/0072-dev-box-code-staleness-visibility.md +39 -0
- package/docs/adr/0073-builder-needs-signal-and-byok-gemini-key.md +64 -0
- package/docs/adr/0073-secrets-scan-exclude-uri-detector.md +37 -0
- package/docs/adr/0074-memory-map-stays-light.md +32 -0
- package/docs/adr/0075-per-system-cost-attribution.md +37 -0
- package/docs/adr/0076-in-session-deterministic-compaction.md +58 -0
- package/docs/adr/0077-content-addressed-llm-cache.md +32 -0
- package/docs/adr/0078-deterministic-first-cron.md +48 -0
- package/docs/adr/0079-value-gated-autonomous-engagement.md +39 -0
- package/docs/adr/0080-llm-cache-api-transport-and-trust-model.md +46 -0
- package/docs/adr/0081-tool-agnostic-design-layer.md +62 -0
- package/docs/adr/0082-productized-key-storage-provisioning.md +32 -0
- package/docs/adr/0082-server-side-merge-conflict-auto-resolution.md +55 -0
- package/docs/adr/0083-modular-architecture-strangler-build-plan.md +143 -0
- package/docs/adr/0084-auto-derived-per-task-rank-floor.md +86 -0
- package/docs/adr/0085-remove-default-per-builder-spend-cap.md +39 -0
- package/docs/adr/0086-goal-scoped-work-hierarchy.md +123 -0
- package/docs/adr/0087-bongos-app-architecture-and-handoff-contract.md +49 -0
- package/docs/adr/0087-compete-on-governance-not-tooling-cursor.md +65 -0
- package/docs/adr/0088-consistent-character-generative-animation.md +169 -0
- package/docs/adr/0089-modular-multi-model-adversarial-grader.md +179 -0
- package/docs/adr/0090-metic-task-authoring.md +73 -0
- package/docs/adr/0091-bounding-the-kernel-and-db-carve.md +106 -0
- package/docs/adr/0092-hosting-module-and-on-prem-target.md +117 -0
- package/docs/adr/0093-tranche-2-core-carve-sequence.md +72 -0
- package/docs/adr/0094-repo-atlas-self-drawing-codebase-map.md +49 -0
- package/docs/adr/0095-borrowed-memory-and-retrieval-concepts.md +65 -0
- package/docs/adr/0095-cross-agent-context-management.md +58 -0
- package/docs/adr/0096-require-reward-before-workable.md +209 -0
- package/docs/adr/0097-one-active-claim-per-session-and-worktree-binding.md +46 -0
- package/docs/adr/0097-retroactive-reward-backfill.md +124 -0
- package/docs/adr/0098-public-mirror-publish-manifest.md +92 -0
- package/docs/adr/0099-delayed-redacted-mirror-export.md +55 -0
- package/docs/adr/0100-two-repo-instance-model.md +60 -0
- package/docs/adr/0101-goal-hierarchy-phase-5-judge-membership-reward.md +90 -0
- package/docs/adr/0102-finish-bounding-the-kernel.md +36 -0
- package/docs/adr/0103-core-first-extraction-cloud-bongos-trunk.md +70 -0
- package/docs/adr/0103-gdsv4-bongos-consolidation.md +28 -0
- package/docs/adr/0104-trust-gds-api-channel-in-auto-mode.md +42 -0
- package/docs/adr/0105-instance-seed-migrations-out-of-core.md +47 -0
- package/docs/adr/0106-goal-owner-manager-authority.md +84 -0
- package/docs/adr/0107-module-upstreaming-contribution-to-core-catalog.md +83 -0
- package/docs/adr/0108-instance-composition-configurable-root.md +87 -0
- package/docs/adr/0109-self-describing-openapi-and-hosted-docs.md +44 -0
- package/docs/adr/0110-untrack-whole-file-generated-nav-docs.md +49 -0
- package/docs/adr/0111-instance-hosting-provisioning-module.md +135 -0
- package/docs/adr/0112-private-goals-invitations-join-requests.md +72 -0
- package/docs/adr/0113-sandbox-studio-descope-superseded-by-0044-0052.md +41 -0
- package/docs/adr/0114-instance-docs-discovery-contract.md +32 -0
- package/docs/adr/0115-scheduled-routines-portability.md +31 -0
- package/docs/adr/0116-api-error-envelope-and-code-taxonomy.md +62 -0
- package/docs/adr/0117-api-versioning-and-deprecation-policy.md +50 -0
- package/docs/adr/0118-api-contract-source-of-truth-code-first.md +47 -0
- package/docs/adr/0119-api-pagination-contract.md +34 -0
- package/docs/adr/0120-pay-on-land-and-builder-owned-rebase-gate.md +108 -0
- package/docs/adr/0121-greenfield-vs-brownfield-onboarding-adopt-existing-repo.md +97 -0
- package/docs/adr/0122-onboarding-diagram-renders-deploy-rendered-off-git.md +43 -0
- package/docs/adr/0123-box-idle-sweep-autosave-before-destroy.md +36 -0
- package/docs/adr/0124-typed-api-response-bodies.md +37 -0
- package/docs/adr/0125-control-plane-scaffolds-standalone-instance-repo.md +36 -0
- package/docs/adr/0126-dedicated-cloudbongos-control-plane-droplet.md +30 -0
- package/docs/adr/0127-cross-box-fleet-observability.md +64 -0
- package/docs/adr/0128-provisioning-runner-privilege-and-db-auth-model.md +46 -0
- package/docs/adr/0129-cloudbongos-control-plane-pull-deploy.md +34 -0
- package/docs/adr/0130-provision-remote-exec-over-ssh.md +61 -0
- package/docs/adr/0131-rank-scoped-skill-visibility.md +47 -0
- package/docs/adr/0132-cohost-fleet-control-plane-migration.md +54 -0
- package/docs/adr/0133-github-app-manifest-onboarding-signin.md +42 -0
- package/docs/adr/0134-private-first-npm-distribution.md +38 -0
- package/docs/adr/README.md +208 -0
- package/docs/api/openapi.json +13720 -0
- package/docs/api-reference.md +437 -0
- package/docs/architecture.md +244 -0
- package/docs/branding-contract.md +66 -0
- package/docs/branding-fill-prompt.md +25 -0
- package/docs/canonical-permissions.md +241 -0
- package/docs/design/container-exterior-tiles.md +49 -0
- package/docs/design/container-exterior.md +81 -0
- package/docs/design/container-interior.md +77 -0
- package/docs/design/modular-architecture/00-research-report.md +107 -0
- package/docs/design/modular-architecture/01-architecture.md +125 -0
- package/docs/design/modular-architecture/02-module-map.md +116 -0
- package/docs/design/modular-architecture/03-builder-flows.md +104 -0
- package/docs/design/modular-architecture/04-module-lifecycle.md +62 -0
- package/docs/design/modular-architecture/README.md +27 -0
- package/docs/design/vanilla-hall-ui-redesign-scope.md +284 -0
- package/docs/design/world-map-scroll.md +41 -0
- package/docs/design-contract.md +320 -0
- package/docs/file-map.md +418 -0
- package/docs/handoff-template.md +92 -0
- package/docs/modules-contract.md +293 -0
- package/docs/onboarding/browser-terminal-guide.md +73 -0
- package/docs/onboarding/diagrams/01-task-lifecycle.mmd +28 -0
- package/docs/onboarding/diagrams/02-rank-ladder.mmd +54 -0
- package/docs/onboarding/diagrams/03-drachmae-karma.mmd +37 -0
- package/docs/onboarding/diagrams/04-architecture.mmd +51 -0
- package/docs/onboarding/diagrams/05-versioning.mmd +29 -0
- package/docs/onboarding/diagrams/README.md +94 -0
- package/docs/onboarding/diagrams/assertions.json +170 -0
- package/docs/onboarding/diagrams/puppeteer-config.json +1 -0
- package/docs/onboarding/diagrams/render-config.json +9 -0
- package/docs/onboarding/drachmae-and-karma.md +178 -0
- package/docs/onboarding/primer.md +202 -0
- package/docs/project-context.template.md +67 -0
- package/docs/recipes/README.md +35 -0
- package/docs/recipes/audit-replay.md +100 -0
- package/docs/recipes/bongos-cli-release.md +66 -0
- package/docs/recipes/builder-box-lifecycle.md +152 -0
- package/docs/recipes/claude-design-loop.md +143 -0
- package/docs/recipes/claude-gemini-bongos-doors.md +155 -0
- package/docs/recipes/cloudbongos-staging-gate.md +139 -0
- package/docs/recipes/cloudbongos-standup.md +111 -0
- package/docs/recipes/devbox-app-release.md +93 -0
- package/docs/recipes/devbox-app-windows-test.md +128 -0
- package/docs/recipes/failed-ship-recovery-proof.md +102 -0
- package/docs/recipes/figma-design-loop.md +129 -0
- package/docs/recipes/gds-db-backup.md +255 -0
- package/docs/recipes/instance-deploy.md +37 -0
- package/docs/recipes/managed-settings-remote-control.md +416 -0
- package/docs/recipes/memory-backup.md +71 -0
- package/docs/recipes/memory-sync-conflicts.md +98 -0
- package/docs/recipes/multi-builder-merge.md +78 -0
- package/docs/recipes/ops-gotchas.md +212 -0
- package/docs/recipes/overnight-builder.md +53 -0
- package/docs/recipes/packaging-the-core.md +49 -0
- package/docs/recipes/parallel-load-results-2026-05-30.md +63 -0
- package/docs/recipes/parallel-load-test.md +32 -0
- package/docs/recipes/pixel-art-pipeline.md +411 -0
- package/docs/recipes/private-npm-distribution.md +79 -0
- package/docs/recipes/search-index-ingestion.md +67 -0
- package/docs/recipes/self-host.md +60 -0
- package/docs/recipes/ship-and-regrade.md +72 -0
- package/docs/recipes/staging-data.md +50 -0
- package/docs/recipes/staging-environment.md +215 -0
- package/docs/recipes/upgrading-the-core.md +58 -0
- package/docs/research/cursor-competitive-analysis.md +255 -0
- package/docs/research/llm-model-agnostic-and-cheaper-grader.md +227 -0
- package/migrations/003_pms.sql +284 -0
- package/migrations/004_pms_cost_idempotency.sql +13 -0
- package/migrations/005_pms_smoke_filter.sql +44 -0
- package/migrations/006_pms_v2.sql +378 -0
- package/migrations/007_pms_v2_hierarchy_trigger.sql +59 -0
- package/migrations/008_pms_v2_migration_allocator.sql +27 -0
- package/migrations/009_pms_v2_blockers_table.sql +68 -0
- package/migrations/010_uptime.sql +29 -0
- package/migrations/011_backfill_v2_v3_done_when.sql +20 -0
- package/migrations/012_pms_v2_task_lifecycle_states.sql +82 -0
- package/migrations/013_claim_locking.sql +22 -0
- package/migrations/014_pms_task_discipline.sql +86 -0
- package/migrations/015_pms_estimation_calibration.sql +140 -0
- package/migrations/016_pms_task_grades.sql +60 -0
- package/migrations/017_version_progress_exclude_abandoned.sql +49 -0
- package/migrations/019_rename_pms_v3_to_gds_v3.sql +65 -0
- package/migrations/020_task_dependencies.sql +99 -0
- package/migrations/021_v3_renumber_and_deps.sql +224 -0
- package/migrations/022_v3_reconcile_dep_gated_status.sql +41 -0
- package/migrations/023_pms_rank.sql +30 -0
- package/migrations/025_builder_exit_status.sql +15 -0
- package/migrations/027_builders_preferred_disciplines.sql +46 -0
- package/migrations/028_tasks_parallel_safe.sql +71 -0
- package/migrations/029_rank_three_live.sql +32 -0
- package/migrations/030_vulnerability_reports.sql +61 -0
- package/migrations/031_reward_simplification.sql +57 -0
- package/migrations/032_repo_health_snapshots.sql +56 -0
- package/migrations/033_audit_log.sql +64 -0
- package/migrations/034_lifecycle_breakdown_leaf_only.sql +62 -0
- package/migrations/035_auth_token_hygiene.sql +66 -0
- package/migrations/037_builder_skill_model_prefs.sql +44 -0
- package/migrations/038_task_override_requests.sql +51 -0
- package/migrations/039_newcomer_friendly_column.sql +124 -0
- package/migrations/040_builder_karma.sql +58 -0
- package/migrations/041_kind_multipliers_and_idea_bonus.sql +42 -0
- package/migrations/042_criterion_proposal_workflow.sql +78 -0
- package/migrations/043_builder_onboarding_observability.sql +66 -0
- package/migrations/044_tasks_requires_rank.sql +97 -0
- package/migrations/045_builder_onboarding_state.sql +147 -0
- package/migrations/046_cost_log_builder_attribution.sql +42 -0
- package/migrations/054_builder_memory.sql +108 -0
- package/migrations/055_task_criteria.sql +90 -0
- package/migrations/058_peer_votes.sql +41 -0
- package/migrations/059_onboarding_pick_disciplines.sql +59 -0
- package/migrations/060_access_requests.sql +46 -0
- package/migrations/061_backfill_override_ship_attribution.sql +29 -0
- package/migrations/062_session_records.sql +34 -0
- package/migrations/063_session_records_tool_errors_idx.sql +11 -0
- package/migrations/064_grade_attempts.sql +18 -0
- package/migrations/065_bfg_principal.sql +58 -0
- package/migrations/066_live_notify_triggers.sql +69 -0
- package/migrations/067_builder_boxes.sql +117 -0
- package/migrations/067_discord_bot_foundation.sql +69 -0
- package/migrations/068_thetes_requires_rank.sql +27 -0
- package/migrations/069_builder_ssh_keys.sql +66 -0
- package/migrations/070_box_intents.sql +101 -0
- package/migrations/071_box_first_provision_approval.sql +46 -0
- package/migrations/072_onboarding_ship_three_remove_primer.sql +80 -0
- package/migrations/073_box_terminal_access.sql +46 -0
- package/migrations/075_builder_sound_prefs.sql +28 -0
- package/migrations/078_box_claude_active.sql +22 -0
- package/migrations/079_box_first_connected_at.sql +20 -0
- package/migrations/081_tasks_needs_migration.sql +34 -0
- package/migrations/084_tasks_security_sensitive.sql +24 -0
- package/migrations/085_security_engagement_docs.sql +34 -0
- package/migrations/086_rename_disciplines.sql +125 -0
- package/migrations/088_builders_anthropic_link.sql +28 -0
- package/migrations/089_builders_monthly_budget.sql +19 -0
- package/migrations/090_box_scoped_sessions.sql +38 -0
- package/migrations/091_session_token_reward.sql +44 -0
- package/migrations/093_tasks_sandbox_review.sql +22 -0
- package/migrations/102_remove_box_first_provision_approval.sql +58 -0
- package/migrations/103_search_chunks.sql +90 -0
- package/migrations/104_builder_box_blocked.sql +34 -0
- package/migrations/105_box_host_keys.sql +35 -0
- package/migrations/111_medusa_customer0_framing.sql +35 -0
- package/migrations/112_drop_track_check.sql +25 -0
- package/migrations/113_merge_lease.sql +16 -0
- package/migrations/114_cloudbongos_rename_live_strings.sql +32 -0
- package/migrations/118_currency_label_decoupling.sql +23 -0
- package/migrations/119_builder_behavior_prefs.sql +31 -0
- package/migrations/121_box_code_version.sql +37 -0
- package/migrations/122_builder_gemini_key.sql +30 -0
- package/migrations/123_cost_log_tiers.sql +33 -0
- package/migrations/124_cost_baseline.sql +45 -0
- package/migrations/125_llm_cache.sql +54 -0
- package/migrations/126_autonomy_runs.sql +33 -0
- package/migrations/143_cost_calibration.sql +63 -0
- package/migrations/145_backfill_task_requires_rank.sql +84 -0
- package/migrations/160_goal_tier.sql +88 -0
- package/migrations/163_polymorphic_dependencies.sql +187 -0
- package/migrations/164_event_sound_prefs.sql +20 -0
- package/migrations/165_task_module_key.sql +15 -0
- package/migrations/171_claims_published_head_sha.sql +24 -0
- package/migrations/174_close_orphaned_claims_on_terminal_tasks.sql +30 -0
- package/migrations/175_task_grades_diff_hash.sql +9 -0
- package/migrations/176_promotion_respects_open_blockers.sql +58 -0
- package/migrations/176_ui_discipline.sql +40 -0
- package/migrations/177_require_reward_before_workable.sql +76 -0
- package/migrations/178_reward_gate_auto_assign_revert_autopromote.sql +61 -0
- package/migrations/179_search_chunk_usefulness.sql +33 -0
- package/migrations/180_one_active_claim_per_session.sql +54 -0
- package/migrations/181_cost_log_skill_name.sql +33 -0
- package/migrations/184_claim_release_requested.sql +25 -0
- package/migrations/185_module_upstreaming_goal_wiring.sql +59 -0
- package/migrations/187_goal_sort_order.sql +30 -0
- package/migrations/187_tasks_kind_check_add_verify.sql +21 -0
- package/migrations/README.md +88 -0
- package/migrations/core_188_goal_visibility_and_membership_requests.sql +71 -0
- package/migrations/core_189_core_upgrades_ledger.sql +37 -0
- package/migrations/core_189_credit_log_task_id_index.sql +19 -0
- package/migrations/core_190_rebuild_claimable_task_views.sql +71 -0
- package/migrations/instance/018_pms_v3_planning_seed.sql +131 -0
- package/migrations/instance/080_gds_v4_planning_seed.sql +75 -0
- package/migrations/instance/110_medusa_planning_seed.sql +70 -0
- package/migrations/instance/120_bongos_v1_planning_seed.sql +69 -0
- package/migrations/instance/144_bongos_v1_module_system_criterion.sql +26 -0
- package/migrations/instance/159_bongos_v1_goal_hierarchy_criterion.sql +29 -0
- package/migrations/instance/172_v2_world_planning_seed.sql +163 -0
- package/migrations/instance/173_bongos_v1_c7_core_modularized.sql +33 -0
- package/migrations/instance/182_gdsv4_bongos_consolidation.sql +132 -0
- package/migrations/instance/183_gdsv4_carryover_themed_goals.sql +116 -0
- package/migrations/instance/186_bongos_v1_governance_planning_seed.sql +69 -0
- package/modules/autonomy/CLAUDE.md +49 -0
- package/modules/autonomy/db.js +50 -0
- package/modules/autonomy/module.json +13 -0
- package/modules/autonomy/pollers/routine-timers.js +146 -0
- package/modules/autonomy/routes/autonomy.js +37 -0
- package/modules/builder-settings/CLAUDE.md +58 -0
- package/modules/builder-settings/builder-needs.js +115 -0
- package/modules/builder-settings/db.js +168 -0
- package/modules/builder-settings/display-name.js +84 -0
- package/modules/builder-settings/event-sound-prefs.js +169 -0
- package/modules/builder-settings/interaction-prefs.js +201 -0
- package/modules/builder-settings/model-alloc-prefs.js +147 -0
- package/modules/builder-settings/module.json +10 -0
- package/modules/builder-settings/render-prefs.js +103 -0
- package/modules/builder-settings/routes/settings.js +417 -0
- package/modules/builder-settings/settings.js +52 -0
- package/modules/builder-settings/skill-prefs.js +196 -0
- package/modules/builder-settings/sound-prefs.js +178 -0
- package/modules/builder-settings/wandering-prefs.js +282 -0
- package/modules/dev-box/CLAUDE.md +38 -0
- package/modules/dev-box/box-access.js +275 -0
- package/modules/dev-box/box-credential.js +94 -0
- package/modules/dev-box/box-onboard.js +486 -0
- package/modules/dev-box/boxes.js +842 -0
- package/modules/dev-box/db.js +39 -0
- package/modules/dev-box/module.json +14 -0
- package/modules/dev-box/routes/box.js +977 -0
- package/modules/discord/CLAUDE.md +50 -0
- package/modules/discord/auth.js +54 -0
- package/modules/discord/bug-attachments.js +210 -0
- package/modules/discord/db.js +96 -0
- package/modules/discord/discord-approvals.js +145 -0
- package/modules/discord/discord-audit.js +29 -0
- package/modules/discord/discord-bot.js +545 -0
- package/modules/discord/discord-bugs.js +257 -0
- package/modules/discord/discord-channels.js +412 -0
- package/modules/discord/discord-inbound.js +147 -0
- package/modules/discord/discord-message-buffer.js +54 -0
- package/modules/discord/discord-reaction.js +186 -0
- package/modules/discord/discord-role-sync.js +318 -0
- package/modules/discord/module.json +14 -0
- package/modules/discord/pollers/discord-bot.js +19 -0
- package/modules/discord/routes/bug-attachments.js +44 -0
- package/modules/discord/routes/discord.js +102 -0
- package/modules/discord/ship-broadcast.js +78 -0
- package/modules/discord/webhook.js +74 -0
- package/modules/economy/CLAUDE.md +48 -0
- package/modules/economy/achievements.js +594 -0
- package/modules/economy/cost-classify.js +331 -0
- package/modules/economy/cost-summary-shape.js +90 -0
- package/modules/economy/cost.js +438 -0
- package/modules/economy/credits.js +430 -0
- package/modules/economy/migrations/economy_001_fix_gds_shipper_description.sql +91 -0
- package/modules/economy/module.json +10 -0
- package/modules/economy/reward.js +61 -0
- package/modules/economy/routes/cost.js +97 -0
- package/modules/economy/routes/leaderboard.js +26 -0
- package/modules/economy/routes/reward.js +42 -0
- package/modules/economy/streak.js +285 -0
- package/modules/grading/CLAUDE.md +42 -0
- package/modules/grading/db.js +39 -0
- package/modules/grading/grader-rubric.json +151 -0
- package/modules/grading/grader-workers/efficiency.js +213 -0
- package/modules/grading/grader-workers/extract-json.js +80 -0
- package/modules/grading/grader-workers/fence.js +100 -0
- package/modules/grading/grader-workers/hacker.js +239 -0
- package/modules/grading/grader-workers/index.js +183 -0
- package/modules/grading/grader-workers/narc.js +207 -0
- package/modules/grading/grader-workers/quality.js +198 -0
- package/modules/grading/grader-workers/rubric.js +20 -0
- package/modules/grading/grader-workers/worker-prompt.js +89 -0
- package/modules/grading/grader-workers/worker-verdict.js +50 -0
- package/modules/grading/grader.js +1790 -0
- package/modules/grading/module.json +12 -0
- package/modules/grading/routes/grade.js +51 -0
- package/modules/hall-ui/CLAUDE.md +61 -0
- package/modules/hall-ui/module.json +14 -0
- package/modules/hall-ui/public/atlas.html +180 -0
- package/modules/hall-ui/public/atlas.js +336 -0
- package/modules/hall-ui/public/box-panel.js +423 -0
- package/modules/hall-ui/public/brand-apply.js +117 -0
- package/modules/hall-ui/public/builders.js +3028 -0
- package/modules/hall-ui/public/chime.wav +0 -0
- package/modules/hall-ui/public/copy-on-click.js +174 -0
- package/modules/hall-ui/public/cursors/arrow.png +0 -0
- package/modules/hall-ui/public/cursors/hand-pointer.png +0 -0
- package/modules/hall-ui/public/cursors/magnifier-out.png +0 -0
- package/modules/hall-ui/public/cursors/magnifier.png +0 -0
- package/modules/hall-ui/public/diagram-viewer.css +125 -0
- package/modules/hall-ui/public/diagram-viewer.js +330 -0
- package/modules/hall-ui/public/diagrams.html +113 -0
- package/modules/hall-ui/public/dom-utils.js +212 -0
- package/modules/hall-ui/public/drachmae.html +68 -0
- package/modules/hall-ui/public/drachmae.js +136 -0
- package/modules/hall-ui/public/gate.html +143 -0
- package/modules/hall-ui/public/gate.js +228 -0
- package/modules/hall-ui/public/goals-page.js +1297 -0
- package/modules/hall-ui/public/goals.html +376 -0
- package/modules/hall-ui/public/goals.js +119 -0
- package/modules/hall-ui/public/hall-widgets.js +189 -0
- package/modules/hall-ui/public/harbor.html +167 -0
- package/modules/hall-ui/public/harbor.js +335 -0
- package/modules/hall-ui/public/index.html +116 -0
- package/modules/hall-ui/public/instances-panel.js +172 -0
- package/modules/hall-ui/public/md-reader.js +234 -0
- package/modules/hall-ui/public/modules.html +119 -0
- package/modules/hall-ui/public/modules.js +154 -0
- package/modules/hall-ui/public/new-project-wizard.js +186 -0
- package/modules/hall-ui/public/not-ready.html +48 -0
- package/modules/hall-ui/public/pair.html +119 -0
- package/modules/hall-ui/public/pair.js +132 -0
- package/modules/hall-ui/public/primer.css +404 -0
- package/modules/hall-ui/public/primer.html +85 -0
- package/modules/hall-ui/public/primer.js +641 -0
- package/modules/hall-ui/public/profile.html +85 -0
- package/modules/hall-ui/public/profile.js +236 -0
- package/modules/hall-ui/public/ranks.html +69 -0
- package/modules/hall-ui/public/ranks.js +206 -0
- package/modules/hall-ui/public/roadmap.html +209 -0
- package/modules/hall-ui/public/roadmap.js +375 -0
- package/modules/hall-ui/public/sessions.html +92 -0
- package/modules/hall-ui/public/sessions.js +222 -0
- package/modules/hall-ui/public/settings.html +640 -0
- package/modules/hall-ui/public/settings.js +1219 -0
- package/modules/hall-ui/public/shell.js +495 -0
- package/modules/hall-ui/public/style.css +1748 -0
- package/modules/hall-ui/public/task-detail.js +253 -0
- package/modules/hall-ui/public/task.html +83 -0
- package/modules/hall-ui/public/task.js +326 -0
- package/modules/hall-ui/public/watch.html +333 -0
- package/modules/hall-ui/public/watch.js +859 -0
- package/modules/hall-ui/public/work.html +469 -0
- package/modules/hall-ui/public/work.js +1292 -0
- package/modules/ideas/CLAUDE.md +37 -0
- package/modules/ideas/blockers.js +100 -0
- package/modules/ideas/inbox.js +459 -0
- package/modules/ideas/module.json +10 -0
- package/modules/ideas/routes/blockers.js +120 -0
- package/modules/ideas/routes/inbox.js +230 -0
- package/modules/lifecycle/CLAUDE.md +63 -0
- package/modules/lifecycle/conflict-resolve.js +436 -0
- package/modules/lifecycle/db.js +4970 -0
- package/modules/lifecycle/done-when.js +355 -0
- package/modules/lifecycle/github-push.js +969 -0
- package/modules/lifecycle/goal-conflicts.js +133 -0
- package/modules/lifecycle/hierarchy.js +104 -0
- package/modules/lifecycle/lifecycle.js +58 -0
- package/modules/lifecycle/merge-lock.js +261 -0
- package/modules/lifecycle/migrations/lifecycle_001_goal_first_leads.sql +28 -0
- package/modules/lifecycle/migrations/lifecycle_002_backfill_orphan_task_goals.sql +36 -0
- package/modules/lifecycle/module.json +13 -0
- package/modules/lifecycle/pollers/publish-reconciler.js +20 -0
- package/modules/lifecycle/publish-reconciler.js +418 -0
- package/modules/lifecycle/routes/analytics.js +63 -0
- package/modules/lifecycle/routes/claims.js +506 -0
- package/modules/lifecycle/routes/dependencies.js +82 -0
- package/modules/lifecycle/routes/done-when.js +136 -0
- package/modules/lifecycle/routes/gate-approvals.js +197 -0
- package/modules/lifecycle/routes/goals.js +1419 -0
- package/modules/lifecycle/routes/lifecycle.js +43 -0
- package/modules/lifecycle/routes/tasks.js +1703 -0
- package/modules/lifecycle/routes/versions.js +128 -0
- package/modules/lifecycle/ship-card.js +505 -0
- package/modules/lifecycle/ship-preflight.js +225 -0
- package/modules/lifecycle/task-classifier.js +512 -0
- package/modules/lifecycle/version-close.js +106 -0
- package/modules/memory/CLAUDE.md +40 -0
- package/modules/memory/learnings.js +275 -0
- package/modules/memory/memory.js +572 -0
- package/modules/memory/module.json +12 -0
- package/modules/memory/routes/learnings.js +90 -0
- package/modules/memory/routes/memory.js +916 -0
- package/modules/memory/routes/search.js +188 -0
- package/modules/memory/search-chunker.js +252 -0
- package/modules/memory/search.js +320 -0
- package/modules/onboarding/CLAUDE.md +55 -0
- package/modules/onboarding/approval-broadcast.js +59 -0
- package/modules/onboarding/db.js +54 -0
- package/modules/onboarding/module.json +10 -0
- package/modules/onboarding/newcomer-restock.js +212 -0
- package/modules/onboarding/onboarding-state.js +532 -0
- package/modules/onboarding/onboarding.js +508 -0
- package/modules/onboarding/port.js +63 -0
- package/modules/onboarding/routes/access-requests.js +208 -0
- package/modules/onboarding/routes/onboarding.js +54 -0
- package/modules/security/CLAUDE.md +44 -0
- package/modules/security/module.json +10 -0
- package/modules/security/routes/reports.js +251 -0
- package/modules/security/secret-scrub.js +201 -0
- package/modules/security/security.js +294 -0
- package/modules/sessions/CLAUDE.md +39 -0
- package/modules/sessions/bfg.js +357 -0
- package/modules/sessions/db.js +326 -0
- package/modules/sessions/module.json +10 -0
- package/modules/sessions/pulse.js +149 -0
- package/modules/sessions/routes/sessions.js +331 -0
- package/modules/status-ui/CLAUDE.md +47 -0
- package/modules/status-ui/module.json +14 -0
- package/modules/status-ui/public/README.md +29 -0
- package/modules/status-ui/public/cursors/arrow.png +0 -0
- package/modules/status-ui/public/cursors/hand-pointer.png +0 -0
- package/modules/status-ui/public/index.html +363 -0
- package/modules/status-ui/public/snapshots/.gitkeep +0 -0
- package/modules/status-ui/public/status.js +1375 -0
- package/modules/status-ui/public/style.css +1342 -0
- package/package-lock.json +975 -0
- package/package.json +28 -0
- package/public-docs/index.html +35 -0
- package/public-docs/redoc.standalone.js +1838 -0
- package/public-docs/redoc.standalone.js.LICENSE.txt +102 -0
- package/public-landing/buddha.png +0 -0
- package/public-landing/create.html +868 -0
- package/public-landing/index.html +168 -0
- package/scripts/bongos-mcp.js +28 -0
- package/scripts/cron/style_guide_audit.sh +134 -0
- package/scripts/discord/README.md +52 -0
- package/scripts/discord/lib.js +80 -0
- package/scripts/discord/post.js +51 -0
- package/scripts/gds/CLAUDE.md +144 -0
- package/scripts/gds/abandon.js +58 -0
- package/scripts/gds/adopt-detect.js +123 -0
- package/scripts/gds/adopt-import.js +111 -0
- package/scripts/gds/adopt-preflight.js +121 -0
- package/scripts/gds/api.js +78 -0
- package/scripts/gds/architect-audit.js +288 -0
- package/scripts/gds/art-stage.js +152 -0
- package/scripts/gds/audit-authorship.sh +243 -0
- package/scripts/gds/audit-deps.js +121 -0
- package/scripts/gds/audit-exports.js +128 -0
- package/scripts/gds/audit-replay.sh +161 -0
- package/scripts/gds/audit-ships.js +251 -0
- package/scripts/gds/autonomy-gate.js +135 -0
- package/scripts/gds/backfill-cost.js +165 -0
- package/scripts/gds/backfill-sessions.js +351 -0
- package/scripts/gds/backfill-task-rewards.js +408 -0
- package/scripts/gds/backup.js +94 -0
- package/scripts/gds/bfg-principal-token.js +65 -0
- package/scripts/gds/box-auth-check.js +160 -0
- package/scripts/gds/box-connect-lib.js +453 -0
- package/scripts/gds/box.js +1258 -0
- package/scripts/gds/build-bongos.js +94 -0
- package/scripts/gds/capture.js +123 -0
- package/scripts/gds/cf-tunnel.js +419 -0
- package/scripts/gds/ci-grade.js +82 -0
- package/scripts/gds/claim-recall.js +112 -0
- package/scripts/gds/claim.js +333 -0
- package/scripts/gds/classify-discipline.js +153 -0
- package/scripts/gds/claude-materialize.js +176 -0
- package/scripts/gds/cleanup-orphans.js +74 -0
- package/scripts/gds/cli-lib.js +518 -0
- package/scripts/gds/code.js +101 -0
- package/scripts/gds/codemod-rename-src-gds.js +145 -0
- package/scripts/gds/conductor-dispatch.js +426 -0
- package/scripts/gds/context-pack.js +228 -0
- package/scripts/gds/coreB-carve-proof.sh +716 -0
- package/scripts/gds/cost.js +47 -0
- package/scripts/gds/db-backup-nightly.sh +160 -0
- package/scripts/gds/db-backup-offsite.sh +152 -0
- package/scripts/gds/demote.js +40 -0
- package/scripts/gds/design-sync.js +62 -0
- package/scripts/gds/diagnose-achievements.js +118 -0
- package/scripts/gds/diagram-facts.js +319 -0
- package/scripts/gds/discipline-modes.json +25 -0
- package/scripts/gds/discord-channels.js +66 -0
- package/scripts/gds/do-api.js +176 -0
- package/scripts/gds/docs-entropy.js +403 -0
- package/scripts/gds/doctor.js +389 -0
- package/scripts/gds/feedback-latest.js +94 -0
- package/scripts/gds/fetch-art-key.js +106 -0
- package/scripts/gds/fetch-sound-prefs.js +88 -0
- package/scripts/gds/figma-design-sync.js +61 -0
- package/scripts/gds/fitness.js +1446 -0
- package/scripts/gds/gate-review.js +322 -0
- package/scripts/gds/gating.js +325 -0
- package/scripts/gds/gds-db-backup.service +24 -0
- package/scripts/gds/gds-db-backup.timer +20 -0
- package/scripts/gds/gds-db-offsite.service +29 -0
- package/scripts/gds/gds-db-offsite.timer +18 -0
- package/scripts/gds/gen-api-client.js +508 -0
- package/scripts/gds/gen-api-docs.js +1037 -0
- package/scripts/gds/gen-atlas.js +366 -0
- package/scripts/gds/gen-diagrams.js +608 -0
- package/scripts/gds/gen-file-map.js +196 -0
- package/scripts/gds/gen-repo-map.js +519 -0
- package/scripts/gds/gen-session-index.js +210 -0
- package/scripts/gds/git-merge-regen.js +147 -0
- package/scripts/gds/grade-smoke.js +205 -0
- package/scripts/gds/hooks/pre-push.js +169 -0
- package/scripts/gds/http-api-client.js +88 -0
- package/scripts/gds/init.js +903 -0
- package/scripts/gds/install-git-hooks.js +114 -0
- package/scripts/gds/key-card.js +213 -0
- package/scripts/gds/key-status.js +126 -0
- package/scripts/gds/land-watch.js +168 -0
- package/scripts/gds/learning-capture.js +145 -0
- package/scripts/gds/lib.sh +44 -0
- package/scripts/gds/linkify-refs.js +473 -0
- package/scripts/gds/local-preview-lib.js +159 -0
- package/scripts/gds/local-preview.js +95 -0
- package/scripts/gds/login.js +225 -0
- package/scripts/gds/main-audit.js +279 -0
- package/scripts/gds/me.js +88 -0
- package/scripts/gds/memory-map.js +174 -0
- package/scripts/gds/merge-lock.js +71 -0
- package/scripts/gds/migration-namespace.js +200 -0
- package/scripts/gds/mirror-lineage-check.js +319 -0
- package/scripts/gds/mirror-redact.js +305 -0
- package/scripts/gds/module.js +482 -0
- package/scripts/gds/newcomer-floor.config.json +13 -0
- package/scripts/gds/newcomer-floor.js +415 -0
- package/scripts/gds/newcomer-floor.templates.json +86 -0
- package/scripts/gds/newcomer-floor.test.js +235 -0
- package/scripts/gds/next-number.js +163 -0
- package/scripts/gds/oauth-secret.js +197 -0
- package/scripts/gds/onboard.js +217 -0
- package/scripts/gds/onboarding-analyze.js +226 -0
- package/scripts/gds/onboarding-config.js +178 -0
- package/scripts/gds/onboarding-ship.js +92 -0
- package/scripts/gds/package-core.js +684 -0
- package/scripts/gds/paste-token.js +131 -0
- package/scripts/gds/portability-smoke-art.sh +85 -0
- package/scripts/gds/portability-smoke-memory.sh +147 -0
- package/scripts/gds/provision.js +1324 -0
- package/scripts/gds/publish-manifest.js +307 -0
- package/scripts/gds/pulse.js +309 -0
- package/scripts/gds/push-main.js +45 -0
- package/scripts/gds/read-session-export.js +359 -0
- package/scripts/gds/reauth.js +149 -0
- package/scripts/gds/recall.js +135 -0
- package/scripts/gds/release.js +71 -0
- package/scripts/gds/render-ideas.js +173 -0
- package/scripts/gds/repo-metrics.js +363 -0
- package/scripts/gds/resolve-skill-model.js +57 -0
- package/scripts/gds/run-routine.js +197 -0
- package/scripts/gds/run-unit-tests.js +178 -0
- package/scripts/gds/sandbox-stage.js +653 -0
- package/scripts/gds/search-ingest-db.js +209 -0
- package/scripts/gds/search-ingest-md.js +225 -0
- package/scripts/gds/security-baseline-check.sh +180 -0
- package/scripts/gds/seed-adopt-tasks.js +75 -0
- package/scripts/gds/seed-api-contract-goal-tasks.js +141 -0
- package/scripts/gds/seed-bongos-app-tasks.js +294 -0
- package/scripts/gds/seed-bongos-coreB-tranche1-tasks.js +81 -0
- package/scripts/gds/seed-bongos-coreB-tranche2-tasks.js +100 -0
- package/scripts/gds/seed-bongos-goal-hierarchy-tasks.js +307 -0
- package/scripts/gds/seed-bongos-module-system-tasks.js +346 -0
- package/scripts/gds/seed-bongos-tasks.js +214 -0
- package/scripts/gds/seed-gds-v4-tasks.js +624 -0
- package/scripts/gds/seed-governance-tasks.js +340 -0
- package/scripts/gds/seed-medusa-tasks.js +440 -0
- package/scripts/gds/seed-module-upstreaming.js +219 -0
- package/scripts/gds/seed-productization-tasks.js +235 -0
- package/scripts/gds/seed-provisioning-tasks.js +83 -0
- package/scripts/gds/seed-staging.sh +104 -0
- package/scripts/gds/seed-v2-world-tasks.js +283 -0
- package/scripts/gds/seed-v3-tasks.js +1981 -0
- package/scripts/gds/session-cost.js +393 -0
- package/scripts/gds/session-digest.js +179 -0
- package/scripts/gds/session-eval.js +576 -0
- package/scripts/gds/session.js +404 -0
- package/scripts/gds/setup.js +504 -0
- package/scripts/gds/shell.js +100 -0
- package/scripts/gds/ship.js +3618 -0
- package/scripts/gds/smoke-batch-claim.sh +213 -0
- package/scripts/gds/smoke-batch-release.sh +296 -0
- package/scripts/gds/smoke-box.sh +150 -0
- package/scripts/gds/smoke-claim-consistency.sh +212 -0
- package/scripts/gds/smoke-dependencies.sh +84 -0
- package/scripts/gds/smoke-gds.js +125 -0
- package/scripts/gds/smoke-write.sh +168 -0
- package/scripts/gds/start.js +782 -0
- package/scripts/gds/status.js +365 -0
- package/scripts/gds/triage.js +366 -0
- package/scripts/gds/upgrade.js +421 -0
- package/scripts/gds/validate-design.js +254 -0
- package/scripts/gds/version-close.js +549 -0
- package/scripts/migrate.sh +183 -0
- package/scripts/migrate_cost_ledger.sh +178 -0
- package/scripts/public-mirror-export.js +291 -0
- package/scripts/render-diagrams.sh +88 -0
- package/scripts/security/dep-audit.js +276 -0
- package/scripts/setup-builder.js +274 -0
- package/scripts/setup-builder.sh +28 -0
- package/scripts/snapshots/backfill-history.mjs +292 -0
- package/scripts/snapshots/maybe-render-on-deploy.sh +66 -0
- package/scripts/snapshots/render-pre-art-eras.mjs +329 -0
- package/scripts/snapshots/render-world.mjs +322 -0
- package/scripts/status-mirror-sync.js +192 -0
- package/scripts/status-probe.mjs +185 -0
- package/server.js +212 -0
- package/src/asset-version.js +71 -0
- package/src/bongos/CLAUDE.md +64 -0
- package/src/bongos/api-errors.js +281 -0
- package/src/bongos/api-path-404.js +67 -0
- package/src/bongos/api-prefix.js +38 -0
- package/src/bongos/app-pair.js +172 -0
- package/src/bongos/auth.js +979 -0
- package/src/bongos/cascade-dispatch.js +123 -0
- package/src/bongos/db-kernel.js +252 -0
- package/src/bongos/db.js +911 -0
- package/src/bongos/goal-scope-check.js +120 -0
- package/src/bongos/hierarchy-config.js +189 -0
- package/src/bongos/live-channel.js +145 -0
- package/src/bongos/llm-cache.js +260 -0
- package/src/bongos/llm-pricing.js +220 -0
- package/src/bongos/metrics.js +286 -0
- package/src/bongos/middleware/audit.js +274 -0
- package/src/bongos/middleware/error-envelope.js +93 -0
- package/src/bongos/middleware/rate-limit.js +195 -0
- package/src/bongos/module-scope-map.js +271 -0
- package/src/bongos/optimizer.js +166 -0
- package/src/bongos/path-match.js +47 -0
- package/src/bongos/permission-path-check.js +248 -0
- package/src/bongos/pool.js +55 -0
- package/src/bongos/repo-info.js +91 -0
- package/src/bongos/route-rank-check.js +420 -0
- package/src/bongos/routes/CLAUDE.md +43 -0
- package/src/bongos/routes/_helpers.js +369 -0
- package/src/bongos/routes/audit-log.js +59 -0
- package/src/bongos/routes/auth.js +755 -0
- package/src/bongos/routes/backup.js +104 -0
- package/src/bongos/routes/builders.js +526 -0
- package/src/bongos/routes/healthz.js +16 -0
- package/src/bongos/routes/instance.js +129 -0
- package/src/bongos/routes/live.js +125 -0
- package/src/bongos/routes/llm-cache.js +119 -0
- package/src/bongos/routes/me.js +380 -0
- package/src/bongos/routes/modules.js +131 -0
- package/src/bongos/routes/optimizer.js +54 -0
- package/src/bongos/routes/public.js +476 -0
- package/src/bongos/routes/security.js +207 -0
- package/src/bongos/routes.js +166 -0
- package/src/bongos/secret-box.js +177 -0
- package/src/bongos/sensitive-surfaces.js +30 -0
- package/src/bongos/serve-internal.js +889 -0
- package/src/bongos/uptime-poller.js +90 -0
- package/src/bongos-downloads.js +70 -0
- package/src/branding.js +182 -0
- package/src/build-info.js +77 -0
- package/src/devbox-downloads.js +67 -0
- package/src/instance-config.js +200 -0
- package/src/module-api.js +366 -0
- package/src/module-loader/loader.js +268 -0
- package/src/module-loader/manifest-schema.js +140 -0
- package/src/module-loader/provenance.js +28 -0
- package/src/module-loader/semver.js +100 -0
- package/src/module-seams.js +291 -0
- package/src/modules.js +254 -0
- package/src/platform-server.js +135 -0
- package/src/ui/adapters/claude-design/index.js +333 -0
- package/src/ui/adapters/figma/index.js +328 -0
- package/tests/abandon_task.mjs +138 -0
- package/tests/achievements_reconcile.mjs +167 -0
- package/tests/adopt_detect.mjs +141 -0
- package/tests/adopt_import.mjs +132 -0
- package/tests/adopt_preflight.mjs +105 -0
- package/tests/anti_grid.mjs +89 -0
- package/tests/api_client.mjs +231 -0
- package/tests/api_docs.mjs +283 -0
- package/tests/api_error_envelope_buildcheck.mjs +56 -0
- package/tests/api_error_envelope_middleware.mjs +99 -0
- package/tests/api_error_registry.mjs +108 -0
- package/tests/api_pagination_contract.mjs +51 -0
- package/tests/api_path_404.mjs +96 -0
- package/tests/app_pair.mjs +168 -0
- package/tests/architect.mjs +140 -0
- package/tests/art_key.mjs +121 -0
- package/tests/art_stage.mjs +121 -0
- package/tests/asset_version.mjs +94 -0
- package/tests/atlas.mjs +69 -0
- package/tests/audit_deps.mjs +74 -0
- package/tests/audit_middleware.mjs +385 -0
- package/tests/auth_admission_gate.mjs +164 -0
- package/tests/auth_anthropic_identity.mjs +95 -0
- package/tests/auth_duplicate_cookie.mjs +56 -0
- package/tests/auth_error_brand.mjs +77 -0
- package/tests/auth_flow_slice1.mjs +223 -0
- package/tests/auth_inactive_builder.mjs +94 -0
- package/tests/auth_page_gate.mjs +92 -0
- package/tests/auth_session_ttl.mjs +155 -0
- package/tests/autonomous_fit_protected_paths.mjs +115 -0
- package/tests/autonomy_gate.mjs +85 -0
- package/tests/autotile_variants.mjs +256 -0
- package/tests/autotile_xverify.mjs +133 -0
- package/tests/backfill_sessions.mjs +101 -0
- package/tests/backfill_task_rewards.mjs +152 -0
- package/tests/backup_cli.mjs +104 -0
- package/tests/bfg.mjs +327 -0
- package/tests/bfg_write.mjs +423 -0
- package/tests/bongos_box_connect.mjs +89 -0
- package/tests/bongos_dispatch.mjs +74 -0
- package/tests/bongos_downloads.mjs +118 -0
- package/tests/bongos_login.mjs +34 -0
- package/tests/box_access.mjs +186 -0
- package/tests/box_auth_check.mjs +114 -0
- package/tests/box_code_staleness.mjs +116 -0
- package/tests/box_connect_e2e.mjs +196 -0
- package/tests/box_cost.mjs +70 -0
- package/tests/box_dns_repoint.mjs +151 -0
- package/tests/box_host_keys.mjs +102 -0
- package/tests/box_onboard.mjs +317 -0
- package/tests/box_scope_session.mjs +115 -0
- package/tests/box_ship_permissions.mjs +71 -0
- package/tests/box_terminal_ssrf.mjs +90 -0
- package/tests/boxes.mjs +1255 -0
- package/tests/branding.mjs +88 -0
- package/tests/bug_attachments.mjs +189 -0
- package/tests/build_info.mjs +88 -0
- package/tests/builder_needs.mjs +99 -0
- package/tests/cap_newcomer_tasks.mjs +114 -0
- package/tests/cascade-dispatch.mjs +95 -0
- package/tests/cf_tunnel.mjs +459 -0
- package/tests/claim_recall.mjs +150 -0
- package/tests/claims_bind_session.mjs +47 -0
- package/tests/claude_materialize.mjs +148 -0
- package/tests/cli_box_scope.mjs +52 -0
- package/tests/cli_lib_formatters.mjs +87 -0
- package/tests/cli_token_reissue.mjs +147 -0
- package/tests/client_bundle_route.mjs +47 -0
- package/tests/cloud_bongos_pack.mjs +85 -0
- package/tests/conductor.mjs +496 -0
- package/tests/confirm_attribution.mjs +156 -0
- package/tests/conflict_resolve.mjs +462 -0
- package/tests/context_pack.mjs +240 -0
- package/tests/cost.mjs +94 -0
- package/tests/cost_audit.mjs +122 -0
- package/tests/cost_budget_status.mjs +78 -0
- package/tests/cost_reconcile.mjs +102 -0
- package/tests/cost_summary_shape.mjs +94 -0
- package/tests/credit_grant.mjs +376 -0
- package/tests/criterion_progress.mjs +220 -0
- package/tests/criterion_proposal.mjs +109 -0
- package/tests/criterion_ref_parse.mjs +53 -0
- package/tests/currency_label.mjs +119 -0
- package/tests/day_cycle.mjs +197 -0
- package/tests/dependencies_migration.mjs +77 -0
- package/tests/dependencies_polymorphic.mjs +212 -0
- package/tests/deploy_instance.mjs +78 -0
- package/tests/devbox_downloads.mjs +122 -0
- package/tests/diff_derived_signals.mjs +115 -0
- package/tests/discord_approvals.mjs +174 -0
- package/tests/discord_autojoin.mjs +158 -0
- package/tests/discord_bot.mjs +94 -0
- package/tests/discord_bugs.mjs +297 -0
- package/tests/discord_channels.mjs +337 -0
- package/tests/discord_foundation.mjs +76 -0
- package/tests/discord_inbound.mjs +190 -0
- package/tests/discord_message_buffer.mjs +87 -0
- package/tests/discord_oauth.mjs +55 -0
- package/tests/discord_reaction.mjs +170 -0
- package/tests/discord_role_sync.mjs +151 -0
- package/tests/display_name.mjs +123 -0
- package/tests/dns_preflight.mjs +74 -0
- package/tests/event_sound_prefs.mjs +194 -0
- package/tests/eviction_policy.mjs +279 -0
- package/tests/figma_adapter.mjs +199 -0
- package/tests/file_map.mjs +91 -0
- package/tests/first_admin_bootstrap.mjs +40 -0
- package/tests/fitness.mjs +435 -0
- package/tests/fitness_two_root.mjs +104 -0
- package/tests/fixtures/session-506-digest.json +34 -0
- package/tests/gate_approvals.mjs +451 -0
- package/tests/gate_review.mjs +152 -0
- package/tests/git_merge_regen.mjs +151 -0
- package/tests/github_push_ancestry.mjs +119 -0
- package/tests/github_push_land_proof.mjs +127 -0
- package/tests/github_push_merge_driver.mjs +175 -0
- package/tests/goal_abuse_matrix.mjs +187 -0
- package/tests/goal_achievement.mjs +146 -0
- package/tests/goal_conflicts.mjs +305 -0
- package/tests/goal_dependencies_read.mjs +73 -0
- package/tests/goal_member_roles.mjs +420 -0
- package/tests/goal_membership_requests.mjs +332 -0
- package/tests/goal_routes.mjs +203 -0
- package/tests/goal_scope_check.mjs +167 -0
- package/tests/goal_tier.mjs +312 -0
- package/tests/goal_wall_proof.mjs +112 -0
- package/tests/grade_attempts.mjs +73 -0
- package/tests/grade_attribution.mjs +117 -0
- package/tests/grade_diff_hash.mjs +191 -0
- package/tests/grade_server_authoritative.mjs +305 -0
- package/tests/grade_unavailable_display.mjs +66 -0
- package/tests/grader.mjs +1960 -0
- package/tests/grader_bypass.mjs +57 -0
- package/tests/grader_panel.mjs +252 -0
- package/tests/grader_prompt_fencing.mjs +192 -0
- package/tests/helpers.mjs +52 -0
- package/tests/hierarchy-config.mjs +81 -0
- package/tests/init.mjs +463 -0
- package/tests/instance_config.mjs +76 -0
- package/tests/instance_manifest.mjs +110 -0
- package/tests/interaction_prefs.mjs +72 -0
- package/tests/key-card.mjs +110 -0
- package/tests/key-status.mjs +45 -0
- package/tests/land_watch.mjs +115 -0
- package/tests/lifecycle-card.mjs +145 -0
- package/tests/lifecycle_breakdown_view.mjs +236 -0
- package/tests/linkify_refs.mjs +264 -0
- package/tests/live_channel.mjs +128 -0
- package/tests/live_sse.mjs +122 -0
- package/tests/llm-cache-route.mjs +110 -0
- package/tests/llm-cache.mjs +140 -0
- package/tests/llm-pricing.mjs +152 -0
- package/tests/local_preview.mjs +136 -0
- package/tests/main_audit.mjs +137 -0
- package/tests/memory_isolation.mjs +431 -0
- package/tests/memory_map.mjs +107 -0
- package/tests/memory_pull.mjs +429 -0
- package/tests/merge_lease.mjs +100 -0
- package/tests/merge_lock.mjs +312 -0
- package/tests/metrics.mjs +147 -0
- package/tests/migration_allocation.mjs +146 -0
- package/tests/migration_namespace.mjs +185 -0
- package/tests/migrations_fresh_replay_guard.mjs +38 -0
- package/tests/mirror_lineage_fulltree.mjs +45 -0
- package/tests/mirror_lineage_proof.mjs +72 -0
- package/tests/mirror_redact.mjs +193 -0
- package/tests/model_alloc_prefs.mjs +63 -0
- package/tests/module-scope-map.mjs +88 -0
- package/tests/module_api.mjs +110 -0
- package/tests/module_cli.mjs +292 -0
- package/tests/module_contributions.mjs +148 -0
- package/tests/module_loader.mjs +286 -0
- package/tests/module_manifest.mjs +194 -0
- package/tests/module_owned_tests.mjs +105 -0
- package/tests/module_provenance.mjs +34 -0
- package/tests/module_route_rank.mjs +147 -0
- package/tests/module_seams.mjs +68 -0
- package/tests/modules.mjs +156 -0
- package/tests/modules_route.mjs +38 -0
- package/tests/newcomer_floor.mjs +17 -0
- package/tests/newcomer_restock.mjs +80 -0
- package/tests/next_number.mjs +154 -0
- package/tests/oauth_secret.mjs +60 -0
- package/tests/onboard.mjs +70 -0
- package/tests/onboarding_gate.mjs +267 -0
- package/tests/onboarding_observability.mjs +344 -0
- package/tests/onboarding_route_signals.mjs +175 -0
- package/tests/onboarding_state.mjs +346 -0
- package/tests/one_active_claim_per_session.mjs +111 -0
- package/tests/orphaned_claim_ship.mjs +135 -0
- package/tests/override_attribution.mjs +142 -0
- package/tests/override_request_ownership.mjs +235 -0
- package/tests/package_core.mjs +435 -0
- package/tests/parallel-load.mjs +402 -0
- package/tests/path_match.mjs +62 -0
- package/tests/permission_path.mjs +151 -0
- package/tests/platform_boot.mjs +167 -0
- package/tests/pre_compact.mjs +60 -0
- package/tests/preview_server.mjs +127 -0
- package/tests/profile_route.mjs +197 -0
- package/tests/provision.mjs +805 -0
- package/tests/provisioning_github_app_routes.mjs +98 -0
- package/tests/public_mirror_export.mjs +124 -0
- package/tests/public_task_resolver.mjs +112 -0
- package/tests/publish_branch_route.mjs +422 -0
- package/tests/publish_manifest.mjs +184 -0
- package/tests/publish_reconciler.mjs +728 -0
- package/tests/rank_gate.mjs +463 -0
- package/tests/rate_limit_public.mjs +217 -0
- package/tests/read_session_export.mjs +89 -0
- package/tests/recall_cli.mjs +82 -0
- package/tests/recall_hints.mjs +119 -0
- package/tests/recent_shipped_window.mjs +80 -0
- package/tests/regrade_eligibility.mjs +202 -0
- package/tests/render_prefs.mjs +122 -0
- package/tests/repo_map.mjs +92 -0
- package/tests/reward_gate.mjs +284 -0
- package/tests/route_rank_check.mjs +243 -0
- package/tests/route_validation.mjs +490 -0
- package/tests/routine_timers.mjs +72 -0
- package/tests/rubric_fixtures.mjs +140 -0
- package/tests/run_routine.mjs +69 -0
- package/tests/sandbox_stage.mjs +582 -0
- package/tests/scrubber_corpus.mjs +257 -0
- package/tests/search_chunker.mjs +209 -0
- package/tests/search_ingest.mjs +96 -0
- package/tests/search_ingest_db.mjs +88 -0
- package/tests/search_isolation.mjs +204 -0
- package/tests/search_route.mjs +95 -0
- package/tests/secret_box.mjs +189 -0
- package/tests/security_docs.mjs +186 -0
- package/tests/security_route.mjs +108 -0
- package/tests/served_paths_shipped.mjs +118 -0
- package/tests/session-cards.mjs +142 -0
- package/tests/session_506_regression.mjs +69 -0
- package/tests/session_caps.mjs +238 -0
- package/tests/session_cost.mjs +133 -0
- package/tests/session_digest.mjs +73 -0
- package/tests/session_eval.mjs +386 -0
- package/tests/session_index.mjs +105 -0
- package/tests/session_records.mjs +369 -0
- package/tests/session_search.mjs +78 -0
- package/tests/session_start_freshness.mjs +123 -0
- package/tests/setup_smoke.mjs +154 -0
- package/tests/ship_autolinkify.mjs +60 -0
- package/tests/ship_automerge_injection.mjs +174 -0
- package/tests/ship_broadcast_routing.mjs +125 -0
- package/tests/ship_broadcast_server.mjs +175 -0
- package/tests/ship_card.mjs +280 -0
- package/tests/ship_ci_deploy.mjs +374 -0
- package/tests/ship_preflight.mjs +368 -0
- package/tests/ship_premerge.mjs +75 -0
- package/tests/ship_resume.mjs +129 -0
- package/tests/ship_upload_skip.mjs +89 -0
- package/tests/ship_zero_commit.mjs +60 -0
- package/tests/single_host_hall.mjs +98 -0
- package/tests/skill_prefs.mjs +150 -0
- package/tests/smoke_preflight.mjs +66 -0
- package/tests/snapshot_picker.mjs +233 -0
- package/tests/sound_prefs.mjs +198 -0
- package/tests/sprite_facing.mjs +35 -0
- package/tests/status-probe.mjs +89 -0
- package/tests/status_backfill.mjs +94 -0
- package/tests/stop_refcheck.mjs +127 -0
- package/tests/streak.mjs +175 -0
- package/tests/subdomain_auth.mjs +58 -0
- package/tests/task_classifier_vocab.mjs +41 -0
- package/tests/task_create_idempotency.mjs +96 -0
- package/tests/task_goal_link.mjs +93 -0
- package/tests/task_ownership_gate.mjs +125 -0
- package/tests/terrain_picker.mjs +298 -0
- package/tests/touches_overlap.mjs +75 -0
- package/tests/triage_development.mjs +140 -0
- package/tests/turn_in_place.mjs +280 -0
- package/tests/upgrade.mjs +357 -0
- package/tests/verify_task_guard.mjs +64 -0
- package/tests/version_close.mjs +76 -0
- package/tests/versions_route.mjs +93 -0
- package/tests/walkability.mjs +188 -0
- package/tests/wandering_prefs.mjs +176 -0
- package/tests/worktree_disambiguation.mjs +105 -0
- package/tests/worktree_guard.mjs +90 -0
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
-- 124_cost_baseline.sql — the savings counterfactual ledger (GDS-V4 task 1345,
|
|
2
|
+
-- System 1: Cost Attribution & Savings Ledger).
|
|
3
|
+
--
|
|
4
|
+
-- Every later LLM-reduction system (compaction, value-gate, deterministic cron,
|
|
5
|
+
-- LLM cache) needs to PROVE its savings in dollars, not assert them. This tiny
|
|
6
|
+
-- table is where each records a counterfactual: "this run cost amount_usd; had
|
|
7
|
+
-- the system not acted it would have cost baseline_usd". The saving is
|
|
8
|
+
-- SUM(baseline_usd - amount_usd) grouped by system tag (db.costSummary().savings,
|
|
9
|
+
-- surfaced on /public/cost-summary).
|
|
10
|
+
--
|
|
11
|
+
-- CONTRACT (enforced by the writing code, not the schema): baseline_usd is
|
|
12
|
+
-- ALWAYS computed server-side from token counts via src/bongos/llm-pricing.js
|
|
13
|
+
-- priceUsage() — NEVER a client-supplied dollar figure (the same trust rule as
|
|
14
|
+
-- the cost-plus reward, ADR 0054). A system records here only what it can price
|
|
15
|
+
-- from real usage.
|
|
16
|
+
--
|
|
17
|
+
-- system — the system/lever claiming the saving, e.g.
|
|
18
|
+
-- 'system2:compaction', 'system5:llm-cache'. Free text tag.
|
|
19
|
+
-- baseline_usd — counterfactual cost had the system NOT acted (priced).
|
|
20
|
+
-- amount_usd — what it actually cost (priced; 0 for a full elimination).
|
|
21
|
+
-- source_ref — per-event idempotency key (e.g. a tree-SHA or session id).
|
|
22
|
+
-- description — optional human note.
|
|
23
|
+
--
|
|
24
|
+
-- Idempotent unique index on (system, source_ref) so a system can safely
|
|
25
|
+
-- re-record the same event without double-counting (mirrors cost_log's pattern).
|
|
26
|
+
-- Additive, new table, safe to re-run.
|
|
27
|
+
|
|
28
|
+
CREATE TABLE IF NOT EXISTS cost_baseline (
|
|
29
|
+
id bigserial PRIMARY KEY,
|
|
30
|
+
system text NOT NULL,
|
|
31
|
+
baseline_usd numeric NOT NULL,
|
|
32
|
+
amount_usd numeric NOT NULL DEFAULT 0,
|
|
33
|
+
source_ref text,
|
|
34
|
+
description text,
|
|
35
|
+
task_id integer,
|
|
36
|
+
builder_id integer,
|
|
37
|
+
recorded_at timestamptz NOT NULL DEFAULT now()
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uniq_cost_baseline_system_ref
|
|
41
|
+
ON cost_baseline (system, source_ref)
|
|
42
|
+
WHERE source_ref IS NOT NULL;
|
|
43
|
+
|
|
44
|
+
INSERT INTO schema_migrations (version) VALUES ('124_cost_baseline')
|
|
45
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
-- 125_llm_cache.sql — content-addressed LLM result cache (GDS-V4 task 1358,
|
|
2
|
+
-- System 5: Content-Addressed LLM Cache).
|
|
3
|
+
--
|
|
4
|
+
-- Memoizes idempotent model runs at the shared spawn primitive
|
|
5
|
+
-- (grader.runSubagent). An identical (normalized-prompt-hash, model, task_type,
|
|
6
|
+
-- git-tree-sha) invocation — e.g. a nightly architect-audit / audit-cron over an
|
|
7
|
+
-- UNCHANGED main, or an onboarding-analyze re-run on the same immutable session —
|
|
8
|
+
-- returns the stored result with ZERO new tokens. Validity is bound to the git
|
|
9
|
+
-- SHA of the embedded inputs (scope_sha), so a stale answer is only ever returned
|
|
10
|
+
-- when the inputs are provably unchanged (ADR — task 1360). Cannot touch the
|
|
11
|
+
-- interactive marathon (that path does not call runSubagent); this is the
|
|
12
|
+
-- residual safety net behind Systems 3 + 4.
|
|
13
|
+
--
|
|
14
|
+
-- Mirrors the content-addressed convention of migrations/103_search_chunks.sql:
|
|
15
|
+
-- one table in the EXISTING GDS Postgres, no new service, no new monthly cost.
|
|
16
|
+
--
|
|
17
|
+
-- cache_key — sha256(normalized_prompt | model | task_type | scope_sha);
|
|
18
|
+
-- the PRIMARY KEY (the content address). The store path
|
|
19
|
+
-- upserts ON CONFLICT (cache_key).
|
|
20
|
+
-- prompt_hash — sha256 of the normalized prompt alone (debug / collisions).
|
|
21
|
+
-- model — the model the cached result was produced on (part of the key).
|
|
22
|
+
-- task_type — which normalizer produced the key (architect-audit, …).
|
|
23
|
+
-- scope_sha — git tree-hash of the embedded inputs; the invalidation key.
|
|
24
|
+
-- result_stdout — the cached subagent stdout (the thing we replay on a hit).
|
|
25
|
+
-- result_cost_usd — what the ORIGINAL run cost (priced); a hit replays it at $0
|
|
26
|
+
-- and counts result_cost_usd toward tokens_saved/savings.
|
|
27
|
+
-- hit_count — number of $0 replays served (bumped on each hit).
|
|
28
|
+
-- tokens_saved_est — cumulative estimated tokens NOT re-billed across hits.
|
|
29
|
+
-- owner_builder_id — nullable; non-null only for a per-builder-private cached run.
|
|
30
|
+
-- created_at / last_hit_at / expires_at — lifecycle; expires_at indexed for a
|
|
31
|
+
-- cheap TTL sweep (a future reaper; null = no expiry).
|
|
32
|
+
--
|
|
33
|
+
-- Additive, new table + index, idempotent: safe to re-run.
|
|
34
|
+
|
|
35
|
+
CREATE TABLE IF NOT EXISTS llm_cache (
|
|
36
|
+
cache_key text PRIMARY KEY,
|
|
37
|
+
prompt_hash text NOT NULL,
|
|
38
|
+
model text,
|
|
39
|
+
task_type text,
|
|
40
|
+
scope_sha text,
|
|
41
|
+
result_stdout text NOT NULL,
|
|
42
|
+
result_cost_usd numeric NOT NULL DEFAULT 0,
|
|
43
|
+
hit_count integer NOT NULL DEFAULT 0,
|
|
44
|
+
tokens_saved_est bigint NOT NULL DEFAULT 0,
|
|
45
|
+
owner_builder_id integer,
|
|
46
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
47
|
+
last_hit_at timestamptz,
|
|
48
|
+
expires_at timestamptz
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
CREATE INDEX IF NOT EXISTS idx_llm_cache_expires ON llm_cache (expires_at);
|
|
52
|
+
|
|
53
|
+
INSERT INTO schema_migrations (version) VALUES ('125_llm_cache')
|
|
54
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
-- 126_autonomy_runs.sql — observability for the autonomy precheck (GDS-V4 task
|
|
2
|
+
-- 1351, System 3: Value-Gated Autonomous Engagement).
|
|
3
|
+
--
|
|
4
|
+
-- The $0 deterministic precheck (scripts/gds/autonomy-gate.js) decides, before
|
|
5
|
+
-- any model boots, whether a nightly routine should fire (signal present) or skip
|
|
6
|
+
-- (no claimable work + main unchanged, or no open ideas, or the autonomous
|
|
7
|
+
-- month-to-date spend has hit its ceiling). Every decision — especially every
|
|
8
|
+
-- SKIP — lands here so the gate is auditable: "why didn't overnight-builder run
|
|
9
|
+
-- last night?" is a query, not a guess. The latest `go` row's head_sha is also
|
|
10
|
+
-- the "stored last_head" the next precheck compares origin/main against.
|
|
11
|
+
--
|
|
12
|
+
-- SYSTEM 3 IS BUILT DISABLED (owner directive): the gate is inert until
|
|
13
|
+
-- OTB_AUTONOMY_ENABLED=1, so `enabled` records whether it was armed at decision
|
|
14
|
+
-- time. While off, every row is decision='go', reason='disabled' — proving the
|
|
15
|
+
-- wiring changes nothing until the owner arms it alongside the grader rework.
|
|
16
|
+
--
|
|
17
|
+
-- Additive, new table + index, idempotent: safe to re-run.
|
|
18
|
+
|
|
19
|
+
CREATE TABLE IF NOT EXISTS autonomy_runs (
|
|
20
|
+
id bigserial PRIMARY KEY,
|
|
21
|
+
routine text NOT NULL,
|
|
22
|
+
decision text NOT NULL, -- 'go' | 'no-go'
|
|
23
|
+
reason text,
|
|
24
|
+
head_sha text,
|
|
25
|
+
claimable_count integer,
|
|
26
|
+
enabled boolean NOT NULL DEFAULT false,
|
|
27
|
+
created_at timestamptz NOT NULL DEFAULT now()
|
|
28
|
+
);
|
|
29
|
+
|
|
30
|
+
CREATE INDEX IF NOT EXISTS idx_autonomy_runs_routine ON autonomy_runs (routine, created_at DESC);
|
|
31
|
+
|
|
32
|
+
INSERT INTO schema_migrations (version) VALUES ('126_autonomy_runs')
|
|
33
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
-- 143_cost_calibration.sql — cost calibration medians (cost-per-task / cost-per-credit).
|
|
2
|
+
--
|
|
3
|
+
-- The cost-side analogue of migration 015's pms_calibrated_minutes. Recommended
|
|
4
|
+
-- by the 2026-05-30 spend audit, finding F6: "migration 015's calibration is the
|
|
5
|
+
-- model the COST side should imitate: collect real samples, derive a ratio,
|
|
6
|
+
-- expose a calibrated figure. Extend the same pattern to cost-per-task and
|
|
7
|
+
-- cost-per-credit once real api spend lands." That spend has now landed (ADR 0028
|
|
8
|
+
-- session-cost capture → cost_log.category='api'), so this exposes the medians.
|
|
9
|
+
--
|
|
10
|
+
-- Unlike est calibration there is no per-row input to calibrate (a task has no
|
|
11
|
+
-- "cost estimate" to multiply by a ratio), so the deliverable is the SUMMARY
|
|
12
|
+
-- function only — mirroring pms_calibration_summary(), not pms_calibrated_minutes.
|
|
13
|
+
--
|
|
14
|
+
-- cost_calibration_summary() returns one row per task kind PLUS an overall '(all)'
|
|
15
|
+
-- row (GROUPING SETS), each carrying:
|
|
16
|
+
-- median_cost_per_task — median of SUM(amount_usd) per task, in USD.
|
|
17
|
+
-- median_cost_per_credit — median of (task cost / credits_reward), USD per credit;
|
|
18
|
+
-- NULL when a kind has no credit-bearing samples.
|
|
19
|
+
-- sample_size — number of tasks contributing (judge confidence by it,
|
|
20
|
+
-- the same way pms_calibrated_minutes gates on n).
|
|
21
|
+
--
|
|
22
|
+
-- Sample set mirrors migration 015 exactly: shipped+confirmed tasks only, smoke
|
|
23
|
+
-- rows excluded, and only tasks that actually incurred cost (HAVING cost > 0).
|
|
24
|
+
-- Idempotent: CREATE OR REPLACE.
|
|
25
|
+
|
|
26
|
+
CREATE OR REPLACE FUNCTION cost_calibration_summary()
|
|
27
|
+
RETURNS TABLE (
|
|
28
|
+
kind text,
|
|
29
|
+
median_cost_per_task numeric,
|
|
30
|
+
median_cost_per_credit numeric,
|
|
31
|
+
sample_size integer
|
|
32
|
+
)
|
|
33
|
+
LANGUAGE sql
|
|
34
|
+
STABLE
|
|
35
|
+
AS $$
|
|
36
|
+
WITH task_costs AS (
|
|
37
|
+
SELECT t.id,
|
|
38
|
+
t.kind,
|
|
39
|
+
t.credits_reward,
|
|
40
|
+
SUM(cl.amount_usd) AS task_cost
|
|
41
|
+
FROM cost_log cl
|
|
42
|
+
JOIN tasks t ON t.id = cl.task_id
|
|
43
|
+
WHERE t.status IN ('shipped', 'confirmed')
|
|
44
|
+
AND t.title NOT LIKE '\_\_smoke\_\_%' ESCAPE '\'
|
|
45
|
+
GROUP BY t.id, t.kind, t.credits_reward
|
|
46
|
+
HAVING SUM(cl.amount_usd) > 0
|
|
47
|
+
)
|
|
48
|
+
SELECT COALESCE(kind, '(all)') AS kind,
|
|
49
|
+
ROUND((percentile_cont(0.5) WITHIN GROUP (ORDER BY task_cost))::numeric, 4)
|
|
50
|
+
AS median_cost_per_task,
|
|
51
|
+
ROUND(
|
|
52
|
+
(percentile_cont(0.5) WITHIN GROUP (ORDER BY task_cost / credits_reward)
|
|
53
|
+
FILTER (WHERE credits_reward > 0))::numeric,
|
|
54
|
+
4
|
|
55
|
+
) AS median_cost_per_credit,
|
|
56
|
+
COUNT(*)::integer AS sample_size
|
|
57
|
+
FROM task_costs
|
|
58
|
+
GROUP BY GROUPING SETS ((kind), ())
|
|
59
|
+
ORDER BY (kind IS NULL) DESC, sample_size DESC, kind;
|
|
60
|
+
$$;
|
|
61
|
+
|
|
62
|
+
INSERT INTO schema_migrations (version) VALUES ('143_cost_calibration')
|
|
63
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
-- 145_backfill_task_requires_rank.sql — task 1498 / ADR 0084.
|
|
2
|
+
--
|
|
3
|
+
-- WHY: tasks.requires_rank (V3.R82, migration 044/068) shipped INERT — no
|
|
4
|
+
-- create/edit path ever set it, so every task sits at the 'xenos' default and
|
|
5
|
+
-- the claim-time rank gate (db.claimTask / claimTasksBatch) never bites. Going
|
|
6
|
+
-- forward db.deriveRequiredRank (reusing permission-path-check.matchProtected)
|
|
7
|
+
-- is the LIVE authority: it derives a floor on every create/PATCH. This one-time
|
|
8
|
+
-- pass brings EXISTING open tasks up to the same floor so the whole board is
|
|
9
|
+
-- correctly rank-scoped now, not just new work (Lars's directive, 2026-06-23).
|
|
10
|
+
--
|
|
11
|
+
-- RULE (mirrors deriveRequiredRank): a non-terminal task floors at 'metic' when
|
|
12
|
+
-- it is security_sensitive OR any touches[] entry hits the permission-sensitive
|
|
13
|
+
-- set. The conditions below are GENERATED from PROTECTED_GLOBS in
|
|
14
|
+
-- src/bongos/permission-path-check.js (the single source of truth) as of 2026-06-23
|
|
15
|
+
-- — every glob there is an exact file or a trailing-'/' directory prefix with no
|
|
16
|
+
-- '*'/'**' wildcard and no LIKE-special char, so prefix LIKE / exact '=' is an
|
|
17
|
+
-- exact translation (the generator asserts this). permission-path-check.js stays
|
|
18
|
+
-- authoritative: a future glob change does NOT rewrite this historical snapshot
|
|
19
|
+
-- (new/edited tasks re-derive through the JS helper). Regenerate with
|
|
20
|
+
-- the throwaway gen step if you ever need to re-snapshot.
|
|
21
|
+
--
|
|
22
|
+
-- SAFE + IDEMPOTENT: only raises the default ('xenos' -> 'metic'); never lowers
|
|
23
|
+
-- a floor and never touches a deliberate override. Re-running matches no rows.
|
|
24
|
+
|
|
25
|
+
UPDATE tasks
|
|
26
|
+
SET requires_rank = 'metic', updated_at = now()
|
|
27
|
+
WHERE status NOT IN ('shipped', 'abandoned')
|
|
28
|
+
AND requires_rank = 'xenos' -- only raise the default; leave overrides alone
|
|
29
|
+
AND (
|
|
30
|
+
security_sensitive = true
|
|
31
|
+
OR EXISTS (
|
|
32
|
+
SELECT 1 FROM unnest(touches) AS f
|
|
33
|
+
WHERE
|
|
34
|
+
f LIKE 'src/bongos/middleware/%'
|
|
35
|
+
OR f LIKE 'src/bongos/routes/%'
|
|
36
|
+
OR f LIKE 'src/bongos/grader-workers/%'
|
|
37
|
+
OR f LIKE 'scripts/gds/hooks/%'
|
|
38
|
+
OR f LIKE 'scripts/deploy/%'
|
|
39
|
+
OR f LIKE 'migrations/%'
|
|
40
|
+
OR f LIKE 'infra/%'
|
|
41
|
+
OR f LIKE '.github/%'
|
|
42
|
+
OR f LIKE '.husky/%'
|
|
43
|
+
OR f LIKE '.claude/hooks/%'
|
|
44
|
+
OR f = 'src/bongos/auth.js'
|
|
45
|
+
OR f = 'src/bongos/db.js'
|
|
46
|
+
OR f = 'src/bongos/route-rank-check.js'
|
|
47
|
+
OR f = 'src/bongos/permission-path-check.js'
|
|
48
|
+
OR f = 'src/bongos/routes.js'
|
|
49
|
+
OR f = 'server.js'
|
|
50
|
+
OR f = 'src/bongos/boxes.js'
|
|
51
|
+
OR f = 'src/bongos/box-access.js'
|
|
52
|
+
OR f = 'src/bongos/box-credential.js'
|
|
53
|
+
OR f = 'src/bongos/grader.js'
|
|
54
|
+
OR f = 'src/bongos/grader-rubric.json'
|
|
55
|
+
OR f = 'scripts/gds/ship.js'
|
|
56
|
+
OR f = 'scripts/gds/confirm.js'
|
|
57
|
+
OR f = 'scripts/gds/merge-mode.js'
|
|
58
|
+
OR f = 'scripts/gds/ci-grade.js'
|
|
59
|
+
OR f = 'scripts/gds/grade-smoke.js'
|
|
60
|
+
OR f = 'scripts/gds/conductor-dispatch.js'
|
|
61
|
+
OR f = 'scripts/gds/main-audit.js'
|
|
62
|
+
OR f = 'scripts/gds/push-main.js'
|
|
63
|
+
OR f = 'scripts/gds/run-unit-tests.js'
|
|
64
|
+
OR f = 'scripts/gds/gate-review.js'
|
|
65
|
+
OR f = 'scripts/gds/setup.js'
|
|
66
|
+
OR f = 'scripts/gds/install-git-hooks.js'
|
|
67
|
+
OR f = 'scripts/gds/cli-lib.js'
|
|
68
|
+
OR f = 'scripts/migrate.sh'
|
|
69
|
+
OR f = 'src/bongos/merge-lock.js'
|
|
70
|
+
OR f = 'src/bongos/ship-preflight.js'
|
|
71
|
+
OR f = 'CODEOWNERS'
|
|
72
|
+
OR f = 'config/deploy.json'
|
|
73
|
+
OR f = 'package.json'
|
|
74
|
+
OR f = 'package-lock.json'
|
|
75
|
+
OR f = 'docs/canonical-permissions.md'
|
|
76
|
+
OR f = 'docs/adr/0016-trust-boundary-server-enforced-permissions.md'
|
|
77
|
+
OR f = 'docs/adr/0043-git-ssh-trust-boundary-and-rank-floor-on-permission-paths.md'
|
|
78
|
+
OR f = 'CLAUDE.md'
|
|
79
|
+
OR f = '.claude/settings.json'
|
|
80
|
+
)
|
|
81
|
+
);
|
|
82
|
+
|
|
83
|
+
INSERT INTO schema_migrations (version) VALUES ('145_backfill_task_requires_rank')
|
|
84
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
-- 160_goal_tier.sql — the Goal tier (ADR 0086 §2, BV1.R56 / task 1510).
|
|
2
|
+
--
|
|
3
|
+
-- Phase 2 of the goal-scoped work hierarchy: the one genuinely-new tier, sitting
|
|
4
|
+
-- between `versions` and `done_when_criteria`. A goal is a SHARED, joinable,
|
|
5
|
+
-- module-scoped workspace — membership (not a single assignee) is what later
|
|
6
|
+
-- grants bounded task authoring within the goal's `scope_modules` wall (R57/R60).
|
|
7
|
+
--
|
|
8
|
+
-- This migration is PURELY ADDITIVE and changes no behaviour: it creates the two
|
|
9
|
+
-- new tables, adds a nullable `goal_id` to `done_when_criteria` and `tasks`, and
|
|
10
|
+
-- backfills every existing criterion under a per-version default "<version> —
|
|
11
|
+
-- general" goal so the not-yet-built `/status` rollup (R58) has a goal to roll up
|
|
12
|
+
-- through. No route references a goal yet, so OTB behaves identically.
|
|
13
|
+
--
|
|
14
|
+
-- created_by is NULLABLE and the backfilled default goals leave it NULL =
|
|
15
|
+
-- system-attributed (Archon-owned in practice); a migration must never hard-code
|
|
16
|
+
-- a specific builder id (fresh-DB replay safety — see learning 1238). The backfill
|
|
17
|
+
-- is data-safe on a fresh DB too: INSERT..SELECT FROM versions yields zero rows if
|
|
18
|
+
-- no versions are seeded yet, and the UPDATE then touches nothing.
|
|
19
|
+
--
|
|
20
|
+
-- Idempotent: tables/columns use IF NOT EXISTS; the default-goal insert is guarded
|
|
21
|
+
-- by NOT EXISTS on (version_id, title); the criterion link only fills NULLs.
|
|
22
|
+
|
|
23
|
+
BEGIN;
|
|
24
|
+
|
|
25
|
+
-- 1. goals — the new tier. scope_modules is the wall (module keys from
|
|
26
|
+
-- module-scope-map.js, R54); empty for the Archon-owned default goals.
|
|
27
|
+
CREATE TABLE IF NOT EXISTS goals (
|
|
28
|
+
id bigserial PRIMARY KEY,
|
|
29
|
+
version_id text NOT NULL REFERENCES versions(id),
|
|
30
|
+
title text NOT NULL,
|
|
31
|
+
description text,
|
|
32
|
+
scope_modules text[] NOT NULL DEFAULT '{}',
|
|
33
|
+
status text NOT NULL DEFAULT 'open' CHECK (status IN ('open', 'achieved', 'archived')),
|
|
34
|
+
created_by bigint REFERENCES builders(id), -- NULL = system-attributed
|
|
35
|
+
succeeded_by_goal_id bigint REFERENCES goals(id), -- rescope carry-forward
|
|
36
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
37
|
+
updated_at timestamptz NOT NULL DEFAULT now()
|
|
38
|
+
);
|
|
39
|
+
|
|
40
|
+
CREATE INDEX IF NOT EXISTS idx_goals_version ON goals (version_id);
|
|
41
|
+
|
|
42
|
+
-- 2. goal_members — many builders <-> one goal; membership grants the (later)
|
|
43
|
+
-- bounded authoring authority. lead|member roles; one row per (goal, builder).
|
|
44
|
+
CREATE TABLE IF NOT EXISTS goal_members (
|
|
45
|
+
goal_id bigint NOT NULL REFERENCES goals(id) ON DELETE CASCADE,
|
|
46
|
+
builder_id bigint NOT NULL REFERENCES builders(id) ON DELETE CASCADE,
|
|
47
|
+
role text NOT NULL DEFAULT 'member' CHECK (role IN ('lead', 'member')),
|
|
48
|
+
joined_at timestamptz NOT NULL DEFAULT now(),
|
|
49
|
+
PRIMARY KEY (goal_id, builder_id)
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
CREATE INDEX IF NOT EXISTS idx_goal_members_builder ON goal_members (builder_id);
|
|
53
|
+
|
|
54
|
+
-- 3. done_when_criteria re-parent under goals (nullable; backfilled below).
|
|
55
|
+
ALTER TABLE done_when_criteria
|
|
56
|
+
ADD COLUMN IF NOT EXISTS goal_id bigint REFERENCES goals(id);
|
|
57
|
+
|
|
58
|
+
-- 4. tasks gain goal_id (nullable — a task may exist with no goal, as today).
|
|
59
|
+
ALTER TABLE tasks
|
|
60
|
+
ADD COLUMN IF NOT EXISTS goal_id bigint REFERENCES goals(id);
|
|
61
|
+
|
|
62
|
+
-- 5. Backfill: one default "<version> — general" goal per version, then link
|
|
63
|
+
-- every still-unlinked criterion of that version to it. Idempotent.
|
|
64
|
+
INSERT INTO goals (version_id, title, description, status, scope_modules)
|
|
65
|
+
SELECT v.id,
|
|
66
|
+
v.id || ' — general',
|
|
67
|
+
'Default catch-all goal for ' || v.id || ', auto-created by migration 160 (ADR 0086 §2). '
|
|
68
|
+
|| 'Holds the criteria that predate the goal tier; Archon-owned, members empty.',
|
|
69
|
+
'open',
|
|
70
|
+
'{}'
|
|
71
|
+
FROM versions v
|
|
72
|
+
WHERE NOT EXISTS (
|
|
73
|
+
SELECT 1 FROM goals g
|
|
74
|
+
WHERE g.version_id = v.id
|
|
75
|
+
AND g.title = v.id || ' — general'
|
|
76
|
+
);
|
|
77
|
+
|
|
78
|
+
UPDATE done_when_criteria c
|
|
79
|
+
SET goal_id = g.id
|
|
80
|
+
FROM goals g
|
|
81
|
+
WHERE g.version_id = c.version_id
|
|
82
|
+
AND g.title = c.version_id || ' — general'
|
|
83
|
+
AND c.goal_id IS NULL;
|
|
84
|
+
|
|
85
|
+
INSERT INTO schema_migrations (version) VALUES ('160_goal_tier')
|
|
86
|
+
ON CONFLICT (version) DO NOTHING;
|
|
87
|
+
|
|
88
|
+
COMMIT;
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
-- 163_polymorphic_dependencies.sql — ADR 0086 §5 / Phase 4 / BV1.R62 / task 1516.
|
|
2
|
+
--
|
|
3
|
+
-- One polymorphic "blocked-until-done" edge over {task, goal, criterion}, taking
|
|
4
|
+
-- over from the task-only task_dependencies table (020) as the canonical edge for
|
|
5
|
+
-- the claim gate + auto-promotion. Read it as "FROM is blocked until TO is done":
|
|
6
|
+
-- TO is "done" <=> task status='shipped' | criterion satisfied | goal status='achieved'.
|
|
7
|
+
--
|
|
8
|
+
-- ADR 0086 §5 prose says "tasks.dependencies[] migrates in" — there is NO such
|
|
9
|
+
-- column; the real task->task edges live in the task_dependencies join table (020),
|
|
10
|
+
-- and we migrate THOSE in here. task_dependencies is RETAINED, not dropped:
|
|
11
|
+
-- migration 021 still seeds it on a fresh DB, and `dependencies` is a superset, so
|
|
12
|
+
-- the move is reversible (stop reading the new table → fall back to the old one).
|
|
13
|
+
--
|
|
14
|
+
-- Inheritance: a task is gated by edges FROM itself, FROM its goal (tasks.goal_id),
|
|
15
|
+
-- and FROM every criterion it fulfils (task_criteria). One enforcement point — the
|
|
16
|
+
-- claim gate (db.js unsatisfiedDeps) — resolves all three. The promotion trigger
|
|
17
|
+
-- fires on each "done" event (task ship / criterion satisfy / goal achieve) and
|
|
18
|
+
-- promotes any backlog (non-spike) task whose FULL resolved dep set is now done.
|
|
19
|
+
|
|
20
|
+
BEGIN;
|
|
21
|
+
|
|
22
|
+
-- ============================================================================
|
|
23
|
+
-- 1. dependencies — the polymorphic edge
|
|
24
|
+
-- ============================================================================
|
|
25
|
+
-- No FK is possible (the target table varies by *_kind), so the CHECK constrains
|
|
26
|
+
-- the kinds and `kind` disambiguates ids across tasks/goals/criteria (all bigint).
|
|
27
|
+
-- The criterion referent is done_when_criteria.id — the numeric id that
|
|
28
|
+
-- task_criteria.criterion_id also holds — NEVER the criterion_id text slug.
|
|
29
|
+
CREATE TABLE IF NOT EXISTS dependencies (
|
|
30
|
+
from_kind text NOT NULL CHECK (from_kind IN ('task', 'goal', 'criterion')),
|
|
31
|
+
from_id bigint NOT NULL,
|
|
32
|
+
to_kind text NOT NULL CHECK (to_kind IN ('task', 'goal', 'criterion')),
|
|
33
|
+
to_id bigint NOT NULL,
|
|
34
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
35
|
+
PRIMARY KEY (from_kind, from_id, to_kind, to_id),
|
|
36
|
+
CONSTRAINT no_self_dep CHECK (NOT (from_kind = to_kind AND from_id = to_id))
|
|
37
|
+
);
|
|
38
|
+
|
|
39
|
+
-- "What does X depend on?" (forward, gate read) + "what depends on Y?" (reverse,
|
|
40
|
+
-- promotion read).
|
|
41
|
+
CREATE INDEX IF NOT EXISTS idx_dependencies_from ON dependencies (from_kind, from_id);
|
|
42
|
+
CREATE INDEX IF NOT EXISTS idx_dependencies_to ON dependencies (to_kind, to_id);
|
|
43
|
+
|
|
44
|
+
-- ============================================================================
|
|
45
|
+
-- 2. Migrate the existing task->task edges in (additive superset of 020)
|
|
46
|
+
-- ============================================================================
|
|
47
|
+
-- A SELECT-backfill (not literal VALUES): empty on a fresh DB where
|
|
48
|
+
-- task_dependencies is empty, and re-runnable (ON CONFLICT DO NOTHING).
|
|
49
|
+
INSERT INTO dependencies (from_kind, from_id, to_kind, to_id, created_at)
|
|
50
|
+
SELECT 'task', td.task_id, 'task', td.depends_on_task_id, td.created_at
|
|
51
|
+
FROM task_dependencies td
|
|
52
|
+
ON CONFLICT DO NOTHING;
|
|
53
|
+
|
|
54
|
+
-- ============================================================================
|
|
55
|
+
-- 3. Resolution predicate + generalized auto-promotion
|
|
56
|
+
-- ============================================================================
|
|
57
|
+
-- task_is_fully_unblocked(T): TRUE iff NONE of T's gating edges points at an
|
|
58
|
+
-- un-done node. Gating edges = FROM the task itself, FROM its goal, or FROM any
|
|
59
|
+
-- criterion it fulfils. Shared by all three promotion triggers below, and it
|
|
60
|
+
-- mirrors the claim gate's unsatisfiedDeps in db.js (same three-source union, same
|
|
61
|
+
-- done-ness test) so promotion and the gate can never disagree. An orphaned `to`
|
|
62
|
+
-- (no FK; row deleted) yields no EXISTS match → counts as un-done → task stays
|
|
63
|
+
-- blocked (fail-closed).
|
|
64
|
+
CREATE OR REPLACE FUNCTION task_is_fully_unblocked(p_task_id bigint)
|
|
65
|
+
RETURNS boolean AS $$
|
|
66
|
+
SELECT NOT EXISTS (
|
|
67
|
+
WITH gating AS (
|
|
68
|
+
SELECT d.to_kind, d.to_id
|
|
69
|
+
FROM dependencies d
|
|
70
|
+
JOIN tasks t ON t.id = p_task_id
|
|
71
|
+
WHERE (d.from_kind = 'task' AND d.from_id = t.id)
|
|
72
|
+
OR (d.from_kind = 'goal' AND d.from_id = t.goal_id)
|
|
73
|
+
OR (d.from_kind = 'criterion' AND d.from_id IN (
|
|
74
|
+
SELECT tc.criterion_id FROM task_criteria tc WHERE tc.task_id = t.id))
|
|
75
|
+
)
|
|
76
|
+
SELECT 1
|
|
77
|
+
FROM gating g
|
|
78
|
+
WHERE NOT (
|
|
79
|
+
(g.to_kind = 'task' AND EXISTS (SELECT 1 FROM tasks x WHERE x.id = g.to_id AND x.status = 'shipped'))
|
|
80
|
+
OR (g.to_kind = 'criterion' AND EXISTS (SELECT 1 FROM done_when_criteria x WHERE x.id = g.to_id AND x.satisfied))
|
|
81
|
+
OR (g.to_kind = 'goal' AND EXISTS (SELECT 1 FROM goals x WHERE x.id = g.to_id AND x.status = 'achieved'))
|
|
82
|
+
)
|
|
83
|
+
);
|
|
84
|
+
$$ LANGUAGE sql STABLE;
|
|
85
|
+
|
|
86
|
+
-- Each trigger fn scopes candidates to backlog (non-spike) tasks actually gated by
|
|
87
|
+
-- the node that just became done (direct, or inherited via goal/criterion), then
|
|
88
|
+
-- re-checks the FULL dep set with task_is_fully_unblocked. Promotion only flips
|
|
89
|
+
-- backlog -> ready (never to a "done" state), so the AFTER triggers cannot recurse.
|
|
90
|
+
|
|
91
|
+
-- (a) a task shipped
|
|
92
|
+
CREATE OR REPLACE FUNCTION promote_dependents_on_ship()
|
|
93
|
+
RETURNS TRIGGER AS $$
|
|
94
|
+
BEGIN
|
|
95
|
+
IF NEW.status = 'shipped' AND (OLD.status IS DISTINCT FROM 'shipped') THEN
|
|
96
|
+
UPDATE tasks t
|
|
97
|
+
SET status = 'ready', promoted_at = COALESCE(t.promoted_at, now()), updated_at = now()
|
|
98
|
+
WHERE t.status = 'backlog'
|
|
99
|
+
AND t.kind <> 'spike'
|
|
100
|
+
AND EXISTS (
|
|
101
|
+
SELECT 1 FROM dependencies d
|
|
102
|
+
WHERE d.to_kind = 'task' AND d.to_id = NEW.id
|
|
103
|
+
AND ( (d.from_kind = 'task' AND d.from_id = t.id)
|
|
104
|
+
OR (d.from_kind = 'goal' AND d.from_id = t.goal_id)
|
|
105
|
+
OR (d.from_kind = 'criterion' AND d.from_id IN (
|
|
106
|
+
SELECT tc.criterion_id FROM task_criteria tc WHERE tc.task_id = t.id)) )
|
|
107
|
+
)
|
|
108
|
+
AND task_is_fully_unblocked(t.id);
|
|
109
|
+
END IF;
|
|
110
|
+
RETURN NEW;
|
|
111
|
+
END;
|
|
112
|
+
$$ LANGUAGE plpgsql;
|
|
113
|
+
|
|
114
|
+
-- (b) a criterion satisfied
|
|
115
|
+
CREATE OR REPLACE FUNCTION promote_dependents_on_criterion_satisfy()
|
|
116
|
+
RETURNS TRIGGER AS $$
|
|
117
|
+
BEGIN
|
|
118
|
+
IF NEW.satisfied = true AND (OLD.satisfied IS DISTINCT FROM true) THEN
|
|
119
|
+
UPDATE tasks t
|
|
120
|
+
SET status = 'ready', promoted_at = COALESCE(t.promoted_at, now()), updated_at = now()
|
|
121
|
+
WHERE t.status = 'backlog'
|
|
122
|
+
AND t.kind <> 'spike'
|
|
123
|
+
AND EXISTS (
|
|
124
|
+
SELECT 1 FROM dependencies d
|
|
125
|
+
WHERE d.to_kind = 'criterion' AND d.to_id = NEW.id
|
|
126
|
+
AND ( (d.from_kind = 'task' AND d.from_id = t.id)
|
|
127
|
+
OR (d.from_kind = 'goal' AND d.from_id = t.goal_id)
|
|
128
|
+
OR (d.from_kind = 'criterion' AND d.from_id IN (
|
|
129
|
+
SELECT tc.criterion_id FROM task_criteria tc WHERE tc.task_id = t.id)) )
|
|
130
|
+
)
|
|
131
|
+
AND task_is_fully_unblocked(t.id);
|
|
132
|
+
END IF;
|
|
133
|
+
RETURN NEW;
|
|
134
|
+
END;
|
|
135
|
+
$$ LANGUAGE plpgsql;
|
|
136
|
+
|
|
137
|
+
-- (c) a goal achieved
|
|
138
|
+
CREATE OR REPLACE FUNCTION promote_dependents_on_goal_achieve()
|
|
139
|
+
RETURNS TRIGGER AS $$
|
|
140
|
+
BEGIN
|
|
141
|
+
IF NEW.status = 'achieved' AND (OLD.status IS DISTINCT FROM 'achieved') THEN
|
|
142
|
+
UPDATE tasks t
|
|
143
|
+
SET status = 'ready', promoted_at = COALESCE(t.promoted_at, now()), updated_at = now()
|
|
144
|
+
WHERE t.status = 'backlog'
|
|
145
|
+
AND t.kind <> 'spike'
|
|
146
|
+
AND EXISTS (
|
|
147
|
+
SELECT 1 FROM dependencies d
|
|
148
|
+
WHERE d.to_kind = 'goal' AND d.to_id = NEW.id
|
|
149
|
+
AND ( (d.from_kind = 'task' AND d.from_id = t.id)
|
|
150
|
+
OR (d.from_kind = 'goal' AND d.from_id = t.goal_id)
|
|
151
|
+
OR (d.from_kind = 'criterion' AND d.from_id IN (
|
|
152
|
+
SELECT tc.criterion_id FROM task_criteria tc WHERE tc.task_id = t.id)) )
|
|
153
|
+
)
|
|
154
|
+
AND task_is_fully_unblocked(t.id);
|
|
155
|
+
END IF;
|
|
156
|
+
RETURN NEW;
|
|
157
|
+
END;
|
|
158
|
+
$$ LANGUAGE plpgsql;
|
|
159
|
+
|
|
160
|
+
-- Replace 020's single task-only trigger; add the criterion + goal triggers.
|
|
161
|
+
DROP TRIGGER IF EXISTS trg_promote_dependents_on_ship ON tasks;
|
|
162
|
+
CREATE TRIGGER trg_promote_dependents_on_ship
|
|
163
|
+
AFTER UPDATE OF status ON tasks
|
|
164
|
+
FOR EACH ROW
|
|
165
|
+
EXECUTE FUNCTION promote_dependents_on_ship();
|
|
166
|
+
|
|
167
|
+
DROP TRIGGER IF EXISTS trg_promote_dependents_on_crit_satisfy ON done_when_criteria;
|
|
168
|
+
CREATE TRIGGER trg_promote_dependents_on_crit_satisfy
|
|
169
|
+
AFTER UPDATE OF satisfied ON done_when_criteria
|
|
170
|
+
FOR EACH ROW
|
|
171
|
+
EXECUTE FUNCTION promote_dependents_on_criterion_satisfy();
|
|
172
|
+
|
|
173
|
+
DROP TRIGGER IF EXISTS trg_promote_dependents_on_goal_achieve ON goals;
|
|
174
|
+
CREATE TRIGGER trg_promote_dependents_on_goal_achieve
|
|
175
|
+
AFTER UPDATE OF status ON goals
|
|
176
|
+
FOR EACH ROW
|
|
177
|
+
EXECUTE FUNCTION promote_dependents_on_goal_achieve();
|
|
178
|
+
|
|
179
|
+
-- ============================================================================
|
|
180
|
+
-- 4. Bump migration counter + record
|
|
181
|
+
-- ============================================================================
|
|
182
|
+
UPDATE migration_counter SET next_number = GREATEST(next_number, 164) WHERE id = 1;
|
|
183
|
+
|
|
184
|
+
INSERT INTO schema_migrations (version) VALUES ('163_polymorphic_dependencies')
|
|
185
|
+
ON CONFLICT (version) DO NOTHING;
|
|
186
|
+
|
|
187
|
+
COMMIT;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
-- 164_event_sound_prefs.sql — per-builder per-event sound variant selection (task 582).
|
|
2
|
+
--
|
|
3
|
+
-- Extends the mute-toggle system (migration 075, sound_prefs) to also support
|
|
4
|
+
-- variant picking: for each of 5 build events a builder can choose WHICH
|
|
5
|
+
-- world-themed sound variant plays (e.g. 'lyre-pluck' vs 'chime-soft' for the
|
|
6
|
+
-- user-input event). Schema: { "user-input": "lyre-pluck", ... } where values
|
|
7
|
+
-- are variant IDs defined in src/bongos/event-sound-prefs.js.
|
|
8
|
+
--
|
|
9
|
+
-- NULL/missing key = system default for that event. The two columns compose:
|
|
10
|
+
-- the mute-toggle in sound_prefs still wins over the variant — if a builder
|
|
11
|
+
-- mutes 'alert' and their user-input event resolves to a variant backed by
|
|
12
|
+
-- alert.wav, it will be silent.
|
|
13
|
+
--
|
|
14
|
+
-- Idempotent: safe to re-run.
|
|
15
|
+
|
|
16
|
+
ALTER TABLE builders
|
|
17
|
+
ADD COLUMN IF NOT EXISTS event_sound_prefs jsonb NOT NULL DEFAULT '{}'::jsonb;
|
|
18
|
+
|
|
19
|
+
INSERT INTO schema_migrations (version) VALUES ('164_event_sound_prefs')
|
|
20
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
-- BV1.R53 — task→module affinity (task 1422).
|
|
2
|
+
--
|
|
3
|
+
-- A task can be labelled with a module key to declare which module it belongs to.
|
|
4
|
+
-- This drives: (1) module-disjointness parallel-safety at claim time (two tasks
|
|
5
|
+
-- in the SAME module → conflict; different modules → always safe); (2) claim-time
|
|
6
|
+
-- context scoped to that module's directory tree; (3) ship-time diff⊆module
|
|
7
|
+
-- drift detection ("you said game, you touched dev-box"); (4) soft deprecation of
|
|
8
|
+
-- touches[] for module-bound tasks (module globs supersede predicted file paths).
|
|
9
|
+
--
|
|
10
|
+
-- No FK or CHECK against a modules registry — module keys are validated in
|
|
11
|
+
-- application code against MODULE_SCOPE_MAP, which is the live source of truth.
|
|
12
|
+
-- The column is nullable: tasks without a module_key fall back to the existing
|
|
13
|
+
-- touches[]-based parallel-safety and context behaviour.
|
|
14
|
+
|
|
15
|
+
ALTER TABLE tasks ADD COLUMN IF NOT EXISTS module_key text;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
-- Task 1547 — record the tip sha the SERVER actually pushed for a claim's
|
|
2
|
+
-- server-mediated publish (ADR 0055), so the confirmed->shipped reconcile can
|
|
3
|
+
-- prove the land from THIS task's own commit instead of from a branch-name match.
|
|
4
|
+
--
|
|
5
|
+
-- WHY. claims.head_sha is the claim-TIME base (the worktree HEAD when the task was
|
|
6
|
+
-- claimed), NOT the graded/published tip. ship.js sends the real tip to
|
|
7
|
+
-- POST /tasks/:id/publish-branch, but it was discarded after the push. The
|
|
8
|
+
-- reconcile-on-read (routes/tasks.js) and the publish-reconciler therefore had no
|
|
9
|
+
-- reliable per-task commit to verify against, so a reused worktree branch could
|
|
10
|
+
-- match an OLDER task's already-merged PR and false-flip confirmed->shipped (the
|
|
11
|
+
-- BV1.R04/R05 strand: branch claude/jovial-rosalind-84d6c3 had earlier been
|
|
12
|
+
-- PR #386 / task 1297). This column holds the pushed tip; the reconcile gates on
|
|
13
|
+
-- isAncestorOfDefaultBranch(published_head_sha) before shipping. Additive + nullable
|
|
14
|
+
-- so legacy rows (no recorded publish) are simply un-provable via the tip path and
|
|
15
|
+
-- fall back to the PR-references-this-task check.
|
|
16
|
+
|
|
17
|
+
BEGIN;
|
|
18
|
+
|
|
19
|
+
ALTER TABLE claims ADD COLUMN IF NOT EXISTS published_head_sha TEXT;
|
|
20
|
+
|
|
21
|
+
COMMENT ON COLUMN claims.published_head_sha IS
|
|
22
|
+
'Tip sha the server pushed for this claim via POST /tasks/:id/publish-branch (ADR 0055). NULL until a server-mediated publish succeeds. The confirmed->shipped reconcile proves a per-task land from this commit (task 1547).';
|
|
23
|
+
|
|
24
|
+
COMMIT;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
-- 174_close_orphaned_claims_on_terminal_tasks.sql
|
|
2
|
+
-- task 1643 — one-shot backfill that pairs with the shipTask claim-close safety
|
|
3
|
+
-- net (src/bongos/db.js).
|
|
4
|
+
--
|
|
5
|
+
-- THE STRAND CLASS. A claim is normally closed by db.resolveClaim
|
|
6
|
+
-- (claimed→completed: UPDATE claims SET released_at=now()). The confirm paths
|
|
7
|
+
-- (confirmTask / override-confirm / grader-confirm) and shipTask
|
|
8
|
+
-- (confirmed→shipped) flip task status + award credits but never touch the
|
|
9
|
+
-- claim. So a task that reaches a terminal state WITHOUT going through
|
|
10
|
+
-- resolveClaim on that claim (strand recovery, direct-SQL fixups) leaves the
|
|
11
|
+
-- claim dangling released_at=NULL forever, and every claim-aware view (builder
|
|
12
|
+
-- dashboard, parallel-safety) keeps showing the shipped/confirmed task as
|
|
13
|
+
-- actively claimed. The stale-claim sweeper can't repair it — its release resets
|
|
14
|
+
-- the task to 'ready', which would un-ship a shipped task.
|
|
15
|
+
--
|
|
16
|
+
-- Live repro: task 1300 (BV1.R05) is correctly shipped (PR #410, on main) but
|
|
17
|
+
-- claim #1292 (builder 95) is still open. This closes #1292 and any siblings.
|
|
18
|
+
--
|
|
19
|
+
-- Going forward, shipTask closes open claims in the ship txn, so new ships can't
|
|
20
|
+
-- strand. This statement mops up the EXISTING backlog on terminal tasks.
|
|
21
|
+
-- Idempotent: a second run matches no rows (every such claim is already closed).
|
|
22
|
+
-- COALESCE preserves any outcome already recorded; an open claim has
|
|
23
|
+
-- outcome=NULL, so it lands 'shipped' (a valid claims.outcome CHECK value).
|
|
24
|
+
UPDATE claims c
|
|
25
|
+
SET released_at = now(),
|
|
26
|
+
outcome = COALESCE(c.outcome, 'shipped')
|
|
27
|
+
FROM tasks t
|
|
28
|
+
WHERE c.task_id = t.id
|
|
29
|
+
AND c.released_at IS NULL
|
|
30
|
+
AND t.status IN ('shipped', 'confirmed');
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
-- 175_task_grades_diff_hash.sql — store a diff fingerprint alongside each grade (V4.R08).
|
|
2
|
+
--
|
|
3
|
+
-- Adds diff_hash TEXT to task_grades so ship.js can detect "same diff as the
|
|
4
|
+
-- last PASS" and skip re-running the adversarial panel. NULL for rows written
|
|
5
|
+
-- before this migration (pre-R08 grades).
|
|
6
|
+
--
|
|
7
|
+
-- Idempotent: safe to re-run.
|
|
8
|
+
|
|
9
|
+
ALTER TABLE task_grades ADD COLUMN IF NOT EXISTS diff_hash TEXT;
|