@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,378 @@
|
|
|
1
|
+
-- 006_pms_v2.sql — PMS-V2 schema additions
|
|
2
|
+
--
|
|
3
|
+
-- See limitations/pms-v2.md for the king scope file.
|
|
4
|
+
-- See docs/adr/0010-pms-architecture.md for the architecture rationale (carries forward).
|
|
5
|
+
--
|
|
6
|
+
-- This migration adds:
|
|
7
|
+
-- - new columns on existing tables (tasks.kind, tasks.parent_task_id,
|
|
8
|
+
-- tasks.actual_minutes, tasks.scoping_confidence, claims.head_sha,
|
|
9
|
+
-- builders.timezone)
|
|
10
|
+
-- - new tables (achievements, builder_achievements, learnings, idea_inbox,
|
|
11
|
+
-- done_when_criteria, session_pulses)
|
|
12
|
+
-- - new view (tasks_session_fit)
|
|
13
|
+
-- - rebuilt views (claimable_tasks, version_progress) with the new
|
|
14
|
+
-- columns + parent/child rollup semantics
|
|
15
|
+
-- - seeds (8 achievements, V1 + PMS-V2 done-when criteria)
|
|
16
|
+
--
|
|
17
|
+
-- Idempotent: safe to re-run. Each ALTER, CREATE, INSERT uses IF NOT EXISTS
|
|
18
|
+
-- or ON CONFLICT.
|
|
19
|
+
|
|
20
|
+
-- =========================================================================
|
|
21
|
+
-- 1. New columns on existing tables
|
|
22
|
+
-- =========================================================================
|
|
23
|
+
|
|
24
|
+
-- builders.timezone — IANA name. Set on first auth from CLI's local TZ.
|
|
25
|
+
ALTER TABLE builders
|
|
26
|
+
ADD COLUMN IF NOT EXISTS timezone text NOT NULL DEFAULT 'America/New_York';
|
|
27
|
+
|
|
28
|
+
-- tasks.kind — required category, with auto-classifier escape valve 'unclassified'
|
|
29
|
+
ALTER TABLE tasks ADD COLUMN IF NOT EXISTS kind text NOT NULL DEFAULT 'unclassified';
|
|
30
|
+
|
|
31
|
+
DO $$
|
|
32
|
+
BEGIN
|
|
33
|
+
IF NOT EXISTS (
|
|
34
|
+
SELECT 1 FROM pg_constraint WHERE conname = 'tasks_kind_check'
|
|
35
|
+
) THEN
|
|
36
|
+
ALTER TABLE tasks ADD CONSTRAINT tasks_kind_check
|
|
37
|
+
CHECK (kind IN (
|
|
38
|
+
'feature','bug','infra','refactor','spike',
|
|
39
|
+
'learning-capture','cleanup','decision','blocker-resolution',
|
|
40
|
+
'unclassified'
|
|
41
|
+
));
|
|
42
|
+
END IF;
|
|
43
|
+
END $$;
|
|
44
|
+
|
|
45
|
+
-- tasks.parent_task_id — shallow hierarchy (one level deep, enforced in app code)
|
|
46
|
+
ALTER TABLE tasks
|
|
47
|
+
ADD COLUMN IF NOT EXISTS parent_task_id bigint REFERENCES tasks(id);
|
|
48
|
+
|
|
49
|
+
CREATE INDEX IF NOT EXISTS idx_tasks_parent ON tasks (parent_task_id);
|
|
50
|
+
|
|
51
|
+
-- tasks.actual_minutes — wall-clock from session_logs at ship; computed in C4
|
|
52
|
+
ALTER TABLE tasks ADD COLUMN IF NOT EXISTS actual_minutes integer;
|
|
53
|
+
|
|
54
|
+
-- tasks.scoping_confidence — 1..5 self-reported "how well-scoped is this?"
|
|
55
|
+
ALTER TABLE tasks ADD COLUMN IF NOT EXISTS scoping_confidence integer;
|
|
56
|
+
|
|
57
|
+
DO $$
|
|
58
|
+
BEGIN
|
|
59
|
+
IF NOT EXISTS (
|
|
60
|
+
SELECT 1 FROM pg_constraint WHERE conname = 'tasks_scoping_confidence_check'
|
|
61
|
+
) THEN
|
|
62
|
+
ALTER TABLE tasks ADD CONSTRAINT tasks_scoping_confidence_check
|
|
63
|
+
CHECK (scoping_confidence IS NULL OR scoping_confidence BETWEEN 1 AND 5);
|
|
64
|
+
END IF;
|
|
65
|
+
END $$;
|
|
66
|
+
|
|
67
|
+
-- claims.head_sha — git HEAD captured at claim time; used by C3 incidental-work scanner
|
|
68
|
+
ALTER TABLE claims ADD COLUMN IF NOT EXISTS head_sha text;
|
|
69
|
+
|
|
70
|
+
-- =========================================================================
|
|
71
|
+
-- 2. New tables
|
|
72
|
+
-- =========================================================================
|
|
73
|
+
|
|
74
|
+
-- achievements — fixed catalog of 8 in V2; new ones require migration + rule
|
|
75
|
+
CREATE TABLE IF NOT EXISTS achievements (
|
|
76
|
+
id text PRIMARY KEY,
|
|
77
|
+
name text NOT NULL,
|
|
78
|
+
description text NOT NULL,
|
|
79
|
+
icon text,
|
|
80
|
+
credit_bonus integer NOT NULL DEFAULT 0,
|
|
81
|
+
sort_order integer NOT NULL DEFAULT 100
|
|
82
|
+
);
|
|
83
|
+
|
|
84
|
+
-- builder_achievements — unlock ledger; PK enforces "unlock once per builder"
|
|
85
|
+
CREATE TABLE IF NOT EXISTS builder_achievements (
|
|
86
|
+
builder_id bigint NOT NULL REFERENCES builders(id),
|
|
87
|
+
achievement_id text NOT NULL REFERENCES achievements(id),
|
|
88
|
+
unlocked_at timestamptz NOT NULL DEFAULT now(),
|
|
89
|
+
unlocked_by_task_id bigint REFERENCES tasks(id),
|
|
90
|
+
PRIMARY KEY (builder_id, achievement_id)
|
|
91
|
+
);
|
|
92
|
+
|
|
93
|
+
CREATE INDEX IF NOT EXISTS idx_builder_achievements_builder
|
|
94
|
+
ON builder_achievements (builder_id);
|
|
95
|
+
|
|
96
|
+
-- learnings — structured capture of paid-once knowledge
|
|
97
|
+
CREATE TABLE IF NOT EXISTS learnings (
|
|
98
|
+
id bigserial PRIMARY KEY,
|
|
99
|
+
title text NOT NULL,
|
|
100
|
+
body_md text NOT NULL,
|
|
101
|
+
tags text[] NOT NULL DEFAULT '{}',
|
|
102
|
+
related_files text[] NOT NULL DEFAULT '{}',
|
|
103
|
+
captured_by bigint REFERENCES builders(id),
|
|
104
|
+
source text,
|
|
105
|
+
source_ref text,
|
|
106
|
+
task_id bigint REFERENCES tasks(id),
|
|
107
|
+
created_at timestamptz NOT NULL DEFAULT now()
|
|
108
|
+
);
|
|
109
|
+
|
|
110
|
+
CREATE INDEX IF NOT EXISTS idx_learnings_tags_gin
|
|
111
|
+
ON learnings USING gin (tags);
|
|
112
|
+
CREATE INDEX IF NOT EXISTS idx_learnings_related_files_gin
|
|
113
|
+
ON learnings USING gin (related_files);
|
|
114
|
+
CREATE INDEX IF NOT EXISTS idx_learnings_created
|
|
115
|
+
ON learnings (created_at);
|
|
116
|
+
|
|
117
|
+
-- Idempotency: same (source, source_ref) skips reinsert, mirroring cost_log
|
|
118
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uniq_learnings_source_ref
|
|
119
|
+
ON learnings (source, source_ref)
|
|
120
|
+
WHERE source IS NOT NULL AND source_ref IS NOT NULL;
|
|
121
|
+
|
|
122
|
+
-- idea_inbox — structured replacement for free-form generative-ideas.md
|
|
123
|
+
CREATE TABLE IF NOT EXISTS idea_inbox (
|
|
124
|
+
id bigserial PRIMARY KEY,
|
|
125
|
+
title text NOT NULL,
|
|
126
|
+
body_md text NOT NULL DEFAULT '',
|
|
127
|
+
kind text NOT NULL DEFAULT 'unclassified'
|
|
128
|
+
CHECK (kind IN (
|
|
129
|
+
'feature','bug','infra','refactor','spike',
|
|
130
|
+
'learning-capture','cleanup','decision','blocker-resolution',
|
|
131
|
+
'unclassified'
|
|
132
|
+
)),
|
|
133
|
+
suggested_version text REFERENCES versions(id),
|
|
134
|
+
suggested_priority integer
|
|
135
|
+
CHECK (suggested_priority IS NULL OR suggested_priority BETWEEN 1 AND 5),
|
|
136
|
+
captured_at timestamptz NOT NULL DEFAULT now(),
|
|
137
|
+
captured_by bigint REFERENCES builders(id),
|
|
138
|
+
status text NOT NULL DEFAULT 'open'
|
|
139
|
+
CHECK (status IN ('open','promoted','discarded','merged')),
|
|
140
|
+
promoted_to_task_id bigint REFERENCES tasks(id),
|
|
141
|
+
reviewed_at timestamptz
|
|
142
|
+
);
|
|
143
|
+
|
|
144
|
+
CREATE INDEX IF NOT EXISTS idx_idea_inbox_status
|
|
145
|
+
ON idea_inbox (status);
|
|
146
|
+
CREATE INDEX IF NOT EXISTS idx_idea_inbox_captured_at
|
|
147
|
+
ON idea_inbox (captured_at);
|
|
148
|
+
|
|
149
|
+
-- done_when_criteria — per-version structured "is this version done?" gate
|
|
150
|
+
CREATE TABLE IF NOT EXISTS done_when_criteria (
|
|
151
|
+
id bigserial PRIMARY KEY,
|
|
152
|
+
version_id text NOT NULL REFERENCES versions(id),
|
|
153
|
+
criterion_id text NOT NULL,
|
|
154
|
+
criterion_md text NOT NULL,
|
|
155
|
+
satisfied boolean NOT NULL DEFAULT false,
|
|
156
|
+
satisfied_by_task_id bigint REFERENCES tasks(id),
|
|
157
|
+
checked_at timestamptz,
|
|
158
|
+
sort_order integer NOT NULL DEFAULT 100,
|
|
159
|
+
UNIQUE (version_id, criterion_id)
|
|
160
|
+
);
|
|
161
|
+
|
|
162
|
+
CREATE INDEX IF NOT EXISTS idx_done_when_version
|
|
163
|
+
ON done_when_criteria (version_id);
|
|
164
|
+
|
|
165
|
+
-- session_pulses — heartbeat for stale-claim detection (C1)
|
|
166
|
+
CREATE TABLE IF NOT EXISTS session_pulses (
|
|
167
|
+
claim_id bigint PRIMARY KEY REFERENCES claims(id) ON DELETE CASCADE,
|
|
168
|
+
builder_id bigint NOT NULL REFERENCES builders(id),
|
|
169
|
+
last_pulse_at timestamptz NOT NULL DEFAULT now()
|
|
170
|
+
);
|
|
171
|
+
|
|
172
|
+
CREATE INDEX IF NOT EXISTS idx_session_pulses_last_pulse
|
|
173
|
+
ON session_pulses (last_pulse_at);
|
|
174
|
+
|
|
175
|
+
-- =========================================================================
|
|
176
|
+
-- 3. View rebuilds
|
|
177
|
+
-- =========================================================================
|
|
178
|
+
|
|
179
|
+
-- claimable_tasks: same semantics as 005, but now using SELECT t.* so the
|
|
180
|
+
-- new task columns (kind, parent_task_id, actual_minutes, scoping_confidence)
|
|
181
|
+
-- flow through to API consumers without a future view-rebuild.
|
|
182
|
+
DROP VIEW IF EXISTS claimable_tasks;
|
|
183
|
+
CREATE VIEW claimable_tasks AS
|
|
184
|
+
SELECT t.*
|
|
185
|
+
FROM tasks t
|
|
186
|
+
WHERE t.status = 'ready'
|
|
187
|
+
AND t.title NOT LIKE '\_\_smoke\_\_%' ESCAPE '\'
|
|
188
|
+
AND NOT EXISTS (
|
|
189
|
+
SELECT 1 FROM task_blockers tb WHERE tb.task_id = t.id
|
|
190
|
+
)
|
|
191
|
+
AND NOT EXISTS (
|
|
192
|
+
SELECT 1 FROM claims c
|
|
193
|
+
JOIN tasks t2 ON t2.id = c.task_id
|
|
194
|
+
WHERE c.released_at IS NULL
|
|
195
|
+
AND t2.touches && t.touches
|
|
196
|
+
);
|
|
197
|
+
|
|
198
|
+
-- tasks_session_fit (P2): derives session-mode fit + credits-per-minute
|
|
199
|
+
-- from existing automation_tag + manual_degree + blocker presence.
|
|
200
|
+
CREATE OR REPLACE VIEW tasks_session_fit AS
|
|
201
|
+
SELECT t.*,
|
|
202
|
+
CASE
|
|
203
|
+
WHEN t.automation_tag = 'overnight-safe' AND COALESCE(t.manual_degree, 5) <= 2
|
|
204
|
+
AND NOT EXISTS (SELECT 1 FROM task_blockers tb WHERE tb.task_id = t.id)
|
|
205
|
+
THEN ARRAY['autonomous','check-in','active']
|
|
206
|
+
WHEN t.automation_tag = 'live-only' OR COALESCE(t.manual_degree, 5) >= 4
|
|
207
|
+
THEN ARRAY['active']
|
|
208
|
+
ELSE ARRAY['check-in','active']
|
|
209
|
+
END AS fits_session_modes,
|
|
210
|
+
CASE WHEN t.credits_reward > 0 AND t.est_minutes IS NOT NULL AND t.est_minutes > 0
|
|
211
|
+
THEN ROUND(t.credits_reward::numeric / t.est_minutes, 3)
|
|
212
|
+
ELSE NULL
|
|
213
|
+
END AS credits_per_minute
|
|
214
|
+
FROM tasks t;
|
|
215
|
+
|
|
216
|
+
-- version_progress: rebuilt to count only LEAF tasks (those with no children).
|
|
217
|
+
-- Today no tasks have children, so this is identical in behavior to 005's
|
|
218
|
+
-- view. Once C2 lands, parent tasks become aggregators of their children
|
|
219
|
+
-- and stop being counted directly.
|
|
220
|
+
DROP VIEW IF EXISTS version_progress;
|
|
221
|
+
CREATE VIEW version_progress AS
|
|
222
|
+
SELECT v.id AS version_id,
|
|
223
|
+
v.name,
|
|
224
|
+
v.track,
|
|
225
|
+
v.status,
|
|
226
|
+
count(*) FILTER (WHERE t.status = 'shipped') AS shipped_count,
|
|
227
|
+
count(*) AS total_count,
|
|
228
|
+
COALESCE(sum(
|
|
229
|
+
CASE WHEN t.status = 'shipped' THEN 6 - COALESCE(t.priority, 5) ELSE 0 END
|
|
230
|
+
), 0)::bigint AS shipped_weight,
|
|
231
|
+
COALESCE(sum(6 - COALESCE(t.priority, 5)), 0)::bigint AS total_weight
|
|
232
|
+
FROM versions v
|
|
233
|
+
LEFT JOIN tasks t
|
|
234
|
+
ON t.version_id = v.id
|
|
235
|
+
AND (t.title IS NULL OR t.title NOT LIKE '\_\_smoke\_\_%' ESCAPE '\')
|
|
236
|
+
AND NOT EXISTS (
|
|
237
|
+
SELECT 1 FROM tasks child WHERE child.parent_task_id = t.id
|
|
238
|
+
)
|
|
239
|
+
GROUP BY v.id, v.name, v.track, v.status;
|
|
240
|
+
|
|
241
|
+
-- =========================================================================
|
|
242
|
+
-- 4. Seeds: achievements (8 fixed in V2)
|
|
243
|
+
-- =========================================================================
|
|
244
|
+
-- Bonuses: 1c/1c/2c/2c/5c/2c/2c/5c — total possible 20c per builder.
|
|
245
|
+
-- Adjustable later before bringing in another builder (per Lars).
|
|
246
|
+
|
|
247
|
+
INSERT INTO achievements (id, name, description, icon, credit_bonus, sort_order) VALUES
|
|
248
|
+
('first-ship', 'First Ship',
|
|
249
|
+
'Ship your first task.',
|
|
250
|
+
'📦', 1, 10),
|
|
251
|
+
('first-claim', 'First Claim',
|
|
252
|
+
'Claim your first task.',
|
|
253
|
+
'🪙', 1, 20),
|
|
254
|
+
('first-parallel-claim', 'First Parallel Claim',
|
|
255
|
+
'Hold two simultaneous claims; ship both successfully.',
|
|
256
|
+
'⚓', 2, 30),
|
|
257
|
+
('streak-3', 'Streak: 3 Nights',
|
|
258
|
+
'Ship a task in 3 consecutive local-time nights (≥15min, kind != cleanup).',
|
|
259
|
+
'🔥', 2, 40),
|
|
260
|
+
('streak-7', 'Streak: 7 Nights',
|
|
261
|
+
'Ship a task in 7 consecutive local-time nights (≥15min, kind != cleanup).',
|
|
262
|
+
'🌋', 5, 50),
|
|
263
|
+
('art-pipeline-shipper', 'Art Pipeline Shipper',
|
|
264
|
+
'Ship a task whose touches[] include the art/ pipeline.',
|
|
265
|
+
'🎨', 2, 60),
|
|
266
|
+
('pms-shipper', 'PMS Shipper',
|
|
267
|
+
'Ship a task whose touches[] include src/pms/ or scripts/pms/.',
|
|
268
|
+
'⚙️', 2, 70),
|
|
269
|
+
('breaking-the-100c-bar','Breaking the 100c Bar',
|
|
270
|
+
'Cross 100 total credits.',
|
|
271
|
+
'💯', 5, 80)
|
|
272
|
+
ON CONFLICT (id) DO UPDATE
|
|
273
|
+
SET name = EXCLUDED.name,
|
|
274
|
+
description = EXCLUDED.description,
|
|
275
|
+
icon = EXCLUDED.icon,
|
|
276
|
+
credit_bonus = EXCLUDED.credit_bonus,
|
|
277
|
+
sort_order = EXCLUDED.sort_order;
|
|
278
|
+
|
|
279
|
+
-- =========================================================================
|
|
280
|
+
-- 4b. Pre-seed PMS-V2 + PMS-V3 versions rows (FK dependency for §5 and
|
|
281
|
+
-- for migration 011's done_when backfill).
|
|
282
|
+
-- =========================================================================
|
|
283
|
+
-- 003_pms.sql seeds only V1 + PMS-V1. The §5 seed below FK-references
|
|
284
|
+
-- PMS-V2, and migration 011 expects to UPDATE rows for PMS-V2 and PMS-V3.
|
|
285
|
+
-- On production this works only because the rows were inserted manually
|
|
286
|
+
-- during V2 planning. On a from-scratch DB restore §5 FK-fails before
|
|
287
|
+
-- the chain can complete. Pre-seeding here closes that hole (idea #13).
|
|
288
|
+
--
|
|
289
|
+
-- done_when is left empty here; migration 011 fills it from the king
|
|
290
|
+
-- scope docs. ON CONFLICT DO NOTHING preserves whatever shape these rows
|
|
291
|
+
-- already have on production.
|
|
292
|
+
|
|
293
|
+
-- Instance-seed guard (task 1704 / ADR 0105): OTB internal versions — must not
|
|
294
|
+
-- seed onto a vanilla / non-owning DB. See scripts/migrate.sh (app.seed_instance_data).
|
|
295
|
+
DO $seed$ BEGIN IF current_setting('app.seed_instance_data', true) IS DISTINCT FROM 'off' THEN
|
|
296
|
+
INSERT INTO versions (id, name, track, status, scope_doc_path, started_at, done_when)
|
|
297
|
+
VALUES
|
|
298
|
+
('PMS-V2', 'PMS V2 — methodology overhaul + auto-logging + achievements', 'internal', 'building',
|
|
299
|
+
'limitations/pms-v2.md', '2026-05-10'::timestamptz, ''),
|
|
300
|
+
('PMS-V3', 'PMS V3 — planning', 'internal', 'planning',
|
|
301
|
+
NULL, '2026-05-10'::timestamptz, '')
|
|
302
|
+
ON CONFLICT (id) DO NOTHING;
|
|
303
|
+
END IF; END $seed$;
|
|
304
|
+
|
|
305
|
+
-- =========================================================================
|
|
306
|
+
-- 5. Seeds: PMS-V2 done-when criteria (mirrors limitations/pms-v2.md)
|
|
307
|
+
-- =========================================================================
|
|
308
|
+
|
|
309
|
+
-- Instance-seed guard (task 1704 / ADR 0105): OTB PMS-V2 scope-truth. FK-references
|
|
310
|
+
-- the PMS-V2 version guarded above, so this must skip on a vanilla DB too.
|
|
311
|
+
DO $seed$ BEGIN IF current_setting('app.seed_instance_data', true) IS DISTINCT FROM 'off' THEN
|
|
312
|
+
INSERT INTO done_when_criteria (version_id, criterion_id, criterion_md, sort_order) VALUES
|
|
313
|
+
('PMS-V2', 'web-ui',
|
|
314
|
+
'/builders themed read-only single-page web UI with copy-prompt-to-clipboard per task',
|
|
315
|
+
10),
|
|
316
|
+
('PMS-V2', 'prompter-optimizer',
|
|
317
|
+
'Full prompter optimizer: /builder-session with free-text + parallel-set + smart defaults; /builder-start enriched and drops cross-builder visibility',
|
|
318
|
+
20),
|
|
319
|
+
('PMS-V2', 'achievements',
|
|
320
|
+
'Achievement system (8 achievements, 20c bonus pool, top-10 paged badges, anti-gaming guards)',
|
|
321
|
+
30),
|
|
322
|
+
('PMS-V2', 'never-miss',
|
|
323
|
+
'Learnings + idea_inbox + task_kind: never miss a learning, every AI-generated task has a kind',
|
|
324
|
+
40),
|
|
325
|
+
('PMS-V2', 'auto-logging',
|
|
326
|
+
'Auto-logging: session pulse, stale-claim detection, incidental-work scanner, estimate-vs-actual reconciliation',
|
|
327
|
+
50),
|
|
328
|
+
('PMS-V2', 'auto-versioning',
|
|
329
|
+
'Auto-versioning: structured done-when criteria, gated close-flow (80% AND all criteria), auto-draft of next-version scope',
|
|
330
|
+
60),
|
|
331
|
+
('PMS-V2', 'single-source-claim',
|
|
332
|
+
'Single-source claim semantics carried through (LIMIT-1 fix from PMS-V1 holds)',
|
|
333
|
+
70)
|
|
334
|
+
ON CONFLICT (version_id, criterion_id) DO UPDATE
|
|
335
|
+
SET criterion_md = EXCLUDED.criterion_md,
|
|
336
|
+
sort_order = EXCLUDED.sort_order;
|
|
337
|
+
END IF; END $seed$;
|
|
338
|
+
|
|
339
|
+
-- =========================================================================
|
|
340
|
+
-- 6. Seeds: V1 done-when criteria (mirrors limitations/current-version.md)
|
|
341
|
+
-- =========================================================================
|
|
342
|
+
-- The V1 done-when (CLAUDE.md §9): "the experience supports the full
|
|
343
|
+
-- purchase loop: land in the world → walk to the vendor → buy a real
|
|
344
|
+
-- item → Hermeslines fulfills it." Decomposed into checkable criteria.
|
|
345
|
+
|
|
346
|
+
-- Instance-seed guard (task 1704 / ADR 0105): OTB V1 game scope-truth. FK-references
|
|
347
|
+
-- the V1 version guarded above, so this must skip on a vanilla DB too.
|
|
348
|
+
DO $seed$ BEGIN IF current_setting('app.seed_instance_data', true) IS DISTINCT FROM 'off' THEN
|
|
349
|
+
INSERT INTO done_when_criteria (version_id, criterion_id, criterion_md, sort_order) VALUES
|
|
350
|
+
('V1', 'world-land',
|
|
351
|
+
'Visitor lands in the persistent world from amazonprimea.com',
|
|
352
|
+
10),
|
|
353
|
+
('V1', 'walk-to-vendor',
|
|
354
|
+
'Visitor can walk to Hyperion at the shipping container with WASD',
|
|
355
|
+
20),
|
|
356
|
+
('V1', 'auth-magic-link',
|
|
357
|
+
'Visitor authenticates via Stripe-tied magic link before purchase',
|
|
358
|
+
30),
|
|
359
|
+
('V1', 'vendor-purchase',
|
|
360
|
+
'Vendor dialog supports real-product purchase via Stripe',
|
|
361
|
+
40),
|
|
362
|
+
('V1', 'hermeslines-fulfill',
|
|
363
|
+
'Order intake reaches Hermeslines fulfillment system (whatever the format)',
|
|
364
|
+
50),
|
|
365
|
+
('V1', 'order-confirmation',
|
|
366
|
+
'Visitor receives order confirmation in-world',
|
|
367
|
+
60)
|
|
368
|
+
ON CONFLICT (version_id, criterion_id) DO UPDATE
|
|
369
|
+
SET criterion_md = EXCLUDED.criterion_md,
|
|
370
|
+
sort_order = EXCLUDED.sort_order;
|
|
371
|
+
END IF; END $seed$;
|
|
372
|
+
|
|
373
|
+
-- =========================================================================
|
|
374
|
+
-- 7. Migration record
|
|
375
|
+
-- =========================================================================
|
|
376
|
+
|
|
377
|
+
INSERT INTO schema_migrations (version) VALUES ('006_pms_v2')
|
|
378
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
-- 007_pms_v2_hierarchy_trigger.sql — auto-ship parents when all children ship
|
|
2
|
+
--
|
|
3
|
+
-- Companion to F1 (006_pms_v2.sql) and C2 (src/pms/hierarchy.js).
|
|
4
|
+
--
|
|
5
|
+
-- When the last unshipped child of a parent flips to status='shipped',
|
|
6
|
+
-- the parent itself flips to 'shipped' atomically. parent.shipped_at is
|
|
7
|
+
-- set to MAX(child.shipped_at). parent.shipped_by is left NULL — there
|
|
8
|
+
-- is no single builder responsible for a parent that ships via rollup.
|
|
9
|
+
-- (Individual children retain their own shipped_by; credits accrue per
|
|
10
|
+
-- child as today.)
|
|
11
|
+
--
|
|
12
|
+
-- Idempotent: CREATE OR REPLACE FUNCTION + DROP TRIGGER IF EXISTS.
|
|
13
|
+
|
|
14
|
+
CREATE OR REPLACE FUNCTION fn_auto_ship_parent_on_children_shipped()
|
|
15
|
+
RETURNS TRIGGER AS $$
|
|
16
|
+
DECLARE
|
|
17
|
+
unshipped_count integer;
|
|
18
|
+
BEGIN
|
|
19
|
+
-- Defensive guards (the WHEN clause already enforces these, but keep
|
|
20
|
+
-- the function safe to call from any future trigger surface).
|
|
21
|
+
IF NEW.parent_task_id IS NULL THEN
|
|
22
|
+
RETURN NEW;
|
|
23
|
+
END IF;
|
|
24
|
+
IF NEW.status IS DISTINCT FROM 'shipped' THEN
|
|
25
|
+
RETURN NEW;
|
|
26
|
+
END IF;
|
|
27
|
+
|
|
28
|
+
-- Count siblings of NEW (children of NEW.parent_task_id) that aren't
|
|
29
|
+
-- yet shipped. NEW is already committed at AFTER-UPDATE time, so the
|
|
30
|
+
-- count reflects post-update reality. Zero ⇒ promote the parent.
|
|
31
|
+
SELECT count(*) INTO unshipped_count
|
|
32
|
+
FROM tasks
|
|
33
|
+
WHERE parent_task_id = NEW.parent_task_id
|
|
34
|
+
AND status <> 'shipped';
|
|
35
|
+
|
|
36
|
+
IF unshipped_count = 0 THEN
|
|
37
|
+
UPDATE tasks
|
|
38
|
+
SET status = 'shipped',
|
|
39
|
+
shipped_at = COALESCE(
|
|
40
|
+
(SELECT max(shipped_at) FROM tasks WHERE parent_task_id = NEW.parent_task_id),
|
|
41
|
+
now()
|
|
42
|
+
)
|
|
43
|
+
WHERE id = NEW.parent_task_id
|
|
44
|
+
AND status <> 'shipped';
|
|
45
|
+
END IF;
|
|
46
|
+
|
|
47
|
+
RETURN NEW;
|
|
48
|
+
END;
|
|
49
|
+
$$ LANGUAGE plpgsql;
|
|
50
|
+
|
|
51
|
+
DROP TRIGGER IF EXISTS trg_auto_ship_parent ON tasks;
|
|
52
|
+
CREATE TRIGGER trg_auto_ship_parent
|
|
53
|
+
AFTER UPDATE OF status ON tasks
|
|
54
|
+
FOR EACH ROW
|
|
55
|
+
WHEN (NEW.status = 'shipped' AND NEW.parent_task_id IS NOT NULL)
|
|
56
|
+
EXECUTE FUNCTION fn_auto_ship_parent_on_children_shipped();
|
|
57
|
+
|
|
58
|
+
INSERT INTO schema_migrations (version) VALUES ('007_pms_v2_hierarchy_trigger')
|
|
59
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
-- Pre-allocate migration numbers at claim time.
|
|
2
|
+
--
|
|
3
|
+
-- When two parallel builders both create a migration at "the next free number,"
|
|
4
|
+
-- they pick the same number. The fix: when a task's touches[] contains the
|
|
5
|
+
-- sentinel string 'migrations/' (the directory, no specific filename),
|
|
6
|
+
-- POST /claims atomically allocates the next number from this counter table
|
|
7
|
+
-- and stores it on the claim. The CLI surfaces the number to the builder, who
|
|
8
|
+
-- creates `migrations/<NNN>_*.sql` using that prefix.
|
|
9
|
+
--
|
|
10
|
+
-- Once allocated, a number stays attached to its claim even if the claim is
|
|
11
|
+
-- released without shipping. Sequential numbering is not required — gaps are
|
|
12
|
+
-- fine.
|
|
13
|
+
|
|
14
|
+
CREATE TABLE IF NOT EXISTS migration_counter (
|
|
15
|
+
id INTEGER PRIMARY KEY DEFAULT 1,
|
|
16
|
+
next_number INTEGER NOT NULL,
|
|
17
|
+
CHECK (id = 1)
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
-- Seed: highest existing migration on disk is 008 (this one).
|
|
21
|
+
-- Next allocation goes to 009.
|
|
22
|
+
INSERT INTO migration_counter (id, next_number)
|
|
23
|
+
VALUES (1, 9)
|
|
24
|
+
ON CONFLICT (id) DO NOTHING;
|
|
25
|
+
|
|
26
|
+
ALTER TABLE claims
|
|
27
|
+
ADD COLUMN IF NOT EXISTS reserved_migration_number INTEGER;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
-- Phase 2a: blockers as a first-class DB surface (replaces blockers/blockers.md
|
|
2
|
+
-- as the canonical source — the markdown becomes a frozen archive after the
|
|
3
|
+
-- one-time import).
|
|
4
|
+
--
|
|
5
|
+
-- Why: the task_blockers join table stored a blocker_ref (markdown anchor)
|
|
6
|
+
-- pointing at prose in blockers/blockers.md. When Lars resolved a blocker
|
|
7
|
+
-- (e.g., "GitHub OAuth credentials provided"), the only thing that updated
|
|
8
|
+
-- was the markdown — the linked tasks stayed in 'blocked' status until a
|
|
9
|
+
-- human remembered to flip them. This migration makes blockers a real row,
|
|
10
|
+
-- and a trigger automatically promotes blocked tasks to 'ready' the moment
|
|
11
|
+
-- the blocker is resolved.
|
|
12
|
+
--
|
|
13
|
+
-- Schema design follows the pattern of cost_log / learnings / idea_inbox:
|
|
14
|
+
-- (source, source_ref) UNIQUE for idempotent re-runs of the import script.
|
|
15
|
+
|
|
16
|
+
CREATE TABLE IF NOT EXISTS blockers (
|
|
17
|
+
id BIGSERIAL PRIMARY KEY,
|
|
18
|
+
title TEXT NOT NULL,
|
|
19
|
+
body_md TEXT NOT NULL DEFAULT '',
|
|
20
|
+
status TEXT NOT NULL DEFAULT 'open' CHECK (status IN ('open', 'resolved')),
|
|
21
|
+
created_at TIMESTAMPTZ NOT NULL DEFAULT now(),
|
|
22
|
+
resolved_at TIMESTAMPTZ,
|
|
23
|
+
resolved_by BIGINT REFERENCES builders(id),
|
|
24
|
+
resolution_note TEXT,
|
|
25
|
+
source TEXT, -- 'imported-markdown' | 'manual' | ...
|
|
26
|
+
source_ref TEXT
|
|
27
|
+
);
|
|
28
|
+
|
|
29
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uniq_blockers_source_ref
|
|
30
|
+
ON blockers (source, source_ref)
|
|
31
|
+
WHERE source IS NOT NULL AND source_ref IS NOT NULL;
|
|
32
|
+
|
|
33
|
+
CREATE INDEX IF NOT EXISTS idx_blockers_status ON blockers (status) WHERE status = 'open';
|
|
34
|
+
|
|
35
|
+
-- Add a structured link from task_blockers to the new blockers table.
|
|
36
|
+
-- The legacy blocker_ref TEXT column stays for backwards compatibility with
|
|
37
|
+
-- existing rows pointing at markdown anchors; new rows should use blocker_id.
|
|
38
|
+
ALTER TABLE task_blockers
|
|
39
|
+
ADD COLUMN IF NOT EXISTS blocker_id BIGINT REFERENCES blockers(id) ON DELETE CASCADE;
|
|
40
|
+
|
|
41
|
+
CREATE INDEX IF NOT EXISTS idx_task_blockers_blocker_id
|
|
42
|
+
ON task_blockers (blocker_id) WHERE blocker_id IS NOT NULL;
|
|
43
|
+
|
|
44
|
+
-- Trigger: when a blocker flips to 'resolved', auto-promote every task
|
|
45
|
+
-- linked via task_blockers from 'blocked' → 'ready'. Captures resolved_at if
|
|
46
|
+
-- not already set so /me, /tasks, etc. all see the same timestamp.
|
|
47
|
+
CREATE OR REPLACE FUNCTION trg_promote_tasks_on_blocker_resolve()
|
|
48
|
+
RETURNS TRIGGER AS $$
|
|
49
|
+
BEGIN
|
|
50
|
+
IF NEW.status = 'resolved' AND (OLD.status IS NULL OR OLD.status <> 'resolved') THEN
|
|
51
|
+
IF NEW.resolved_at IS NULL THEN
|
|
52
|
+
NEW.resolved_at := now();
|
|
53
|
+
END IF;
|
|
54
|
+
|
|
55
|
+
UPDATE tasks
|
|
56
|
+
SET status = 'ready', updated_at = now()
|
|
57
|
+
WHERE id IN (SELECT task_id FROM task_blockers WHERE blocker_id = NEW.id)
|
|
58
|
+
AND status = 'blocked';
|
|
59
|
+
END IF;
|
|
60
|
+
RETURN NEW;
|
|
61
|
+
END;
|
|
62
|
+
$$ LANGUAGE plpgsql;
|
|
63
|
+
|
|
64
|
+
DROP TRIGGER IF EXISTS promote_tasks_on_blocker_resolve ON blockers;
|
|
65
|
+
CREATE TRIGGER promote_tasks_on_blocker_resolve
|
|
66
|
+
BEFORE UPDATE OF status ON blockers
|
|
67
|
+
FOR EACH ROW
|
|
68
|
+
EXECUTE FUNCTION trg_promote_tasks_on_blocker_resolve();
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
-- Uptime monitoring: healthcheck results for each tracked service.
|
|
2
|
+
--
|
|
3
|
+
-- The Node process polls internal endpoints on a 60-second interval and
|
|
4
|
+
-- inserts a row per check. The public /api/pms/public/uptime endpoint
|
|
5
|
+
-- reads this table directly — no external SaaS required.
|
|
6
|
+
--
|
|
7
|
+
-- service names are fixed strings declared in the poller:
|
|
8
|
+
-- game_server, api, database
|
|
9
|
+
|
|
10
|
+
BEGIN;
|
|
11
|
+
|
|
12
|
+
CREATE TABLE IF NOT EXISTS uptime_checks (
|
|
13
|
+
id bigserial PRIMARY KEY,
|
|
14
|
+
service text NOT NULL,
|
|
15
|
+
status text NOT NULL CHECK (status IN ('up', 'down', 'degraded')),
|
|
16
|
+
latency_ms integer,
|
|
17
|
+
checked_at timestamptz NOT NULL DEFAULT now()
|
|
18
|
+
);
|
|
19
|
+
|
|
20
|
+
CREATE INDEX IF NOT EXISTS uptime_checks_service_checked_at
|
|
21
|
+
ON uptime_checks (service, checked_at DESC);
|
|
22
|
+
|
|
23
|
+
-- Keep only 90 days of history. Applied by the poller after each insert,
|
|
24
|
+
-- not as a trigger (cheap enough at 1 call/min).
|
|
25
|
+
-- No cron required — prune happens inline.
|
|
26
|
+
|
|
27
|
+
INSERT INTO schema_migrations (version) VALUES ('010_uptime') ON CONFLICT DO NOTHING;
|
|
28
|
+
|
|
29
|
+
COMMIT;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
-- Backfill versions.done_when for PMS-V2 and PMS-V3.
|
|
2
|
+
--
|
|
3
|
+
-- V1 and PMS-V1 already have done_when populated. PMS-V2 and PMS-V3 were
|
|
4
|
+
-- declared without paint-the-picture copy, leaving the status page rows
|
|
5
|
+
-- without a senate-voice description of what each version IS. The public
|
|
6
|
+
-- status page (status.amazonprimea.com) now renders versions.done_when
|
|
7
|
+
-- under each version block (task #119); this migration provides the copy.
|
|
8
|
+
--
|
|
9
|
+
-- Idempotent: only fills where done_when IS NULL or empty, so re-runs and
|
|
10
|
+
-- manual edits are preserved.
|
|
11
|
+
|
|
12
|
+
UPDATE versions
|
|
13
|
+
SET done_when = $body$When this is finished, the citizens building Amazonprimea will keep their works on a themed ledger of their own — naming sessions, claiming tasks in batches, earning laurels for milestones, and seeing each version's scope painted in plain words.$body$
|
|
14
|
+
WHERE id = 'PMS-V2'
|
|
15
|
+
AND (done_when IS NULL OR done_when = '');
|
|
16
|
+
|
|
17
|
+
UPDATE versions
|
|
18
|
+
SET done_when = $body$When this is finished, multiple builders will work the city in parallel — each with their own seal, their own shelf of credits, and their own lane of stones to set.$body$
|
|
19
|
+
WHERE id = 'PMS-V3'
|
|
20
|
+
AND (done_when IS NULL OR done_when = '');
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
-- Phase 5: expand task lifecycle from one terminal state to three.
|
|
2
|
+
--
|
|
3
|
+
-- Before: active → shipped (one /builder-ship call did everything)
|
|
4
|
+
-- After: active → completed → confirmed → shipped
|
|
5
|
+
--
|
|
6
|
+
-- completed — builder declared the work done; on their local branch only;
|
|
7
|
+
-- PMS recorded the ship.
|
|
8
|
+
-- confirmed — automated verification passed (touches[] scanner clean +
|
|
9
|
+
-- smoke tests green); credits land here. Branch may or may not
|
|
10
|
+
-- be on origin yet.
|
|
11
|
+
-- shipped — branch merged to main + deployed; visible on production.
|
|
12
|
+
--
|
|
13
|
+
-- Decisions (per Lars 2026-05-10):
|
|
14
|
+
-- 1. Credits land on confirmed (not completed, not shipped).
|
|
15
|
+
-- 2. completed → confirmed is automatic when scanner+smoke pass.
|
|
16
|
+
-- 3. confirmed → shipped runs /merge-mode immediately (auto-merge attempted;
|
|
17
|
+
-- if conflicts, task stays at confirmed for manual /merge-mode resolution).
|
|
18
|
+
--
|
|
19
|
+
-- Existing tasks at status='shipped' stay shipped (they are already in prod).
|
|
20
|
+
|
|
21
|
+
-- 1. Loosen the tasks.status CHECK constraint to admit the two new states.
|
|
22
|
+
ALTER TABLE tasks DROP CONSTRAINT IF EXISTS tasks_status_check;
|
|
23
|
+
|
|
24
|
+
ALTER TABLE tasks ADD CONSTRAINT tasks_status_check
|
|
25
|
+
CHECK (status IN (
|
|
26
|
+
'backlog', 'ready', 'active', 'blocked',
|
|
27
|
+
'completed', 'confirmed',
|
|
28
|
+
'shipped', 'abandoned'
|
|
29
|
+
));
|
|
30
|
+
|
|
31
|
+
-- 2. Rebuild version_progress to count completed + confirmed + shipped as
|
|
32
|
+
-- "done" (any state where the builder has declared the work complete).
|
|
33
|
+
-- Rationale: from the project's progress-bar perspective, work that is
|
|
34
|
+
-- completed-but-not-yet-merged shouldn't show up as "in flight" — it IS done
|
|
35
|
+
-- from the builder's standpoint. The shipped/completed/confirmed split is
|
|
36
|
+
-- visible on the public dashboard via separate counts (added in a follow-up
|
|
37
|
+
-- view or rendered client-side).
|
|
38
|
+
DROP VIEW IF EXISTS version_progress;
|
|
39
|
+
CREATE VIEW version_progress AS
|
|
40
|
+
SELECT v.id AS version_id,
|
|
41
|
+
v.name,
|
|
42
|
+
v.track,
|
|
43
|
+
v.status,
|
|
44
|
+
count(*) FILTER (
|
|
45
|
+
WHERE t.status IN ('completed', 'confirmed', 'shipped')
|
|
46
|
+
AND t.title NOT LIKE '\_\_smoke\_\_%' ESCAPE '\'
|
|
47
|
+
AND NOT EXISTS (SELECT 1 FROM tasks c WHERE c.parent_task_id = t.id)
|
|
48
|
+
) AS shipped_count,
|
|
49
|
+
count(*) FILTER (
|
|
50
|
+
WHERE t.title NOT LIKE '\_\_smoke\_\_%' ESCAPE '\'
|
|
51
|
+
AND NOT EXISTS (SELECT 1 FROM tasks c WHERE c.parent_task_id = t.id)
|
|
52
|
+
) AS total_count,
|
|
53
|
+
COALESCE(SUM(CASE
|
|
54
|
+
WHEN t.status IN ('completed', 'confirmed', 'shipped')
|
|
55
|
+
AND t.title NOT LIKE '\_\_smoke\_\_%' ESCAPE '\'
|
|
56
|
+
AND NOT EXISTS (SELECT 1 FROM tasks c WHERE c.parent_task_id = t.id)
|
|
57
|
+
THEN (6 - COALESCE(t.priority, 5))
|
|
58
|
+
ELSE 0 END), 0) AS shipped_weight,
|
|
59
|
+
COALESCE(SUM(CASE
|
|
60
|
+
WHEN t.title NOT LIKE '\_\_smoke\_\_%' ESCAPE '\'
|
|
61
|
+
AND NOT EXISTS (SELECT 1 FROM tasks c WHERE c.parent_task_id = t.id)
|
|
62
|
+
THEN (6 - COALESCE(t.priority, 5))
|
|
63
|
+
ELSE 0 END), 0) AS total_weight
|
|
64
|
+
FROM versions v
|
|
65
|
+
LEFT JOIN tasks t ON t.version_id = v.id
|
|
66
|
+
GROUP BY v.id, v.name, v.track, v.status;
|
|
67
|
+
|
|
68
|
+
-- 3. Companion view: lifecycle_breakdown — separate counts per state so the
|
|
69
|
+
-- public dashboard can render an honest "shipped vs in-flight" panel.
|
|
70
|
+
CREATE OR REPLACE VIEW version_lifecycle_breakdown AS
|
|
71
|
+
SELECT v.id AS version_id,
|
|
72
|
+
v.name,
|
|
73
|
+
v.track,
|
|
74
|
+
count(*) FILTER (WHERE t.status = 'completed'
|
|
75
|
+
AND t.title NOT LIKE '\_\_smoke\_\_%' ESCAPE '\') AS completed_count,
|
|
76
|
+
count(*) FILTER (WHERE t.status = 'confirmed'
|
|
77
|
+
AND t.title NOT LIKE '\_\_smoke\_\_%' ESCAPE '\') AS confirmed_count,
|
|
78
|
+
count(*) FILTER (WHERE t.status = 'shipped'
|
|
79
|
+
AND t.title NOT LIKE '\_\_smoke\_\_%' ESCAPE '\') AS shipped_count
|
|
80
|
+
FROM versions v
|
|
81
|
+
LEFT JOIN tasks t ON t.version_id = v.id
|
|
82
|
+
GROUP BY v.id, v.name, v.track;
|