@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,56 @@
|
|
|
1
|
+
-- 032_repo_health_snapshots.sql — measurement substrate for repo cleanliness (V3.R91 / #352).
|
|
2
|
+
--
|
|
3
|
+
-- Layer 0 (SHARED SUBSTRATE) of the code-simplification plan. One table that
|
|
4
|
+
-- `scripts/gds/repo-metrics.js` upserts a daily snapshot into, and that the
|
|
5
|
+
-- new /api/gds/public/repo-health read-surface reads back for the status page.
|
|
6
|
+
--
|
|
7
|
+
-- "You can't manage what you don't measure." This is the single cheap
|
|
8
|
+
-- measurement layer that Layers 1 (PREVENT, grader economy lens — #353) and
|
|
9
|
+
-- 2 (REWARD — #354) and the future janitor (Layer 3) all build on top of.
|
|
10
|
+
--
|
|
11
|
+
-- Shape (one row per calendar date, server timezone):
|
|
12
|
+
-- snapshot_date — date key. UNIQUE so reruns the same day upsert, never
|
|
13
|
+
-- duplicate (the idempotency requirement).
|
|
14
|
+
-- total_loc — total tracked JS/MJS line count across the project.
|
|
15
|
+
-- loc_by_dir — jsonb { "src/": n, "public/game/": n, ... } current
|
|
16
|
+
-- line counts per watched directory.
|
|
17
|
+
-- largest_files — jsonb array [{ path, lines }] top-N by size.
|
|
18
|
+
-- dead_exports — int | NULL. knip unused-export count. NULL when knip is
|
|
19
|
+
-- unavailable/unconfigured (degrades gracefully — the rest
|
|
20
|
+
-- of the snapshot still records).
|
|
21
|
+
-- dead_files — int | NULL. knip unused-file count (same NULL semantics).
|
|
22
|
+
-- stale_branches — int. count of unmerged claude/* branches.
|
|
23
|
+
-- max_branch_age_days — numeric | NULL. age of the oldest unmerged branch.
|
|
24
|
+
-- confirmed_unshipped — int. tasks at status='confirmed' (verified, not yet
|
|
25
|
+
-- on main) — the merge-mode backlog made visible.
|
|
26
|
+
-- raw — jsonb. the full snapshot blob the CLI emitted, for any
|
|
27
|
+
-- future field we surface without a migration.
|
|
28
|
+
-- created_at — when this row was last written.
|
|
29
|
+
--
|
|
30
|
+
-- Idempotent: CREATE TABLE IF NOT EXISTS; the CLI upserts ON CONFLICT
|
|
31
|
+
-- (snapshot_date). Re-running this migration is a no-op.
|
|
32
|
+
|
|
33
|
+
CREATE TABLE IF NOT EXISTS repo_health_snapshots (
|
|
34
|
+
id bigserial PRIMARY KEY,
|
|
35
|
+
snapshot_date date NOT NULL UNIQUE,
|
|
36
|
+
total_loc integer,
|
|
37
|
+
loc_by_dir jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
38
|
+
largest_files jsonb NOT NULL DEFAULT '[]'::jsonb,
|
|
39
|
+
dead_exports integer,
|
|
40
|
+
dead_files integer,
|
|
41
|
+
stale_branches integer NOT NULL DEFAULT 0,
|
|
42
|
+
max_branch_age_days numeric,
|
|
43
|
+
confirmed_unshipped integer NOT NULL DEFAULT 0,
|
|
44
|
+
raw jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
45
|
+
created_at timestamptz NOT NULL DEFAULT now()
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
-- Trend queries read the most recent N rows by date.
|
|
49
|
+
CREATE INDEX IF NOT EXISTS idx_repo_health_date ON repo_health_snapshots (snapshot_date DESC);
|
|
50
|
+
|
|
51
|
+
-- Bump the migration counter past 032 so the next claim that includes
|
|
52
|
+
-- 'migrations/' allocates 033.
|
|
53
|
+
UPDATE migration_counter SET next_number = GREATEST(next_number, 33) WHERE id = 1;
|
|
54
|
+
|
|
55
|
+
INSERT INTO schema_migrations (version) VALUES ('032_repo_health_snapshots')
|
|
56
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
-- 033_audit_log.sql — append-only audit stream for privileged writes (V3.R35 / #256).
|
|
2
|
+
--
|
|
3
|
+
-- Today most state changes are recoverable from individual tables (credit_log,
|
|
4
|
+
-- task updates, claims, etc.) but there is no single "who did what when"
|
|
5
|
+
-- stream. With multiple builders authenticating against the same server we
|
|
6
|
+
-- need an append-only ledger so:
|
|
7
|
+
-- - the R67 Archon security view can show "all writes by builder X" in one
|
|
8
|
+
-- query without scanning a dozen feature tables;
|
|
9
|
+
-- - post-incident forensics has a single chronological record;
|
|
10
|
+
-- - a future periodic auditor (R45) can replay write history.
|
|
11
|
+
--
|
|
12
|
+
-- Captured: every AUTHENTICATED WRITE (POST/PATCH/PUT/DELETE) request the
|
|
13
|
+
-- /api/gds router serves. Reads (GETs) are NOT logged — volume + signal/noise.
|
|
14
|
+
--
|
|
15
|
+
-- Redaction: the writing middleware (src/bongos/middleware/audit.js) walks the
|
|
16
|
+
-- parsed body and replaces any value whose KEY name contains 'token',
|
|
17
|
+
-- 'password', 'key', or 'secret' (case-insensitive) with the literal string
|
|
18
|
+
-- '<redacted>'. Recurses into nested objects + arrays. The redacted body is
|
|
19
|
+
-- what lands here.
|
|
20
|
+
--
|
|
21
|
+
-- Retention: indefinite for V3. A retention sweep is explicitly a V4 concern.
|
|
22
|
+
-- (We don't index for deletion; the v3 plan is "we'll deal with it when the
|
|
23
|
+
-- table actually gets big.")
|
|
24
|
+
--
|
|
25
|
+
-- Idempotent: CREATE TABLE IF NOT EXISTS + ON CONFLICT DO NOTHING migration row.
|
|
26
|
+
|
|
27
|
+
CREATE TABLE IF NOT EXISTS audit_log (
|
|
28
|
+
id bigserial PRIMARY KEY,
|
|
29
|
+
-- Who made the request. NULL would mean "unauthenticated", but the middleware
|
|
30
|
+
-- only fires for authenticated writes, so this column is NOT NULL in practice.
|
|
31
|
+
-- We still FK to builders so a stray entry can never reference a ghost.
|
|
32
|
+
builder_id bigint NOT NULL REFERENCES builders(id),
|
|
33
|
+
-- The matched route path (e.g. '/tasks/:id', not '/tasks/256') so we can
|
|
34
|
+
-- group by endpoint. Falls back to req.path if the matched route isn't
|
|
35
|
+
-- available (some sub-router edge cases).
|
|
36
|
+
route text NOT NULL,
|
|
37
|
+
method text NOT NULL CHECK (method IN ('POST','PATCH','PUT','DELETE')),
|
|
38
|
+
-- Parsed JSON request body, with sensitive keys redacted. Stored as jsonb so
|
|
39
|
+
-- we can later run ad-hoc queries against specific fields. Defaults to '{}'.
|
|
40
|
+
request_body_redacted jsonb NOT NULL DEFAULT '{}'::jsonb,
|
|
41
|
+
-- The HTTP status the response went out with. We log AFTER 'finish' so this
|
|
42
|
+
-- is the real status the client saw.
|
|
43
|
+
response_status integer NOT NULL,
|
|
44
|
+
-- Client IP. Honors the express 'trust proxy' setting (set in server.js) so
|
|
45
|
+
-- we record the real client through the Cloudflare → Caddy → Node chain.
|
|
46
|
+
ip text,
|
|
47
|
+
-- User-Agent header, free text.
|
|
48
|
+
user_agent text,
|
|
49
|
+
recorded_at timestamptz NOT NULL DEFAULT now()
|
|
50
|
+
);
|
|
51
|
+
|
|
52
|
+
-- Forensics queries are almost always "what did builder X do" or "everything
|
|
53
|
+
-- in the last N hours sorted newest-first". Index both.
|
|
54
|
+
CREATE INDEX IF NOT EXISTS idx_audit_log_builder ON audit_log (builder_id, recorded_at DESC);
|
|
55
|
+
CREATE INDEX IF NOT EXISTS idx_audit_log_recorded_at ON audit_log (recorded_at DESC);
|
|
56
|
+
-- "Who's hitting this route" is the third common shape.
|
|
57
|
+
CREATE INDEX IF NOT EXISTS idx_audit_log_route ON audit_log (route, recorded_at DESC);
|
|
58
|
+
|
|
59
|
+
-- Bump the migration counter past 033 so the next claim that includes
|
|
60
|
+
-- 'migrations/' allocates 034.
|
|
61
|
+
UPDATE migration_counter SET next_number = GREATEST(next_number, 34) WHERE id = 1;
|
|
62
|
+
|
|
63
|
+
INSERT INTO schema_migrations (version) VALUES ('033_audit_log')
|
|
64
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
-- 034_lifecycle_breakdown_leaf_only.sql — fix version_lifecycle_breakdown
|
|
2
|
+
-- double-count of parent + children (V3.R23 / #243).
|
|
3
|
+
--
|
|
4
|
+
-- Background: migration 012 created version_lifecycle_breakdown to give the
|
|
5
|
+
-- public dashboard a per-state breakdown (completed / confirmed / shipped) per
|
|
6
|
+
-- version. Unlike its sibling view version_progress — which was rebuilt in
|
|
7
|
+
-- 006_pms_v2 (and tweaked in 012 and 017) to count ONLY LEAF TASKS — the
|
|
8
|
+
-- lifecycle breakdown counts EVERY task row. The result: a parent task with 3
|
|
9
|
+
-- shipped children inflates "shipped_count" by 4 (the parent's own row + each
|
|
10
|
+
-- child's row), which distorts the leaderboard and the version-progress card
|
|
11
|
+
-- on the status page.
|
|
12
|
+
--
|
|
13
|
+
-- Fix: replace version_lifecycle_breakdown with the same leaf predicate
|
|
14
|
+
-- version_progress uses —
|
|
15
|
+
-- NOT EXISTS (SELECT 1 FROM tasks c WHERE c.parent_task_id = t.id)
|
|
16
|
+
-- — so only rows that have no children contribute. Parents become invisible
|
|
17
|
+
-- to the rollup; their state is reflected by their children, which is the
|
|
18
|
+
-- correct semantics (a parent is shipped when all its children are shipped,
|
|
19
|
+
-- but the leaderboard cares about leaf work).
|
|
20
|
+
--
|
|
21
|
+
-- The column list is unchanged from migration 012 (version_id, name, track,
|
|
22
|
+
-- completed_count, confirmed_count, shipped_count). Postgres rejects
|
|
23
|
+
-- CREATE OR REPLACE VIEW when a column name or order changes; even though
|
|
24
|
+
-- nothing changes here, the established safe pattern in this repo (see
|
|
25
|
+
-- migration 017's comment) is DROP + CREATE for any view edit. Following it.
|
|
26
|
+
--
|
|
27
|
+
-- Forward-compatibility note: this view does NOT filter out abandoned or
|
|
28
|
+
-- __smoke__ tasks beyond what migration 012 did — those are kept where they
|
|
29
|
+
-- were so the per-state numerator stays honest (e.g. completed_count is "leaf
|
|
30
|
+
-- tasks currently at status=completed", which by definition can't be
|
|
31
|
+
-- abandoned). The __smoke__ exclusion already in 012 stays.
|
|
32
|
+
|
|
33
|
+
DROP VIEW IF EXISTS version_lifecycle_breakdown;
|
|
34
|
+
CREATE VIEW version_lifecycle_breakdown AS
|
|
35
|
+
SELECT v.id AS version_id,
|
|
36
|
+
v.name,
|
|
37
|
+
v.track,
|
|
38
|
+
count(*) FILTER (
|
|
39
|
+
WHERE t.status = 'completed'
|
|
40
|
+
AND t.title NOT LIKE '\_\_smoke\_\_%' ESCAPE '\'
|
|
41
|
+
AND NOT EXISTS (SELECT 1 FROM tasks c WHERE c.parent_task_id = t.id)
|
|
42
|
+
) AS completed_count,
|
|
43
|
+
count(*) FILTER (
|
|
44
|
+
WHERE t.status = 'confirmed'
|
|
45
|
+
AND t.title NOT LIKE '\_\_smoke\_\_%' ESCAPE '\'
|
|
46
|
+
AND NOT EXISTS (SELECT 1 FROM tasks c WHERE c.parent_task_id = t.id)
|
|
47
|
+
) AS confirmed_count,
|
|
48
|
+
count(*) FILTER (
|
|
49
|
+
WHERE t.status = 'shipped'
|
|
50
|
+
AND t.title NOT LIKE '\_\_smoke\_\_%' ESCAPE '\'
|
|
51
|
+
AND NOT EXISTS (SELECT 1 FROM tasks c WHERE c.parent_task_id = t.id)
|
|
52
|
+
) AS shipped_count
|
|
53
|
+
FROM versions v
|
|
54
|
+
LEFT JOIN tasks t ON t.version_id = v.id
|
|
55
|
+
GROUP BY v.id, v.name, v.track;
|
|
56
|
+
|
|
57
|
+
-- Bump the migration counter past 034 so the next claim that includes
|
|
58
|
+
-- 'migrations/' allocates 035.
|
|
59
|
+
UPDATE migration_counter SET next_number = GREATEST(next_number, 35) WHERE id = 1;
|
|
60
|
+
|
|
61
|
+
INSERT INTO schema_migrations (version) VALUES ('034_lifecycle_breakdown_leaf_only')
|
|
62
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
-- 035_auth_token_hygiene.sql
|
|
2
|
+
--
|
|
3
|
+
-- V3.R38 / task #259 — short-lived auth sessions with refresh-on-use, plus
|
|
4
|
+
-- Archon-only revocation endpoints. The SCHEMA side is small: builder_sessions
|
|
5
|
+
-- already has the columns we need (expires_at, last_used_at, revoked_at since
|
|
6
|
+
-- 003_pms.sql). What this migration does is:
|
|
7
|
+
--
|
|
8
|
+
-- 1. BACKFILL existing rows' expires_at with a GENEROUS 24-hour grace runway
|
|
9
|
+
-- from migration time. This is intentional: the live autonomous overnight
|
|
10
|
+
-- supervisor (and any builder mid-flow) holds a long-lived CLI token. If
|
|
11
|
+
-- we retroactively expired it, the very session running this migration
|
|
12
|
+
-- would die. The 24h grace gives every active session a window to either
|
|
13
|
+
-- (a) hit a route, refresh-on-use, and roll forward into the new 1h TTL
|
|
14
|
+
-- regime, or (b) sit idle and expire naturally after 24h.
|
|
15
|
+
--
|
|
16
|
+
-- Formula: expires_at = GREATEST(NOW() + INTERVAL '24 hours',
|
|
17
|
+
-- last_used_at + INTERVAL '24 hours').
|
|
18
|
+
--
|
|
19
|
+
-- Worked example: last_used_at = NOW() - 1h → new expires_at = NOW() + 24h.
|
|
20
|
+
-- Worked example: last_used_at = NOW() + 5m (clock skew) → new expires_at
|
|
21
|
+
-- = (NOW()+5m) + 24h ≈ NOW() + 24h05m. Always future.
|
|
22
|
+
--
|
|
23
|
+
-- Worked example: existing expires_at was NULL (the CLI-never-expires
|
|
24
|
+
-- default from 003_pms.sql) → backfilled to a future
|
|
25
|
+
-- timestamp; refresh-on-use will keep it rolling.
|
|
26
|
+
--
|
|
27
|
+
-- 2. Add an index on (builder_id, revoked_at) so revoke-all-for-builder is
|
|
28
|
+
-- cheap (touches only rows for that builder, filters out already-revoked).
|
|
29
|
+
--
|
|
30
|
+
-- The 1-HOUR TTL itself is enforced in code (src/bongos/db.js): createSession
|
|
31
|
+
-- defaults expiresAt to NOW()+1h, and lookupSession bumps last_used_at AND
|
|
32
|
+
-- expires_at = NOW()+1h on every authenticated request. We do NOT enforce the
|
|
33
|
+
-- 1h cap at the SQL level — that would risk the migration retroactively
|
|
34
|
+
-- punching existing sessions, and the code-level enforcement is sufficient for
|
|
35
|
+
-- C7 (rank-change-near-instant: a demoted builder's tokens are revoked-all
|
|
36
|
+
-- explicitly, not waited-out via TTL).
|
|
37
|
+
--
|
|
38
|
+
-- Idempotent: safe to re-run. The UPDATE only touches rows where the formula
|
|
39
|
+
-- would push expires_at FORWARD — it never shortens an existing future expiry.
|
|
40
|
+
|
|
41
|
+
BEGIN;
|
|
42
|
+
|
|
43
|
+
-- 1. Backfill: every row where the current expires_at is null OR earlier than
|
|
44
|
+
-- the grace window gets pushed out. Never shortens.
|
|
45
|
+
UPDATE builder_sessions
|
|
46
|
+
SET expires_at = GREATEST(
|
|
47
|
+
NOW() + INTERVAL '24 hours',
|
|
48
|
+
last_used_at + INTERVAL '24 hours'
|
|
49
|
+
)
|
|
50
|
+
WHERE revoked_at IS NULL
|
|
51
|
+
AND (
|
|
52
|
+
expires_at IS NULL
|
|
53
|
+
OR expires_at < GREATEST(
|
|
54
|
+
NOW() + INTERVAL '24 hours',
|
|
55
|
+
last_used_at + INTERVAL '24 hours'
|
|
56
|
+
)
|
|
57
|
+
);
|
|
58
|
+
|
|
59
|
+
-- 2. Helpful index for revoke-all-for-builder (and for filtering active
|
|
60
|
+
-- sessions in admin reads). Already-revoked rows are skipped by the partial
|
|
61
|
+
-- predicate so revoke-all only touches the relevant rows.
|
|
62
|
+
CREATE INDEX IF NOT EXISTS idx_builder_sessions_builder_active
|
|
63
|
+
ON builder_sessions (builder_id)
|
|
64
|
+
WHERE revoked_at IS NULL;
|
|
65
|
+
|
|
66
|
+
COMMIT;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
-- 037_builder_skill_model_prefs.sql — per-builder model preferences per skill
|
|
2
|
+
-- (V3.R85 / #304).
|
|
3
|
+
--
|
|
4
|
+
-- One column on `builders`, jsonb, default '{}'. Each entry maps a skill name
|
|
5
|
+
-- (the directory under .claude/skills/ — e.g. 'planning-session',
|
|
6
|
+
-- 'idea-triage', 'builder-claim') to a model preference token:
|
|
7
|
+
--
|
|
8
|
+
-- 'opus' — full-strength judgment, default for heavy-judgment skills
|
|
9
|
+
-- 'sonnet' — middle tier, when judgment is needed but cost matters
|
|
10
|
+
-- 'haiku' — light judgment, for nearly-mechanical skills
|
|
11
|
+
-- 'script' — no LLM at all; the skill runs as a pure script invocation
|
|
12
|
+
-- (used to record an intentional "no judgment needed here")
|
|
13
|
+
--
|
|
14
|
+
-- We keep this as a single jsonb column on `builders` rather than a separate
|
|
15
|
+
-- `builder_skill_prefs` table because:
|
|
16
|
+
-- - It's per-builder personalized config, not analytics. The natural read
|
|
17
|
+
-- path is "what does THIS builder prefer for skill X" — one row by
|
|
18
|
+
-- primary key. A table would force a join on every skill invocation.
|
|
19
|
+
-- - The shape is sparse and irregular (builders only override skills they
|
|
20
|
+
-- care about; defaults handle the rest). jsonb is the right shape.
|
|
21
|
+
-- - Migrations to add a new skill don't need a backfill — a missing key
|
|
22
|
+
-- just falls back to the system default, which is computed in
|
|
23
|
+
-- src/bongos/skill-prefs.js.
|
|
24
|
+
-- - V4 will retire the per-skill defaults in favor of per-skill-kind
|
|
25
|
+
-- defaults (idea #30); having all prefs in one jsonb makes that
|
|
26
|
+
-- reshape one schema-free rewrite of the helper, not a table migration.
|
|
27
|
+
--
|
|
28
|
+
-- Validation: the API (PATCH /api/gds/me/skill-prefs) enforces the four
|
|
29
|
+
-- allowed values + a skill-name allowlist. We deliberately do NOT enforce
|
|
30
|
+
-- either as a Postgres CHECK because the allowed skills change as new ones
|
|
31
|
+
-- ship — a CHECK would force a code+schema coordinated change every time.
|
|
32
|
+
--
|
|
33
|
+
-- Idempotent: safe to re-run.
|
|
34
|
+
|
|
35
|
+
ALTER TABLE builders
|
|
36
|
+
ADD COLUMN IF NOT EXISTS skill_model_prefs jsonb NOT NULL DEFAULT '{}'::jsonb;
|
|
37
|
+
|
|
38
|
+
-- Bump the migration counter past 037 so the next claim that includes
|
|
39
|
+
-- 'migrations/' allocates 038. (Counter was pre-reserved at claim time +
|
|
40
|
+
-- bumped by hand to 037; this guarantees future allocs see >= 038.)
|
|
41
|
+
UPDATE migration_counter SET next_number = GREATEST(next_number, 38) WHERE id = 1;
|
|
42
|
+
|
|
43
|
+
INSERT INTO schema_migrations (version) VALUES ('037_builder_skill_model_prefs')
|
|
44
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
-- 038_task_override_requests.sql — V3.R74 (#293).
|
|
2
|
+
--
|
|
3
|
+
-- When the subagent grader rejects a ship (functional_fidelity or code_quality
|
|
4
|
+
-- below threshold, or confidence too low), the task stays at 'completed' — no
|
|
5
|
+
-- credits, no auto-merge. Most of the time the grader is right; sometimes it's
|
|
6
|
+
-- wrong (false negative on diff shape, scoring drift, mis-read intent). The
|
|
7
|
+
-- builder needs a path to ask an Archon to override the failed grade.
|
|
8
|
+
--
|
|
9
|
+
-- Today the only override path is POST /tasks/:id/confirm — but that's
|
|
10
|
+
-- Archon-only by route guard, so a Metic stuck on a bad grade has nothing
|
|
11
|
+
-- between them and "ping Lars in chat." This table is the request queue.
|
|
12
|
+
--
|
|
13
|
+
-- Lifecycle: open → approved | denied (terminal; row is the audit trail).
|
|
14
|
+
-- On 'approved', the same transaction flips the task to confirmed and pays
|
|
15
|
+
-- out credits via the existing confirmTask path. The override decision row
|
|
16
|
+
-- captures who approved and why.
|
|
17
|
+
--
|
|
18
|
+
-- Per-task uniqueness: only ONE open request at a time per task. Once decided,
|
|
19
|
+
-- the row stays for forensics but a new request can be opened (e.g. the task
|
|
20
|
+
-- was re-graded and failed again).
|
|
21
|
+
|
|
22
|
+
CREATE TABLE IF NOT EXISTS task_override_requests (
|
|
23
|
+
id bigserial PRIMARY KEY,
|
|
24
|
+
task_id bigint NOT NULL REFERENCES tasks(id),
|
|
25
|
+
requested_by_builder_id bigint NOT NULL REFERENCES builders(id),
|
|
26
|
+
rationale text NOT NULL,
|
|
27
|
+
status text NOT NULL DEFAULT 'open'
|
|
28
|
+
CHECK (status IN ('open', 'approved', 'denied')),
|
|
29
|
+
decided_by_builder_id bigint REFERENCES builders(id),
|
|
30
|
+
decided_at timestamptz,
|
|
31
|
+
decision_note text,
|
|
32
|
+
created_at timestamptz NOT NULL DEFAULT now()
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
-- Archon queue lookup: "open requests, newest first."
|
|
36
|
+
CREATE INDEX IF NOT EXISTS idx_task_override_requests_open
|
|
37
|
+
ON task_override_requests (created_at DESC)
|
|
38
|
+
WHERE status = 'open';
|
|
39
|
+
|
|
40
|
+
-- Per-task lookup (when surfacing on a task detail page).
|
|
41
|
+
CREATE INDEX IF NOT EXISTS idx_task_override_requests_task
|
|
42
|
+
ON task_override_requests (task_id, created_at DESC);
|
|
43
|
+
|
|
44
|
+
-- At most one open request per task. Enforced as a partial unique index on
|
|
45
|
+
-- task_id so historical rows (approved/denied) don't conflict.
|
|
46
|
+
CREATE UNIQUE INDEX IF NOT EXISTS uniq_task_override_requests_open_per_task
|
|
47
|
+
ON task_override_requests (task_id)
|
|
48
|
+
WHERE status = 'open';
|
|
49
|
+
|
|
50
|
+
INSERT INTO schema_migrations (version) VALUES ('038_task_override_requests')
|
|
51
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
-- 039_newcomer_friendly_column.sql — V3.R15: tasks.newcomer_friendly column +
|
|
2
|
+
-- view-level filter + Xenos claim-policy error code.
|
|
3
|
+
--
|
|
4
|
+
-- Context: V3.R15 (#239) was planned as the row-level "newcomer-friendly task"
|
|
5
|
+
-- gate for the Xenos rank. In parallel, #360 / ADR 0018 (migration 029) shipped
|
|
6
|
+
-- the same idea under the name `xenos_claimable`. Now V3.R15 closes by:
|
|
7
|
+
--
|
|
8
|
+
-- 1. Renaming `xenos_claimable` → `newcomer_friendly` (the task's canonical
|
|
9
|
+
-- name — describes the *property of the task*, not "who is allowed").
|
|
10
|
+
-- This is a pure rename: the column already has DEFAULT false and the
|
|
11
|
+
-- existing values are preserved.
|
|
12
|
+
--
|
|
13
|
+
-- 2. Rebuilding `claimable_tasks` and `tasks_session_fit` so the renamed
|
|
14
|
+
-- column flows through `SELECT t.*`. (Same body as migration 028 — the
|
|
15
|
+
-- only change is the implicit column list.)
|
|
16
|
+
--
|
|
17
|
+
-- 3. View-level filter is realized in `db.js` listClaimableTasks: when the
|
|
18
|
+
-- caller is a Xenos, the SELECT adds `WHERE newcomer_friendly = true`.
|
|
19
|
+
-- The view itself stays builder-agnostic — applying the per-rank filter
|
|
20
|
+
-- inside the view body isn't possible (views can't read session context).
|
|
21
|
+
-- Belt-and-braces: `claimTask` still re-checks at claim time and returns
|
|
22
|
+
-- `rank_too_low_for_task` (the V3.R15 error code; XENOS_RESTRICTED is kept
|
|
23
|
+
-- as a code-side alias for callers on the pre-rename release).
|
|
24
|
+
--
|
|
25
|
+
-- 4. Tag at least 3 currently-open backlog tasks as newcomer_friendly=true so
|
|
26
|
+
-- the queue isn't empty when a Xenos arrives. Done inline at the bottom.
|
|
27
|
+
--
|
|
28
|
+
-- Idempotent: safe to re-run. The rename uses an IF EXISTS guard; the view
|
|
29
|
+
-- rebuilds DROP+CREATE. The tagging UPDATE is keyed on still-open backlog rows
|
|
30
|
+
-- so re-runs don't churn shipped tasks.
|
|
31
|
+
|
|
32
|
+
-- 1. RENAME the column. Use a DO block so re-runs are safe whether or not the
|
|
33
|
+
-- rename has already happened.
|
|
34
|
+
DO $$
|
|
35
|
+
BEGIN
|
|
36
|
+
IF EXISTS (
|
|
37
|
+
SELECT 1 FROM information_schema.columns
|
|
38
|
+
WHERE table_name = 'tasks' AND column_name = 'xenos_claimable'
|
|
39
|
+
) AND NOT EXISTS (
|
|
40
|
+
SELECT 1 FROM information_schema.columns
|
|
41
|
+
WHERE table_name = 'tasks' AND column_name = 'newcomer_friendly'
|
|
42
|
+
) THEN
|
|
43
|
+
ALTER TABLE tasks RENAME COLUMN xenos_claimable TO newcomer_friendly;
|
|
44
|
+
END IF;
|
|
45
|
+
END $$;
|
|
46
|
+
|
|
47
|
+
-- Defensive add — only fires if a fresh DB skipped migration 029 entirely.
|
|
48
|
+
ALTER TABLE tasks
|
|
49
|
+
ADD COLUMN IF NOT EXISTS newcomer_friendly boolean NOT NULL DEFAULT false;
|
|
50
|
+
|
|
51
|
+
-- 2. Rebuild the two SELECT t.* views so the renamed column flows through.
|
|
52
|
+
-- Same bodies as migration 028.
|
|
53
|
+
|
|
54
|
+
DROP VIEW IF EXISTS claimable_tasks;
|
|
55
|
+
CREATE VIEW claimable_tasks AS
|
|
56
|
+
SELECT t.*,
|
|
57
|
+
pms_calibrated_minutes(t.est_minutes, t.kind) AS est_minutes_calibrated
|
|
58
|
+
FROM tasks t
|
|
59
|
+
WHERE t.status = 'ready'
|
|
60
|
+
AND t.title NOT LIKE '\_\_smoke\_\_%' ESCAPE '\'
|
|
61
|
+
AND NOT EXISTS (
|
|
62
|
+
SELECT 1 FROM task_blockers tb WHERE tb.task_id = t.id
|
|
63
|
+
)
|
|
64
|
+
AND NOT EXISTS (
|
|
65
|
+
SELECT 1 FROM claims c
|
|
66
|
+
JOIN tasks t2 ON t2.id = c.task_id
|
|
67
|
+
WHERE c.released_at IS NULL
|
|
68
|
+
AND t2.touches && t.touches
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
DROP VIEW IF EXISTS tasks_session_fit;
|
|
72
|
+
CREATE VIEW tasks_session_fit AS
|
|
73
|
+
SELECT t.*,
|
|
74
|
+
CASE
|
|
75
|
+
WHEN t.automation_tag = 'overnight-safe' AND COALESCE(t.manual_degree, 5) <= 2
|
|
76
|
+
AND NOT EXISTS (SELECT 1 FROM task_blockers tb WHERE tb.task_id = t.id)
|
|
77
|
+
THEN ARRAY['autonomous','check-in','active']
|
|
78
|
+
WHEN t.automation_tag = 'live-only' OR COALESCE(t.manual_degree, 5) >= 4
|
|
79
|
+
THEN ARRAY['active']
|
|
80
|
+
ELSE ARRAY['check-in','active']
|
|
81
|
+
END AS fits_session_modes,
|
|
82
|
+
pms_calibrated_minutes(t.est_minutes, t.kind) AS est_minutes_calibrated,
|
|
83
|
+
CASE
|
|
84
|
+
WHEN t.credits_reward > 0
|
|
85
|
+
AND pms_calibrated_minutes(t.est_minutes, t.kind) IS NOT NULL
|
|
86
|
+
AND pms_calibrated_minutes(t.est_minutes, t.kind) > 0
|
|
87
|
+
THEN ROUND(t.credits_reward::numeric / pms_calibrated_minutes(t.est_minutes, t.kind), 3)
|
|
88
|
+
ELSE NULL
|
|
89
|
+
END AS credits_per_minute
|
|
90
|
+
FROM tasks t;
|
|
91
|
+
|
|
92
|
+
-- 4. Tag at least 3 currently-open V3 backlog tasks as newcomer_friendly so a
|
|
93
|
+
-- freshly-onboarded Xenos has something safe to claim. Pick small, well-scoped
|
|
94
|
+
-- cleanup/docs work — anything mechanical and low-stakes. Match titles to
|
|
95
|
+
-- specific shipped concepts (renumbering, docs polish, small cleanups) so the
|
|
96
|
+
-- set is stable across DB states. Use NOT-already-set guard so re-runs are
|
|
97
|
+
-- no-ops.
|
|
98
|
+
--
|
|
99
|
+
-- Three specific picks (all V3.R* tasks, all kind in ('cleanup','docs'), all
|
|
100
|
+
-- short or unestimated):
|
|
101
|
+
-- - any V3.R*-prefixed task with kind='docs' and status='backlog'
|
|
102
|
+
-- - any V3.R*-prefixed task with kind='cleanup' and status='backlog'
|
|
103
|
+
-- - any V3.R*-prefixed task with est_minutes<=45 and status='backlog'
|
|
104
|
+
-- LIMIT 3 from the union; pick smallest est_minutes first. The select-into
|
|
105
|
+
-- pattern stays safe even when the DB has zero matching rows (the UPDATE
|
|
106
|
+
-- simply touches nothing).
|
|
107
|
+
WITH candidates AS (
|
|
108
|
+
SELECT id
|
|
109
|
+
FROM tasks
|
|
110
|
+
WHERE status = 'backlog'
|
|
111
|
+
AND version_id = 'GDS-V3'
|
|
112
|
+
AND newcomer_friendly = false
|
|
113
|
+
AND (
|
|
114
|
+
kind IN ('cleanup', 'docs')
|
|
115
|
+
OR (est_minutes IS NOT NULL AND est_minutes <= 45)
|
|
116
|
+
)
|
|
117
|
+
ORDER BY COALESCE(est_minutes, 999), id
|
|
118
|
+
LIMIT 3
|
|
119
|
+
)
|
|
120
|
+
UPDATE tasks SET newcomer_friendly = true, updated_at = now()
|
|
121
|
+
WHERE id IN (SELECT id FROM candidates);
|
|
122
|
+
|
|
123
|
+
INSERT INTO schema_migrations (version) VALUES ('039_newcomer_friendly_column')
|
|
124
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
-- V3.R24 (#244) — builders.karma + karma_log table.
|
|
2
|
+
--
|
|
3
|
+
-- Karma is the internal good-citizenship reputation track that sits ALONGSIDE
|
|
4
|
+
-- drachmae (builders.total_credits). Drachmae rewards work shipped (objective:
|
|
5
|
+
-- task verified → credit_log row → builders.total_credits bump). Karma rewards
|
|
6
|
+
-- good citizenship (subjective: voting fairly, surfacing useful ideas, helping
|
|
7
|
+
-- newcomers, getting proposals ratified). Separate track so a builder can see
|
|
8
|
+
-- "I'm a productive shipper" vs "I'm a great teammate" as distinct signals.
|
|
9
|
+
--
|
|
10
|
+
-- Shape mirrors credit_log (see migrations/003_pms.sql §credit_log) exactly:
|
|
11
|
+
-- append-only ledger, cached counter on the builders row, AFTER INSERT trigger
|
|
12
|
+
-- keeps the counter in sync. Differences from credit_log:
|
|
13
|
+
-- * No task_id link (karma is people-shaped, not task-shaped).
|
|
14
|
+
-- * Adds granted_by (nullable builder_id) so manual Archon grants and peer
|
|
15
|
+
-- votes can record WHO drove the delta. NULL = system-attributed (e.g. a
|
|
16
|
+
-- trigger or scheduled job that bumps karma on proposal ratification).
|
|
17
|
+
--
|
|
18
|
+
-- Initial reason vocabulary (free-text but documented):
|
|
19
|
+
-- peer_upvote — another builder upvoted this builder's idea/comment
|
|
20
|
+
-- peer_downvote — another builder downvoted (delta is negative)
|
|
21
|
+
-- proposal_ratified — a proposal this builder authored was ratified
|
|
22
|
+
-- archon_grant — an Archon manually granted karma (granted_by set)
|
|
23
|
+
-- V4 will add: claude_interaction_signal, player_upvote.
|
|
24
|
+
--
|
|
25
|
+
-- Foundation for R25 (voting UI) and R28 (ratification boost). Cross-refs in
|
|
26
|
+
-- the task description on GDS task #244.
|
|
27
|
+
|
|
28
|
+
-- 1. Cached counter on builders ---------------------------------------------
|
|
29
|
+
ALTER TABLE builders ADD COLUMN IF NOT EXISTS karma integer NOT NULL DEFAULT 0;
|
|
30
|
+
|
|
31
|
+
-- 2. Append-only ledger -----------------------------------------------------
|
|
32
|
+
CREATE TABLE IF NOT EXISTS karma_log (
|
|
33
|
+
id bigserial PRIMARY KEY,
|
|
34
|
+
builder_id bigint NOT NULL REFERENCES builders(id),
|
|
35
|
+
delta integer NOT NULL, -- positive = earned, negative = lost
|
|
36
|
+
reason text NOT NULL, -- 'peer_upvote' | 'peer_downvote' | 'proposal_ratified' | 'archon_grant' | ...
|
|
37
|
+
recorded_at timestamptz NOT NULL DEFAULT now(),
|
|
38
|
+
granted_by bigint REFERENCES builders(id) -- NULL = system-attributed
|
|
39
|
+
);
|
|
40
|
+
|
|
41
|
+
CREATE INDEX IF NOT EXISTS idx_karma_log_builder ON karma_log (builder_id, recorded_at);
|
|
42
|
+
|
|
43
|
+
-- 3. Keep builders.karma in sync via trigger --------------------------------
|
|
44
|
+
-- Mirrors pms_apply_credit (migrations/003_pms.sql) — same AFTER INSERT shape,
|
|
45
|
+
-- same per-row UPDATE on the cached counter.
|
|
46
|
+
CREATE OR REPLACE FUNCTION gds_apply_karma() RETURNS trigger AS $$
|
|
47
|
+
BEGIN
|
|
48
|
+
UPDATE builders
|
|
49
|
+
SET karma = karma + NEW.delta
|
|
50
|
+
WHERE id = NEW.builder_id;
|
|
51
|
+
RETURN NEW;
|
|
52
|
+
END;
|
|
53
|
+
$$ LANGUAGE plpgsql;
|
|
54
|
+
|
|
55
|
+
DROP TRIGGER IF EXISTS trg_karma_log_apply ON karma_log;
|
|
56
|
+
CREATE TRIGGER trg_karma_log_apply
|
|
57
|
+
AFTER INSERT ON karma_log
|
|
58
|
+
FOR EACH ROW EXECUTE FUNCTION gds_apply_karma();
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
-- 041_kind_multipliers_and_idea_bonus.sql — V3.R27 (#247).
|
|
2
|
+
--
|
|
3
|
+
-- Per-kind credit multipliers + staged idea-promotion bonus.
|
|
4
|
+
--
|
|
5
|
+
-- The multiplier table lives as a frozen constant in src/bongos/db.js
|
|
6
|
+
-- (KIND_MULTIPLIERS) — NOT in this database. See ADR 0023 for the rationale:
|
|
7
|
+
-- policy values deserve a code-review + commit trail, not an UPDATE on a hot
|
|
8
|
+
-- table. This file exists to:
|
|
9
|
+
--
|
|
10
|
+
-- 1. Reserve migration number 041 so the claim allocator advances cleanly.
|
|
11
|
+
-- 2. Document the policy at the schema layer so anyone reading the
|
|
12
|
+
-- migrations folder sees the change without having to grep db.js.
|
|
13
|
+
-- 3. Tighten the credit_log.reason convention by recording the two new
|
|
14
|
+
-- reason strings ('idea_promotion_bonus' already, 'task.confirmed'
|
|
15
|
+
-- still primary) in a comment so future migrations don't accidentally
|
|
16
|
+
-- collide with them.
|
|
17
|
+
--
|
|
18
|
+
-- Effects on existing data:
|
|
19
|
+
-- - None. All existing credit_log rows are untouched (their `description`
|
|
20
|
+
-- stays NULL; new rows write a "<raw>c × <mult> = <effective>c (<kind>)"
|
|
21
|
+
-- string).
|
|
22
|
+
-- - The credit_log.reason column is text (no CHECK), so 'idea_promotion_bonus'
|
|
23
|
+
-- is accepted without a schema change. The trigger trg_credit_log_apply
|
|
24
|
+
-- fires on every INSERT regardless of reason, so total_credits stays in
|
|
25
|
+
-- sync without modification.
|
|
26
|
+
--
|
|
27
|
+
-- Idempotent: this whole file is comments + counter bump + schema_migrations
|
|
28
|
+
-- INSERT. Re-running it is a no-op.
|
|
29
|
+
|
|
30
|
+
-- Reason convention (informational, not enforced):
|
|
31
|
+
-- 'task.confirmed' — primary ship payout, kind-multiplied (V3.R27)
|
|
32
|
+
-- 'ship.net_negative' — flat +1 simplification bonus (V3.R93)
|
|
33
|
+
-- 'idea_promotion_bonus' — 25% slice to idea_inbox.captured_by (V3.R27)
|
|
34
|
+
-- 'rank_change' — promotion/demotion stipend (V3.R28)
|
|
35
|
+
-- 'task.bonus' / etc. — legacy/manual adjustments
|
|
36
|
+
|
|
37
|
+
-- Bump the migration counter past 041 so the next claim that includes
|
|
38
|
+
-- 'migrations/' allocates 042.
|
|
39
|
+
UPDATE migration_counter SET next_number = GREATEST(next_number, 42) WHERE id = 1;
|
|
40
|
+
|
|
41
|
+
INSERT INTO schema_migrations (version) VALUES ('041_kind_multipliers_and_idea_bonus')
|
|
42
|
+
ON CONFLICT (version) DO NOTHING;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
-- V3.R31 (#252) — idea_inbox.kind='criterion-proposal' workflow + audit log.
|
|
2
|
+
--
|
|
3
|
+
-- Adds the structured Metic-mode proposal flow. Three deliverables:
|
|
4
|
+
--
|
|
5
|
+
-- 1. Extend the idea_inbox.kind CHECK constraint to admit 'criterion-proposal'.
|
|
6
|
+
-- The existing constraint (migration 006) mirrors tasks.kind exactly; a
|
|
7
|
+
-- criterion proposal is *not* a task (it doesn't ship code), so it gets
|
|
8
|
+
-- its own enum value rather than reusing 'feature'/'decision'. Makes the
|
|
9
|
+
-- planning-session skill's Metic-mode writes machine-checkable.
|
|
10
|
+
--
|
|
11
|
+
-- 2. Create criterion_proposal_audit — the durable record of who proposed,
|
|
12
|
+
-- who ratified, when, and what the proposal contained. Separate from the
|
|
13
|
+
-- idea_inbox row so the proposal context survives even if the idea row
|
|
14
|
+
-- is later edited (kind changed, title edited, etc.). Two FKs into the
|
|
15
|
+
-- created done_when_criteria row and source idea_inbox row tie everything
|
|
16
|
+
-- together; an Archon can run a "ratification history" report off this
|
|
17
|
+
-- table without joining six other places.
|
|
18
|
+
--
|
|
19
|
+
-- 3. NO ratify endpoint yet — that lives in src/bongos/routes/inbox.js. This
|
|
20
|
+
-- migration only ships the schema scaffolding.
|
|
21
|
+
--
|
|
22
|
+
-- Cross-refs:
|
|
23
|
+
-- - karma_log (migration 040): the ratify endpoint INSERTs a row with
|
|
24
|
+
-- reason='proposal_ratified', delta=+5, granted_by=<the archon>.
|
|
25
|
+
-- - planning-session skill: Metic-mode already writes `kind='criterion-proposal'`
|
|
26
|
+
-- bodies as JSON { target_version, criterion_md, sort_order_hint }; this
|
|
27
|
+
-- migration finally makes the CHECK constraint accept it.
|
|
28
|
+
|
|
29
|
+
BEGIN;
|
|
30
|
+
|
|
31
|
+
-- 1. Extend idea_inbox.kind CHECK -------------------------------------------
|
|
32
|
+
-- Drop and recreate. The constraint name in migration 006 was inline (no
|
|
33
|
+
-- explicit name), so Postgres autogenerated one. We name it explicitly here
|
|
34
|
+
-- so future migrations can DROP it cleanly.
|
|
35
|
+
DO $$
|
|
36
|
+
DECLARE
|
|
37
|
+
cname text;
|
|
38
|
+
BEGIN
|
|
39
|
+
SELECT conname INTO cname
|
|
40
|
+
FROM pg_constraint
|
|
41
|
+
WHERE conrelid = 'idea_inbox'::regclass
|
|
42
|
+
AND contype = 'c'
|
|
43
|
+
AND pg_get_constraintdef(oid) ILIKE '%kind%IN%';
|
|
44
|
+
IF cname IS NOT NULL THEN
|
|
45
|
+
EXECUTE format('ALTER TABLE idea_inbox DROP CONSTRAINT %I', cname);
|
|
46
|
+
END IF;
|
|
47
|
+
END $$;
|
|
48
|
+
|
|
49
|
+
ALTER TABLE idea_inbox
|
|
50
|
+
ADD CONSTRAINT idea_inbox_kind_check
|
|
51
|
+
CHECK (kind IN (
|
|
52
|
+
'feature','bug','infra','refactor','spike',
|
|
53
|
+
'learning-capture','cleanup','decision','blocker-resolution',
|
|
54
|
+
'unclassified','criterion-proposal'
|
|
55
|
+
));
|
|
56
|
+
|
|
57
|
+
-- 2. Audit log for ratified proposals ---------------------------------------
|
|
58
|
+
CREATE TABLE IF NOT EXISTS criterion_proposal_audit (
|
|
59
|
+
id bigserial PRIMARY KEY,
|
|
60
|
+
idea_id bigint NOT NULL REFERENCES idea_inbox(id),
|
|
61
|
+
criterion_id bigint NOT NULL REFERENCES done_when_criteria(id),
|
|
62
|
+
proposed_by bigint REFERENCES builders(id), -- NULL if idea.captured_by was null
|
|
63
|
+
ratified_by bigint NOT NULL REFERENCES builders(id),
|
|
64
|
+
ratified_at timestamptz NOT NULL DEFAULT now(),
|
|
65
|
+
target_version text NOT NULL REFERENCES versions(id),
|
|
66
|
+
criterion_md text NOT NULL,
|
|
67
|
+
sort_order_hint integer, -- nullable — null means "use max+1"
|
|
68
|
+
notes_md text NOT NULL DEFAULT ''
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
CREATE INDEX IF NOT EXISTS idx_criterion_proposal_audit_idea
|
|
72
|
+
ON criterion_proposal_audit (idea_id);
|
|
73
|
+
CREATE INDEX IF NOT EXISTS idx_criterion_proposal_audit_criterion
|
|
74
|
+
ON criterion_proposal_audit (criterion_id);
|
|
75
|
+
CREATE INDEX IF NOT EXISTS idx_criterion_proposal_audit_ratified_at
|
|
76
|
+
ON criterion_proposal_audit (ratified_at);
|
|
77
|
+
|
|
78
|
+
COMMIT;
|