@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,38 @@
|
|
|
1
|
+
-- migration 090: box-scoped dev-box sessions (task 919, security_reports SR#2 + SR#11)
|
|
2
|
+
--
|
|
3
|
+
-- The dev-box provisioner (scripts/gds/box.js) bakes a GDS session into cloud-init
|
|
4
|
+
-- so box-source-fetch can clone the rank-scoped repo on first boot (#818). Until
|
|
5
|
+
-- now that baked token was source='cli' — a FULL-authority builder session (it can
|
|
6
|
+
-- claim/grade/ship/hit every requireBuilder route). source was purely informational;
|
|
7
|
+
-- no scope gate existed. SR#2 (HIGH): any on-box process or the metadata endpoint
|
|
8
|
+
-- could read it and act as the full builder, breaking the ADR 0016 trust boundary
|
|
9
|
+
-- (the box is OUTSIDE it).
|
|
10
|
+
--
|
|
11
|
+
-- Fix: a third session source, 'box'. auth.requireBuilder denies a 'box' session on
|
|
12
|
+
-- every route EXCEPT the handful the on-box crons need (allow-listed via
|
|
13
|
+
-- auth.allowBoxScope), so a leaked box credential can do nothing but bootstrap.
|
|
14
|
+
--
|
|
15
|
+
-- 1) Widen the source CHECK to admit 'box'. The constraint was created inline in
|
|
16
|
+
-- migration 003 (builder_sessions.source CHECK (source IN ('cli','web'))), so
|
|
17
|
+
-- Postgres auto-named it builder_sessions_source_check. Drop-if-exists keeps this
|
|
18
|
+
-- idempotent across environments where the name might differ.
|
|
19
|
+
ALTER TABLE builder_sessions
|
|
20
|
+
DROP CONSTRAINT IF EXISTS builder_sessions_source_check;
|
|
21
|
+
ALTER TABLE builder_sessions
|
|
22
|
+
ADD CONSTRAINT builder_sessions_source_check CHECK (source IN ('cli', 'web', 'box'));
|
|
23
|
+
|
|
24
|
+
-- 2) Retroactively scope sessions already baked onto LIVE boxes. box.js stamps the
|
|
25
|
+
-- baked session with user_agent='box-provision' (and only that path does), so
|
|
26
|
+
-- this targets exactly those tokens and downgrades them to box scope in place.
|
|
27
|
+
-- Safe: a running box only ever calls the 4 allow-listed bootstrap endpoints, and
|
|
28
|
+
-- a builder who re-authed ON the box (interactive /builder-reauth) holds a
|
|
29
|
+
-- SEPARATE cli/web session with a different user_agent, untouched here.
|
|
30
|
+
UPDATE builder_sessions
|
|
31
|
+
SET source = 'box'
|
|
32
|
+
WHERE source = 'cli'
|
|
33
|
+
AND user_agent = 'box-provision'
|
|
34
|
+
AND revoked_at IS NULL;
|
|
35
|
+
|
|
36
|
+
-- Counter hygiene: keep the migration-number allocator above this file so the next
|
|
37
|
+
-- reservation can't collide with 090 (per the planning-session learning).
|
|
38
|
+
UPDATE migration_counter SET next_number = GREATEST(next_number, 91) WHERE id = 1;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
-- 091_session_token_reward.sql
|
|
2
|
+
-- Task 1005 — flat cost-plus SESSION TOKEN REWARD (ADR 0054).
|
|
3
|
+
--
|
|
4
|
+
-- A builder now earns drachmae for a SHIPPED session proportional to its true
|
|
5
|
+
-- API token cost: drachmae = round(true_cost_usd * (1 + REWARD_MARGIN_PCT/100) * 100),
|
|
6
|
+
-- i.e. cost-plus-20%, denominated in integer cents. Computed SERVER-SIDE from
|
|
7
|
+
-- uploaded per-model token counts (never a client dollar figure). Idempotent
|
|
8
|
+
-- per session_id, append-only, reversible.
|
|
9
|
+
--
|
|
10
|
+
-- Three additive, nullable/defaulted changes — no backfill of historical rows,
|
|
11
|
+
-- no destructive edits. Forward-looking only.
|
|
12
|
+
|
|
13
|
+
-- (a) Per-model token usage rides as jsonb on the session record. ship.js
|
|
14
|
+
-- accumulates it from the same transcript usage it already parses; promoting
|
|
15
|
+
-- it to a first-class column (vs burying it in the free-form metrics blob)
|
|
16
|
+
-- makes the reward auditable + re-computable without parsing a blob. Shape:
|
|
17
|
+
-- { "<model-id>": { input, output, cache_read, cache_creation } }
|
|
18
|
+
ALTER TABLE session_records
|
|
19
|
+
ADD COLUMN IF NOT EXISTS model_usage jsonb NOT NULL DEFAULT '{}'::jsonb;
|
|
20
|
+
|
|
21
|
+
-- (b) The token-reward drachmae actually granted for this session, mirrored here
|
|
22
|
+
-- for audit/reversibility. Authoritative payout is still the credit_log row;
|
|
23
|
+
-- this is an observability mirror (like drachmae_earned mirrors task credits).
|
|
24
|
+
ALTER TABLE session_records
|
|
25
|
+
ADD COLUMN IF NOT EXISTS token_reward_drachmae integer NOT NULL DEFAULT 0;
|
|
26
|
+
|
|
27
|
+
-- (c) credit_log idempotency for the session token reward. credit_log has no
|
|
28
|
+
-- unique constraint anywhere today. We add a nullable session_id column + a
|
|
29
|
+
-- PARTIAL unique index scoped to the new reason. Existing rows keep
|
|
30
|
+
-- session_id = NULL and are unaffected (the partial index only covers rows
|
|
31
|
+
-- whose reason = 'session.token_reward'). This is the hard DB-level backstop
|
|
32
|
+
-- against a double payout when two ship uploads of the same session race.
|
|
33
|
+
ALTER TABLE credit_log
|
|
34
|
+
ADD COLUMN IF NOT EXISTS session_id text;
|
|
35
|
+
|
|
36
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uniq_credit_session_token_reward
|
|
37
|
+
ON credit_log (session_id)
|
|
38
|
+
WHERE reason = 'session.token_reward';
|
|
39
|
+
|
|
40
|
+
-- Counter hygiene: this migration was hand-authored (not handed out by the
|
|
41
|
+
-- claim-time allocator), so advance the allocator floor past 090 with GREATEST
|
|
42
|
+
-- (never a bare assignment) so a parallel claim can't reuse this number and a
|
|
43
|
+
-- concurrently-advanced counter is never rewound. (See 081 tail for the rule.)
|
|
44
|
+
UPDATE migration_counter SET next_number = GREATEST(next_number, 92) WHERE id = 1;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
-- migrations/093_tasks_sandbox_review.sql
|
|
2
|
+
-- Task #1048 (GDS-V4) — record the builder's sandbox self-approval as a durable
|
|
3
|
+
-- fact on the task. ADR 0046 follow-up.
|
|
4
|
+
--
|
|
5
|
+
-- The sandbox-first review gate (#927, ADR 0046) previously recorded the
|
|
6
|
+
-- "reviewed on the sandbox and approved" decision ONLY in an ephemeral temp-dir
|
|
7
|
+
-- marker (otb-sandbox-staged.json) that vanished after the ship — nothing
|
|
8
|
+
-- durable said this exact game build was reviewed and signed off. Lars's
|
|
9
|
+
-- 2026-06-13 directive: that approval must be recorded. We persist it as a small
|
|
10
|
+
-- JSONB blob on the task, written by db.resolveClaim from the value ship.js
|
|
11
|
+
-- threads through POST /claims/:id/resolve.
|
|
12
|
+
--
|
|
13
|
+
-- Shape (server stamps `by`/`at` authoritatively; the rest is client-supplied):
|
|
14
|
+
-- { "by": "<github_login>", "at": "<iso8601>", "stamp": "<sha256>",
|
|
15
|
+
-- "url": "https://sandbox-<login>.amazonprimea.com", "method": "tty"|"flag" }
|
|
16
|
+
-- NULL = no sandbox review recorded for this task (laptop ship, non-game diff,
|
|
17
|
+
-- quick-tunnel box, --skip-stage, or a fresh-marker re-run without --approved).
|
|
18
|
+
--
|
|
19
|
+
-- Idempotent + re-runnable.
|
|
20
|
+
|
|
21
|
+
ALTER TABLE tasks
|
|
22
|
+
ADD COLUMN IF NOT EXISTS sandbox_review jsonb;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
-- 102_remove_box_first_provision_approval.sql — ADR 0059 (task 1141): REMOVE the
|
|
2
|
+
-- dev-box "first-box Archon approval" gate. Reverts migration 071.
|
|
3
|
+
--
|
|
4
|
+
-- Context
|
|
5
|
+
-- -------
|
|
6
|
+
-- Migration 071 (#717, ADR 0035 Decision 2) added a 'pending_approval' state to
|
|
7
|
+
-- box_intents so a newcomer's FIRST paid droplet was held until an Archon ran
|
|
8
|
+
-- POST /box/intents/:id/approve. That double-gated admission: a builder already
|
|
9
|
+
-- had to be admitted to the project (the invite/member-join gate) before they
|
|
10
|
+
-- could ever reach /box/ensure, and then their first box was gated AGAIN.
|
|
11
|
+
--
|
|
12
|
+
-- ADR 0059 / task 1141 collapses this to a single approval — the member-join
|
|
13
|
+
-- (invite) admission gate — and lets an admitted builder's first box auto-drain
|
|
14
|
+
-- like every subsequent provision and every wake. The web tier still only RECORDS
|
|
15
|
+
-- A REQUEST and never holds DO_API_TOKEN (the migration-070 invariant is
|
|
16
|
+
-- unchanged); the box lifecycle stays operator/control-plane only. This migration
|
|
17
|
+
-- only removes the SECOND, redundant gate on box provisioning. The member-join /
|
|
18
|
+
-- access-request admission flow is untouched.
|
|
19
|
+
--
|
|
20
|
+
-- This file reverts migration 071 back to the migration-070 schema: it drains any
|
|
21
|
+
-- held first-box requests, removes 'pending_approval' from the state CHECK, restores
|
|
22
|
+
-- the migration-070 partial unique index, and drops the approval audit columns.
|
|
23
|
+
--
|
|
24
|
+
-- Do NOT edit migration 071 itself — it already ran on prod; this forward migration
|
|
25
|
+
-- undoes its effects.
|
|
26
|
+
--
|
|
27
|
+
-- Idempotent: safe to re-run.
|
|
28
|
+
|
|
29
|
+
-- Step 1 — drain held requests FIRST, before the tightened CHECK is re-added, so no
|
|
30
|
+
-- live row violates the constraint. A 'pending_approval' row was a first-box request
|
|
31
|
+
-- waiting on an Archon; with the gate gone, it simply becomes a normal 'pending'
|
|
32
|
+
-- request the control-plane runner will auto-drain.
|
|
33
|
+
UPDATE box_intents
|
|
34
|
+
SET state = 'pending', updated_at = now()
|
|
35
|
+
WHERE state = 'pending_approval';
|
|
36
|
+
|
|
37
|
+
-- Step 2 — restore the migration-070 state CHECK (drop 'pending_approval'). Postgres
|
|
38
|
+
-- has no ALTER ... DROP VALUE for a CHECK, so drop + re-add. Same constraint name
|
|
39
|
+
-- migration 071 used.
|
|
40
|
+
ALTER TABLE box_intents DROP CONSTRAINT IF EXISTS box_intents_state_check;
|
|
41
|
+
ALTER TABLE box_intents ADD CONSTRAINT box_intents_state_check
|
|
42
|
+
CHECK (state IN ('pending', 'running', 'done', 'error'));
|
|
43
|
+
|
|
44
|
+
-- Step 3 — restore the migration-070 partial unique index (one open intent per
|
|
45
|
+
-- builder), dropping 'pending_approval' from the open set. After step 1 no held rows
|
|
46
|
+
-- remain, so the open set is again {pending, running}.
|
|
47
|
+
DROP INDEX IF EXISTS ux_box_intents_open;
|
|
48
|
+
CREATE UNIQUE INDEX IF NOT EXISTS ux_box_intents_open
|
|
49
|
+
ON box_intents (builder_id)
|
|
50
|
+
WHERE state IN ('pending', 'running');
|
|
51
|
+
|
|
52
|
+
-- Step 4 — drop the approval audit columns migration 071 added. With the gate gone
|
|
53
|
+
-- there is nothing to attribute.
|
|
54
|
+
ALTER TABLE box_intents DROP COLUMN IF EXISTS approved_by;
|
|
55
|
+
ALTER TABLE box_intents DROP COLUMN IF EXISTS approved_at;
|
|
56
|
+
|
|
57
|
+
INSERT INTO schema_migrations (version) VALUES ('102_remove_box_first_provision_approval')
|
|
58
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
-- migration 103: search_chunks — the lexical retrieval substrate (task 944, V4.R06)
|
|
2
|
+
--
|
|
3
|
+
-- Implements ADR 0060 §2 (GDS retrieval layer: Postgres-resident, lexical-first,
|
|
4
|
+
-- rank-scoped, fail-open). One table in the EXISTING GDS Postgres holds every
|
|
5
|
+
-- searchable chunk (markdown docs + DB prose); full-text (tsvector) and trigram
|
|
6
|
+
-- (pg_trgm) match run as SQL against it, fused with RRF in the search route
|
|
7
|
+
-- (#949). No new service, no new monthly cost (CLAUDE.md §4).
|
|
8
|
+
--
|
|
9
|
+
-- SCOPING IS A FIRST-CLASS COLUMN, NOT A LATER FILTER (ADR 0060 §6 / ADR 0016):
|
|
10
|
+
-- * min_rank — the LOWEST builder rank that may see this chunk. The
|
|
11
|
+
-- search route filters in the SQL WHERE clause against the
|
|
12
|
+
-- caller's LIVE, server-resolved rank, so a sub-Metic query
|
|
13
|
+
-- can never select a Metic+ chunk in the first place. This
|
|
14
|
+
-- keeps the index from becoming a read-side bypass of the
|
|
15
|
+
-- trust boundary (the exact failure mode ADR 0016 guards).
|
|
16
|
+
-- * owner_builder_id — non-null ⟺ a per-builder PRIVATE chunk (e.g. a builder's
|
|
17
|
+
-- own memory). Returned ONLY to that owner (the route adds
|
|
18
|
+
-- `owner_builder_id IS NULL OR owner_builder_id = <session>`),
|
|
19
|
+
-- the owner always taken from the authenticated session,
|
|
20
|
+
-- never from input — same posture as src/bongos/routes/memory.js.
|
|
21
|
+
--
|
|
22
|
+
-- The isolation suite (#950, tests/search_isolation.mjs) is the regression guard
|
|
23
|
+
-- that both filters live in SQL and can't be dropped by a later refactor.
|
|
24
|
+
|
|
25
|
+
-- pg_trgm ships with standard Postgres contrib (no new package); enables the
|
|
26
|
+
-- trigram fuzzy-match leg (similarity / % operator + a GIN gin_trgm_ops index).
|
|
27
|
+
CREATE EXTENSION IF NOT EXISTS pg_trgm;
|
|
28
|
+
|
|
29
|
+
CREATE TABLE IF NOT EXISTS search_chunks (
|
|
30
|
+
id bigserial PRIMARY KEY,
|
|
31
|
+
-- 'doc' = a chunk of a repo markdown file; 'db' = a chunk of DB prose
|
|
32
|
+
-- (task description/value summary, learning, session-log summary, etc.).
|
|
33
|
+
source_kind text NOT NULL CHECK (source_kind IN ('doc', 'db')),
|
|
34
|
+
-- The source identity: a repo-relative path ('docs/adr/0016-....md') for docs,
|
|
35
|
+
-- or a typed ref ('task:431', 'learning:53') for DB prose. Together with
|
|
36
|
+
-- chunk_index it uniquely names a chunk, so re-ingest is an idempotent upsert.
|
|
37
|
+
source_ref text NOT NULL,
|
|
38
|
+
chunk_index int NOT NULL,
|
|
39
|
+
-- Breadcrumb to the chunk's section, e.g. 'CLAUDE.md > §8 Versioning > Working
|
|
40
|
+
-- rules'. Carried so a result is self-locating and the snippet has context.
|
|
41
|
+
heading_path text,
|
|
42
|
+
-- The source's human title, for result display.
|
|
43
|
+
title text,
|
|
44
|
+
-- The chunk text — what gets shown as a snippet and (with title + heading_path)
|
|
45
|
+
-- indexed into tsv.
|
|
46
|
+
body text NOT NULL,
|
|
47
|
+
-- Scoping (see header). Default 'xenos' = visible to everyone (the common case
|
|
48
|
+
-- for ordinary docs); permission-core docs are ingested at 'metic'.
|
|
49
|
+
min_rank text NOT NULL DEFAULT 'xenos'
|
|
50
|
+
CHECK (min_rank IN ('xenos', 'thetes', 'metic', 'archon')),
|
|
51
|
+
-- Per-builder private chunk owner (NULL = shared/non-private). ON DELETE CASCADE:
|
|
52
|
+
-- a private chunk has no meaning once its owner is gone (mirrors builder_memory).
|
|
53
|
+
owner_builder_id bigint REFERENCES builders(id) ON DELETE CASCADE,
|
|
54
|
+
-- sha256 of body — the ingestion delta key (skip re-write when unchanged).
|
|
55
|
+
content_hash text NOT NULL,
|
|
56
|
+
-- Generated FTS vector over title (weight A) + heading_path (B) + body (C), so
|
|
57
|
+
-- ts_rank_cd weights a title/heading hit above a body hit. Uses the 2-arg
|
|
58
|
+
-- to_tsvector('english', ...) form — IMMUTABLE, as a generated column requires
|
|
59
|
+
-- (the 1-arg form depends on default_text_search_config and is NOT immutable).
|
|
60
|
+
tsv tsvector GENERATED ALWAYS AS (
|
|
61
|
+
setweight(to_tsvector('english', coalesce(title, '')), 'A') ||
|
|
62
|
+
setweight(to_tsvector('english', coalesce(heading_path, '')), 'B') ||
|
|
63
|
+
setweight(to_tsvector('english', body), 'C')
|
|
64
|
+
) STORED,
|
|
65
|
+
created_at timestamptz NOT NULL DEFAULT now(),
|
|
66
|
+
updated_at timestamptz NOT NULL DEFAULT now(),
|
|
67
|
+
-- One row per (source, chunk ordinal) → re-ingest is ON CONFLICT upsert.
|
|
68
|
+
UNIQUE (source_kind, source_ref, chunk_index)
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
-- FTS leg: GIN over the generated tsvector.
|
|
72
|
+
CREATE INDEX IF NOT EXISTS idx_search_chunks_tsv
|
|
73
|
+
ON search_chunks USING gin (tsv);
|
|
74
|
+
|
|
75
|
+
-- Trigram leg: GIN gin_trgm_ops over body for similarity() / % fuzzy match.
|
|
76
|
+
CREATE INDEX IF NOT EXISTS idx_search_chunks_body_trgm
|
|
77
|
+
ON search_chunks USING gin (body gin_trgm_ops);
|
|
78
|
+
|
|
79
|
+
-- Idempotent re-ingest + delete-by-source (the ingesters key on this).
|
|
80
|
+
CREATE INDEX IF NOT EXISTS idx_search_chunks_source
|
|
81
|
+
ON search_chunks (source_kind, source_ref);
|
|
82
|
+
|
|
83
|
+
-- Owner-scoped lookups (a builder's own private chunks). Partial — most chunks
|
|
84
|
+
-- are shared (owner NULL), so only index the private ones.
|
|
85
|
+
CREATE INDEX IF NOT EXISTS idx_search_chunks_owner
|
|
86
|
+
ON search_chunks (owner_builder_id) WHERE owner_builder_id IS NOT NULL;
|
|
87
|
+
|
|
88
|
+
-- Counter hygiene: keep the migration-number allocator above this file so the
|
|
89
|
+
-- next reservation can't collide with 103 (per the planning-session learning).
|
|
90
|
+
UPDATE migration_counter SET next_number = GREATEST(next_number, 104) WHERE id = 1;
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
-- migration 104: per-builder dev-box provisioning block (task 1163, idea 257)
|
|
2
|
+
--
|
|
3
|
+
-- Idea 257 ("Dev Box management"): an Archon needs to bar a specific builder
|
|
4
|
+
-- from opening dev boxes (abuse, runaway cost, a departed teammate). This adds
|
|
5
|
+
-- the block flag + a small audit trail to `builders`, parallel to the budget
|
|
6
|
+
-- ceiling (migration 089).
|
|
7
|
+
--
|
|
8
|
+
-- It is a builder-LEVEL capability flag, NOT a per-box row, deliberately:
|
|
9
|
+
-- * it must apply BEFORE the builder ever has a builder_boxes row (block a
|
|
10
|
+
-- newcomer pre-emptively), and
|
|
11
|
+
-- * it must SURVIVE box teardown (a destroyed box leaves a state='destroyed'
|
|
12
|
+
-- row; the block must outlive it), so it cannot hang off builder_boxes.
|
|
13
|
+
--
|
|
14
|
+
-- Enforced server-side in boxes.decideEnsureAction / POST /box/ensure
|
|
15
|
+
-- (BOX_PROVISION_BLOCKED, fail-closed) — the block bars the "open" actions
|
|
16
|
+
-- (provision a new box, wake a parked one) but does NOT by itself tear down a
|
|
17
|
+
-- box that is already running (that stays the Archon's explicit, separate
|
|
18
|
+
-- choice). The markdown/UI only describes this; the server is the authority
|
|
19
|
+
-- (ADR 0016 trust boundary). Toggled by PATCH /boxes/:builderId/block (archon);
|
|
20
|
+
-- the same call can optionally also enqueue a deprovision intent ("close the
|
|
21
|
+
-- box they have running too").
|
|
22
|
+
|
|
23
|
+
ALTER TABLE builders
|
|
24
|
+
ADD COLUMN IF NOT EXISTS box_blocked boolean NOT NULL DEFAULT false,
|
|
25
|
+
ADD COLUMN IF NOT EXISTS box_blocked_reason text,
|
|
26
|
+
ADD COLUMN IF NOT EXISTS box_blocked_at timestamptz,
|
|
27
|
+
ADD COLUMN IF NOT EXISTS box_blocked_by bigint REFERENCES builders(id);
|
|
28
|
+
|
|
29
|
+
-- Counter hygiene: keep the migration-number allocator above this file so the
|
|
30
|
+
-- next reservation can't collide with 104 (mirrors migration 089's tail).
|
|
31
|
+
UPDATE migration_counter SET next_number = GREATEST(next_number, 105) WHERE id = 1;
|
|
32
|
+
|
|
33
|
+
INSERT INTO schema_migrations (version) VALUES ('104_builder_box_blocked')
|
|
34
|
+
ON CONFLICT DO NOTHING;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
-- 105_box_host_keys.sql — task 1187 (idea 235): authoritative box SSH host keys.
|
|
2
|
+
--
|
|
3
|
+
-- Why
|
|
4
|
+
-- ---
|
|
5
|
+
-- A re-provision is a FRESH droplet with brand-new /etc/ssh/ssh_host_* keys.
|
|
6
|
+
-- ssh_deletekeys:false (task 1040) only preserves them across park->wake (the
|
|
7
|
+
-- snapshot restores the disk); the idle-reaper DEPROVISIONS (destroys droplet +
|
|
8
|
+
-- snapshot), so the key changes on every reap->reprovision cycle — now routine.
|
|
9
|
+
-- The laptop/Desktop SSH path then throws "Host denied (verification failed)"
|
|
10
|
+
-- because known_hosts still pins the old box's key. Today's only recovery is TOFU
|
|
11
|
+
-- accept-new (which REJECTS a changed key) or the OTB Dev Box app's ssh-keyscan
|
|
12
|
+
-- re-pin (TOFU + racey — the 925/926 ed25519 partial-scan flakiness).
|
|
13
|
+
--
|
|
14
|
+
-- Fix: the box reports its own PUBLIC host keys UP to the GDS at provision (the
|
|
15
|
+
-- same report-up / serve-to-owner shape as the terminal_* columns in migration
|
|
16
|
+
-- 073), and the connect path WRITES known_hosts from this authoritative value —
|
|
17
|
+
-- no TOFU, no keyscan race. `host_keys` is newline-joined bare `<keytype> <base64>`
|
|
18
|
+
-- pairs (NO hostname prefix — the consumer prepends the host it dials).
|
|
19
|
+
--
|
|
20
|
+
-- PUBLIC KEYS ONLY. The box reporter reads only *.pub files; the PRIVATE half is
|
|
21
|
+
-- NEVER stored here. A host's public key is non-secret and is served to the box's
|
|
22
|
+
-- own builder via GET /box/me (no new read route, no allowBoxScope read surface).
|
|
23
|
+
--
|
|
24
|
+
-- Staleness model (same as 073): WRITTEN only when state='active'
|
|
25
|
+
-- (boxes.setBoxHostKeys gates on it); the value persists across park/wake (the
|
|
26
|
+
-- host identity survives a snapshot wake) and is replaced wholesale by the next
|
|
27
|
+
-- report after a re-provision. No NULL-clear on park.
|
|
28
|
+
--
|
|
29
|
+
-- Idempotent: safe to re-run.
|
|
30
|
+
|
|
31
|
+
ALTER TABLE builder_boxes ADD COLUMN IF NOT EXISTS host_keys text;
|
|
32
|
+
ALTER TABLE builder_boxes ADD COLUMN IF NOT EXISTS host_keys_at timestamptz;
|
|
33
|
+
|
|
34
|
+
INSERT INTO schema_migrations (version) VALUES ('105_box_host_keys')
|
|
35
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
-- GDS-V4 Medusa — customer-0 framing + vanilla brand pack (2026-06-17)
|
|
2
|
+
-- Applied under claim 985 (task 1215). Idempotent on re-run.
|
|
3
|
+
--
|
|
4
|
+
-- Refines the Medusa model from the planning session: Medusa runs on its own
|
|
5
|
+
-- plain "vanilla" brand as CUSTOMER 0 and builds itself (the GDS builds itself);
|
|
6
|
+
-- Amazonprimea is CUSTOMER 1. Adds the vanilla-brand-pack task (R74) via
|
|
7
|
+
-- scripts/gds/seed-medusa-tasks.js (re-run after this migration).
|
|
8
|
+
--
|
|
9
|
+
-- What this migration does:
|
|
10
|
+
-- 1. Updates the C8 (medusa-standalone-instance) criterion_md to the
|
|
11
|
+
-- customer-0 / customer-1 framing.
|
|
12
|
+
-- 2. Updates the R67 dogfood proof task description to "Medusa builds itself
|
|
13
|
+
-- as customer 0" (matched by source_ref; idempotent).
|
|
14
|
+
|
|
15
|
+
BEGIN;
|
|
16
|
+
|
|
17
|
+
-- 1. C8 criterion text → customer-0 / customer-1 framing.
|
|
18
|
+
UPDATE done_when_criteria
|
|
19
|
+
SET criterion_md = '**Medusa runs as a configurable, self-hostable, branded instance — Medusa itself is customer 0, Amazonprimea is customer 1.** The build system is no longer a fixture of the game: it boots with no game code in the process, runs on its own database, and takes its identity, branding, and feature selection from per-instance config. Medusa runs on its own plain "vanilla" brand as **customer 0** and builds itself (the GDS builds itself); **Amazonprimea is customer 1**, its surfaces (status/builders) unchanged because their look now comes from config rather than hard-coding. Done when: a Medusa-only entrypoint boots with no Colyseus/Phaser/game routes; a fresh instance''s database holds only build-system tables (game tables only when the game module is enabled); one command (docker compose) stands an instance up with zero hard-coded server IP / service name / deploy script; product name, domain, sign-in origin, repo binding, currency label and the full branding pack resolve from one config (the Medusa vanilla brand is customer 0''s pack; an owner''s own LLM fills a new customer''s pack); the first admin is set at install time, not in a migration; core carries no hard-coded project branding (the deploy-time diagram generator reads instance branding too; Greek rank names stay by decision); an instance turns feature modules (game, art pipeline, Discord, dev boxes) on/off; an instance declares its core version and `medusa upgrade` applies new migrations + code while preserving instance config; and Medusa builds itself as customer 0 on the vanilla brand, taking a task claim->grade->ship end-to-end. Live Amazonprimea (customer 1) is unaffected throughout.'
|
|
20
|
+
WHERE version_id = 'GDS-V4' AND criterion_id = 'medusa-standalone-instance';
|
|
21
|
+
|
|
22
|
+
-- 2. R67 dogfood proof → customer-0 self-build framing.
|
|
23
|
+
UPDATE tasks
|
|
24
|
+
SET description = 'Part of Medusa (C8) — the proof-task that satisfies C8 ("the GDS builds itself"). Customer 0 = Medusa itself, running on the vanilla brand pack (R74); customer 1 = Amazonprimea.
|
|
25
|
+
|
|
26
|
+
Stand Medusa up as customer 0 (its own database, vanilla brand, no game code) and take one real task through the full lifecycle on it: claim -> grade -> merge -> ship with credits awarded. Medusa building Medusa, on Medusa. (A separate non-game third project is an acceptable alternative proof, but customer-0 self-build is the truest.)
|
|
27
|
+
|
|
28
|
+
**Done when:** a task reaches ''shipped'' with credits on the customer-0 Medusa instance carrying zero game code; documented as the C8 acceptance.'
|
|
29
|
+
WHERE source_ref = 'gds-v4-r67';
|
|
30
|
+
|
|
31
|
+
-- Self-register so migrate.sh skips this hot-applied file on the next deploy.
|
|
32
|
+
INSERT INTO schema_migrations (version) VALUES ('111_medusa_customer0_framing')
|
|
33
|
+
ON CONFLICT DO NOTHING;
|
|
34
|
+
|
|
35
|
+
COMMIT;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
-- Migration 112 — drop the product|internal track CHECK on versions (ADR 0062 §3/§5, task 1191).
|
|
2
|
+
--
|
|
3
|
+
-- The track taxonomy is now INSTANCE CONFIG (config/branding.json "tracks"), validated in the API
|
|
4
|
+
-- (src/bongos/routes/tasks.js validTracks()), not a hardcoded 2-value DB constraint. The column stays
|
|
5
|
+
-- NOT NULL — a version still HAS a track — but any value the instance configures is allowed.
|
|
6
|
+
--
|
|
7
|
+
-- Live prod unaffected: existing 'product'/'internal' rows stay valid; this only LOOSENS. The drop
|
|
8
|
+
-- is name-independent (finds the track CHECK by its definition) so it works regardless of the
|
|
9
|
+
-- auto-generated constraint name, and is a no-op if it was already dropped.
|
|
10
|
+
|
|
11
|
+
DO $$
|
|
12
|
+
DECLARE r record;
|
|
13
|
+
BEGIN
|
|
14
|
+
FOR r IN
|
|
15
|
+
SELECT conname
|
|
16
|
+
FROM pg_constraint
|
|
17
|
+
WHERE conrelid = 'versions'::regclass
|
|
18
|
+
AND contype = 'c'
|
|
19
|
+
AND pg_get_constraintdef(oid) ILIKE '%track%'
|
|
20
|
+
LOOP
|
|
21
|
+
EXECUTE format('ALTER TABLE versions DROP CONSTRAINT %I', r.conname);
|
|
22
|
+
END LOOP;
|
|
23
|
+
END $$;
|
|
24
|
+
|
|
25
|
+
INSERT INTO schema_migrations (version) VALUES ('112_drop_track_check') ON CONFLICT DO NOTHING;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
-- Migration 113 — server-side merge lease (task 585 / idea 124).
|
|
2
|
+
--
|
|
3
|
+
-- A TTL'd advisory lease keyed on the merge target ("main"), so builders shipping from DIFFERENT
|
|
4
|
+
-- physical machines serialize their main-mutating merges. merge-lock.js handles the intra-machine
|
|
5
|
+
-- (single-checkout) case with a filesystem lock; this is the cross-machine counterpart, handed out
|
|
6
|
+
-- by the GDS API (src/bongos/db.js acquireMergeLease/releaseMergeLease). A dead holder's lease is
|
|
7
|
+
-- reclaimed automatically once expires_at passes — no reaper needed. Single-row-per-key table.
|
|
8
|
+
|
|
9
|
+
CREATE TABLE IF NOT EXISTS merge_lease (
|
|
10
|
+
key text PRIMARY KEY,
|
|
11
|
+
holder text NOT NULL,
|
|
12
|
+
acquired_at timestamptz NOT NULL DEFAULT now(),
|
|
13
|
+
expires_at timestamptz NOT NULL
|
|
14
|
+
);
|
|
15
|
+
|
|
16
|
+
INSERT INTO schema_migrations (version) VALUES ('113_merge_lease') ON CONFLICT DO NOTHING;
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
-- 114 — Cloud Bongos rename: rewrite live user-facing DB strings (2026-06-19, task 1244 / ADR 0064).
|
|
2
|
+
--
|
|
3
|
+
-- The platform was renamed Medusa -> Cloud Bongos (task 1242 / ADR 0064). Migration 111 had baked
|
|
4
|
+
-- "Medusa" into LIVE rows the API still serves (/status, the builders' hall, /recall): the GDS-V4
|
|
5
|
+
-- C8 + C9 done-when criteria and the R67 dogfood-proof task. Per owner directive (2026-06-19) those
|
|
6
|
+
-- live strings are rewritten forward here. Display text ONLY — never the criterion_id keys
|
|
7
|
+
-- (medusa-standalone-instance / medusa-open-and-protected, referenced by task_criteria + code) and
|
|
8
|
+
-- never schema_migrations version strings. Editing 110/111 directly would break idempotency.
|
|
9
|
+
--
|
|
10
|
+
-- Case-sensitive REPLACE on 'Medusa' (the platform name) leaves lowercase filenames/keys
|
|
11
|
+
-- (seed-medusa-tasks.js, medusa-*) untouched; the CLI 'medusa upgrade' becomes 'cloudbongos upgrade'.
|
|
12
|
+
-- Idempotent: REPLACE over already-rewritten text is a no-op. The other 23 R50-R74 task
|
|
13
|
+
-- descriptions are deliberately KEPT as history (owner "history preserved" choice).
|
|
14
|
+
|
|
15
|
+
BEGIN;
|
|
16
|
+
|
|
17
|
+
-- C8 + C9 done-when criteria — display text only (criterion_id keys stay).
|
|
18
|
+
UPDATE done_when_criteria
|
|
19
|
+
SET criterion_md = REPLACE(REPLACE(criterion_md, 'Medusa', 'Cloud Bongos'), 'medusa upgrade', 'cloudbongos upgrade')
|
|
20
|
+
WHERE version_id = 'GDS-V4'
|
|
21
|
+
AND criterion_id IN ('medusa-standalone-instance', 'medusa-open-and-protected');
|
|
22
|
+
|
|
23
|
+
-- R67 dogfood-proof task (the owner-flagged live string) — title + description.
|
|
24
|
+
UPDATE tasks
|
|
25
|
+
SET title = REPLACE(title, 'Medusa', 'Cloud Bongos'),
|
|
26
|
+
description = REPLACE(REPLACE(description, 'Medusa', 'Cloud Bongos'), 'medusa upgrade', 'cloudbongos upgrade')
|
|
27
|
+
WHERE source_ref = 'gds-v4-r67';
|
|
28
|
+
|
|
29
|
+
INSERT INTO schema_migrations (version) VALUES ('114_cloudbongos_rename_live_strings')
|
|
30
|
+
ON CONFLICT DO NOTHING;
|
|
31
|
+
|
|
32
|
+
COMMIT;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
-- Migration 118 — document that the currency COLUMN NAMES are decoupled from the
|
|
2
|
+
-- configurable display LABEL (R56 / task 1195, ADR 0062 §3).
|
|
3
|
+
--
|
|
4
|
+
-- R56 makes the reward unit's *display label* instance config (branding.currency.label;
|
|
5
|
+
-- OTB = "drachmae", the neutral starter = "credits"), resolved at render time. The DB
|
|
6
|
+
-- COLUMN NAMES below keep the historical "drachmae" stem ON PURPOSE — they are fixed
|
|
7
|
+
-- schema identifiers, NOT user-facing copy. Renaming them would churn every query +
|
|
8
|
+
-- the wire field names the front-end reads, and — for token_reward_drachmae — risks
|
|
9
|
+
-- disturbing the migration-091 idempotency key (credit_log uniqueness on
|
|
10
|
+
-- reason='session.token_reward'). The cost-plus reward MATH is unchanged by R56.
|
|
11
|
+
--
|
|
12
|
+
-- These COMMENTs are the durable signpost so a future builder doesn't "tidy" the
|
|
13
|
+
-- column names to match a re-branded label and break the ledger. Metadata-only +
|
|
14
|
+
-- idempotent (COMMENT ON overwrites); changes no data and no behaviour.
|
|
15
|
+
|
|
16
|
+
COMMENT ON COLUMN session_records.drachmae_earned IS
|
|
17
|
+
'Reward earned for the session, in the instance reward unit. FIXED identifier — the user-facing unit LABEL is config (branding.currency.label, R56/task 1195); do not rename to match a re-branded label.';
|
|
18
|
+
|
|
19
|
+
COMMENT ON COLUMN session_records.token_reward_drachmae IS
|
|
20
|
+
'Per-session token reward (cost-plus, ADR 0054), in the instance reward unit. FIXED identifier — display label is config (R56). Do NOT rename: the migration-091 idempotency key (credit_log reason=''session.token_reward'') and the reward math depend on this column.';
|
|
21
|
+
|
|
22
|
+
COMMENT ON COLUMN vulnerability_reports.drachmae_awarded IS
|
|
23
|
+
'Bounty paid for a confirmed report, in the instance reward unit. FIXED identifier — the user-facing unit LABEL is config (branding.currency.label, R56/task 1195); do not rename to match a re-branded label.';
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
-- 119_builder_behavior_prefs.sql — per-builder agent-behavior preferences,
|
|
2
|
+
-- starting with the "wandering" knob (task 1268).
|
|
3
|
+
--
|
|
4
|
+
-- One jsonb column on `builders` (behavior_prefs), default '{}'. It holds
|
|
5
|
+
-- reserved keys for per-builder behavior tuning; the first is 'wandering' — an
|
|
6
|
+
-- integer level 0..3 (Locked | Focused | Balanced | Exploratory) controlling how
|
|
7
|
+
-- readily an agent opens a NEW THREAD of work (a tangent, an investigation, an
|
|
8
|
+
-- unsolicited suggestion) vs. staying on its claimed task. A MISSING key falls
|
|
9
|
+
-- back to the rank-derived default resolved in src/bongos/wandering-prefs.js
|
|
10
|
+
-- (Xenos→Locked … Archon→Exploratory), so the column stays sparse: a builder
|
|
11
|
+
-- who never touches the setting has '{}' and behaves at their rank's default.
|
|
12
|
+
--
|
|
13
|
+
-- This deliberately mirrors migration 037 (skill_model_prefs) and 075
|
|
14
|
+
-- (sound_prefs): per-builder personalized config, sparse + irregular, read by
|
|
15
|
+
-- primary key, with the allowlist + defaults + the rank clamp living in code
|
|
16
|
+
-- (src/bongos/wandering-prefs.js) rather than a Postgres CHECK — so adding a new
|
|
17
|
+
-- behavior knob (or a new level) is a one-line code change, not a coordinated
|
|
18
|
+
-- schema migration. behavior_prefs is the blob; 'wandering' is one reserved key.
|
|
19
|
+
--
|
|
20
|
+
-- Enforcement note: the stored value is the builder's DESIRED level; the
|
|
21
|
+
-- effective level is clamp(override, 0, maxForRank) computed server-side on
|
|
22
|
+
-- every read (wandering-prefs.effectiveLevel). A Xenos who stores Exploratory is
|
|
23
|
+
-- still resolved to Locked — so opening this up for self-service later is safe.
|
|
24
|
+
--
|
|
25
|
+
-- Idempotent: safe to re-run.
|
|
26
|
+
|
|
27
|
+
ALTER TABLE builders
|
|
28
|
+
ADD COLUMN IF NOT EXISTS behavior_prefs jsonb NOT NULL DEFAULT '{}'::jsonb;
|
|
29
|
+
|
|
30
|
+
INSERT INTO schema_migrations (version) VALUES ('119_builder_behavior_prefs')
|
|
31
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
-- 121_box_code_version.sql — dev-box code-version reporting (idea 332, task 1316).
|
|
2
|
+
--
|
|
3
|
+
-- Why
|
|
4
|
+
-- ---
|
|
5
|
+
-- Boxes already auto-update: infra/box-source-fetch.sh (cron */10) `git pull
|
|
6
|
+
-- --ff-only`s /workspace and self-updates its own baked scripts/crons (#985). But
|
|
7
|
+
-- two failure modes leave a box silently STALE with no visibility:
|
|
8
|
+
-- 1. A box provisioned BEFORE that machinery existed has no self-update cron, so
|
|
9
|
+
-- it can never pull the fix — only a rebuild helps (box-LarsCode, 2026-06-07).
|
|
10
|
+
-- 2. When `pull --ff-only` can't fast-forward, the script logs and leaves the
|
|
11
|
+
-- tree as-is — stale, silently.
|
|
12
|
+
-- A stale box then fails CRYPTICALLY (no shared art key delivered, host-key
|
|
13
|
+
-- reporter absent → connect fails) and the builder has no idea the cause is old
|
|
14
|
+
-- code. This adds the VISIBILITY layer — the box reports its HEAD commit so the
|
|
15
|
+
-- server can flag "running old code → rebuild." (We never auto-reset: that would
|
|
16
|
+
-- clobber a builder's uncommitted work — ADR 0072.)
|
|
17
|
+
--
|
|
18
|
+
-- Columns on builder_boxes (same report-up shape as host_keys, migration 105):
|
|
19
|
+
-- code_sha — the box's /workspace HEAD commit sha (40-hex), reported up.
|
|
20
|
+
-- code_committed_at — that commit's date (ISO), for the "how far behind"
|
|
21
|
+
-- comparison against the server's own deployed commit date
|
|
22
|
+
-- (src/build-info.js).
|
|
23
|
+
-- code_reported_at — when the box last reported; NULL on an active box past the
|
|
24
|
+
-- provision grace ⇒ the box is too old to even run the
|
|
25
|
+
-- reporter (a pre-machinery box) ⇒ stale.
|
|
26
|
+
--
|
|
27
|
+
-- Staleness is COMPUTED in code (boxes.computeCodeStaleness), not stored, so the
|
|
28
|
+
-- thresholds live with the logic + tests — nothing to migrate to tune them.
|
|
29
|
+
--
|
|
30
|
+
-- Idempotent: safe to re-run.
|
|
31
|
+
|
|
32
|
+
ALTER TABLE builder_boxes ADD COLUMN IF NOT EXISTS code_sha text;
|
|
33
|
+
ALTER TABLE builder_boxes ADD COLUMN IF NOT EXISTS code_committed_at timestamptz;
|
|
34
|
+
ALTER TABLE builder_boxes ADD COLUMN IF NOT EXISTS code_reported_at timestamptz;
|
|
35
|
+
|
|
36
|
+
INSERT INTO schema_migrations (version) VALUES ('121_box_code_version')
|
|
37
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
-- 122_builder_gemini_key.sql — per-builder Gemini key, encrypted at rest (task 1013).
|
|
2
|
+
--
|
|
3
|
+
-- Pragmatic BYOK (ADR 0073). The builder's own Google AI Studio (Gemini) key
|
|
4
|
+
-- moves from local-file-only (~/.config/otb/gds-session.json#gemini_api_key,
|
|
5
|
+
-- entered via the CLI) to a server-stored encrypted column that becomes the
|
|
6
|
+
-- source of truth — so a browser-first builder can enter it on the Settings page
|
|
7
|
+
-- and it syncs down to their box at session start (mirrors the shared-key rail).
|
|
8
|
+
--
|
|
9
|
+
-- Three columns on `builders`:
|
|
10
|
+
-- gemini_key_enc — the AES-256-GCM blob "v1.<iv>.<tag>.<ct>" (base64url
|
|
11
|
+
-- parts). NULL = no own key set. The plaintext NEVER lands
|
|
12
|
+
-- in the DB; the master key lives only in server env
|
|
13
|
+
-- (BUILDER_SECRET_KEY), so a DB dump alone cannot decrypt
|
|
14
|
+
-- (src/bongos/secret-box.js).
|
|
15
|
+
-- gemini_key_last4 — last 4 chars of the plaintext, for the masked "…ABCD"
|
|
16
|
+
-- display (like GitHub/Stripe). Not a secret.
|
|
17
|
+
-- gemini_key_set_at — when it was last set/replaced.
|
|
18
|
+
--
|
|
19
|
+
-- This mirrors the sparse per-builder column pattern (migrations 119, 075, 037):
|
|
20
|
+
-- behaviour lives in code (secret-box.js + builder-needs.js), not in a CHECK.
|
|
21
|
+
--
|
|
22
|
+
-- Idempotent: safe to re-run.
|
|
23
|
+
|
|
24
|
+
ALTER TABLE builders
|
|
25
|
+
ADD COLUMN IF NOT EXISTS gemini_key_enc text,
|
|
26
|
+
ADD COLUMN IF NOT EXISTS gemini_key_last4 text,
|
|
27
|
+
ADD COLUMN IF NOT EXISTS gemini_key_set_at timestamptz;
|
|
28
|
+
|
|
29
|
+
INSERT INTO schema_migrations (version) VALUES ('122_builder_gemini_key')
|
|
30
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
-- 123_cost_log_tiers.sql — per-tier USD breakdown on cost_log (GDS-V4 task 1344,
|
|
2
|
+
-- System 1: Cost Attribution & Savings Ledger).
|
|
3
|
+
--
|
|
4
|
+
-- priceUsage (src/bongos/llm-pricing.js, task 1343) already computes the per-tier
|
|
5
|
+
-- component split (fresh input / cache-read / cache-write / output) but the
|
|
6
|
+
-- ledger discarded it, lumping every call into a single amount_usd. The
|
|
7
|
+
-- marathon-session finding (~82% of spend is cache_read, re-billed every turn for
|
|
8
|
+
-- hours) stays an *inference* until that tier is a queryable column. These four
|
|
9
|
+
-- nullable columns persist the split so costSummary() can GROUP BY tier (task
|
|
10
|
+
-- 1345) and the audit can report the cache_read share (task 1346).
|
|
11
|
+
--
|
|
12
|
+
-- fresh_input_usd — uncached input tokens priced at the family input rate.
|
|
13
|
+
-- cache_read_usd — cache-read tokens (0.1× input). The marathon cost sink.
|
|
14
|
+
-- cache_write_usd — cache-creation tokens: the 5m + 1h tiers SUMMED into one
|
|
15
|
+
-- "what we paid to write cache" figure (priceUsage splits
|
|
16
|
+
-- them; the ledger does not need that granularity).
|
|
17
|
+
-- output_usd — output tokens.
|
|
18
|
+
--
|
|
19
|
+
-- All nullable: historical rows and non-LLM rows (manual/infra/domain/compute,
|
|
20
|
+
-- e.g. boxes.js 'box-lifecycle' compute rows) stay NULL. The four need not sum
|
|
21
|
+
-- to amount_usd for legacy rows; for the session/cron rows written by
|
|
22
|
+
-- scripts/gds/session-cost.js they sum to amount_usd by construction.
|
|
23
|
+
--
|
|
24
|
+
-- Additive + idempotent: safe to re-run.
|
|
25
|
+
|
|
26
|
+
ALTER TABLE cost_log
|
|
27
|
+
ADD COLUMN IF NOT EXISTS fresh_input_usd numeric,
|
|
28
|
+
ADD COLUMN IF NOT EXISTS cache_read_usd numeric,
|
|
29
|
+
ADD COLUMN IF NOT EXISTS cache_write_usd numeric,
|
|
30
|
+
ADD COLUMN IF NOT EXISTS output_usd numeric;
|
|
31
|
+
|
|
32
|
+
INSERT INTO schema_migrations (version) VALUES ('123_cost_log_tiers')
|
|
33
|
+
ON CONFLICT (version) DO NOTHING;
|