@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,82 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// scripts/gds/ci-grade.js — run the quality grader IN CI as a fail-closed PR
|
|
3
|
+
// gate (#855, ADR 0042). This is the security KEYSTONE for the ci deploy mode.
|
|
4
|
+
//
|
|
5
|
+
// WHY it must run in CI (not "read the recorded grade"):
|
|
6
|
+
// POST /api/gds/tasks/:id/grade records the grader scores FROM THE REQUEST
|
|
7
|
+
// BODY — the server does not independently recompute them. In laptop mode the
|
|
8
|
+
// grader runs on the OPERATOR's trusted machine, so that's fine. In ci mode the
|
|
9
|
+
// merge trigger moves to an UNTRUSTED builder machine; a tampered local ship.js
|
|
10
|
+
// could POST a fake passing grade, so a gate that merely READS the recorded
|
|
11
|
+
// grade is theater. The only tamper-proof gate runs the grader where the
|
|
12
|
+
// builder can't touch it: here, in GitHub Actions, against the PR diff.
|
|
13
|
+
//
|
|
14
|
+
// It reuses the EXACT production grading path (ship.js runSubagentGrader → the
|
|
15
|
+
// adversarial worker panel / trivial-diff shot), so a CI pass means the same
|
|
16
|
+
// thing a ship-time pass means. Exit 0 = pass, non-zero = fail (FAIL-CLOSED: any
|
|
17
|
+
// grader error also exits non-zero).
|
|
18
|
+
//
|
|
19
|
+
// SKIP-SAFE until armed: if no grader auth is wired (CLAUDE_CODE_OAUTH_TOKEN /
|
|
20
|
+
// ANTHROPIC_API_KEY), it prints SKIP and exits 0 — so merging this workflow
|
|
21
|
+
// changes nothing until the operator (a) adds the auth secret and (b) marks this
|
|
22
|
+
// a REQUIRED check in branch protection. Mirrors the inert-until-cutover pattern
|
|
23
|
+
// of .github/workflows/deploy-prod.yml (#597). See ADR 0042 cutover precondition #1.
|
|
24
|
+
//
|
|
25
|
+
// Inputs (from the workflow env):
|
|
26
|
+
// GRADE_BASE_REF base ref to diff against (default origin/main)
|
|
27
|
+
// GRADE_TASK_ID the PR's task id (context only; grading is diff-based)
|
|
28
|
+
// GRADE_TASK_TITLE the PR title (context for the grader prompt)
|
|
29
|
+
// GRADE_VALUE_SUMMARY the PR value summary (context for the grader prompt)
|
|
30
|
+
|
|
31
|
+
const { execFileSync } = require('node:child_process');
|
|
32
|
+
const ship = require('./ship.js');
|
|
33
|
+
|
|
34
|
+
function git(args) {
|
|
35
|
+
return execFileSync('git', args, { encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] }).trim();
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
(async () => {
|
|
39
|
+
// Auth presence — the grader spawns the `claude` CLI; without auth it cannot
|
|
40
|
+
// run. Until the operator wires it, stay green-but-not-gating (see header).
|
|
41
|
+
const hasAuth = !!(process.env.CLAUDE_CODE_OAUTH_TOKEN || process.env.ANTHROPIC_API_KEY);
|
|
42
|
+
if (!hasAuth) {
|
|
43
|
+
console.log(
|
|
44
|
+
'grade-gate: SKIP — no grader auth (CLAUDE_CODE_OAUTH_TOKEN / ANTHROPIC_API_KEY) configured. ' +
|
|
45
|
+
'This check is green-but-not-gating until the operator wires the secret AND marks it a required check ' +
|
|
46
|
+
'(ADR 0042 cutover precondition #1). It is NOT a real gate yet.'
|
|
47
|
+
);
|
|
48
|
+
process.exit(0);
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
const base = process.env.GRADE_BASE_REF || 'origin/main';
|
|
52
|
+
let baseline;
|
|
53
|
+
try {
|
|
54
|
+
baseline = git(['merge-base', base, 'HEAD']);
|
|
55
|
+
} catch (_) {
|
|
56
|
+
baseline = base; // shallow checkout / no common ancestor — diff against the ref directly
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const changedFiles = ship.computeChangedFiles(baseline);
|
|
60
|
+
if (!changedFiles.length) {
|
|
61
|
+
console.log('grade-gate: no changes vs base — pass (nothing to grade).');
|
|
62
|
+
process.exit(0);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
const task = {
|
|
66
|
+
id: process.env.GRADE_TASK_ID || null,
|
|
67
|
+
title: process.env.GRADE_TASK_TITLE || '(pull request)',
|
|
68
|
+
};
|
|
69
|
+
const valueSummary = process.env.GRADE_VALUE_SUMMARY || '';
|
|
70
|
+
|
|
71
|
+
console.log(`grade-gate: grading ${changedFiles.length} changed file(s) vs ${baseline.slice(0, 12)} ...`);
|
|
72
|
+
const result = await ship.runSubagentGrader({ task, valueSummary, baseline, changedFiles });
|
|
73
|
+
|
|
74
|
+
console.log(`grade-gate: verdict = ${result.passed ? 'PASS' : 'FAIL'}`);
|
|
75
|
+
if (result.notes_md) console.log(String(result.notes_md).slice(0, 6000));
|
|
76
|
+
// Fail-closed: only an explicit pass exits 0.
|
|
77
|
+
process.exit(result.passed ? 0 : 1);
|
|
78
|
+
})().catch((err) => {
|
|
79
|
+
// FAIL-CLOSED: a grader error must block the merge, never wave it through.
|
|
80
|
+
console.error('grade-gate: FAIL (grader error — failing closed):', err && err.message ? err.message : err);
|
|
81
|
+
process.exit(1);
|
|
82
|
+
});
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Claim-time recall hits (#956 / V4.R18 — criterion sessions-start-knowing).
|
|
3
|
+
//
|
|
4
|
+
// When a builder claims a task, surface the top project-knowledge sources for it
|
|
5
|
+
// (POST /api/gds/search — the rank/owner-scoped lexical recall layer, ADR 0060) so
|
|
6
|
+
// the work starts already pointed at the relevant ADRs / recipes / session-logs /
|
|
7
|
+
// learnings instead of re-discovering them. This is the claim-time half of the
|
|
8
|
+
// recall surface the V4.R04 context pack (#942) promised; #963 added the
|
|
9
|
+
// resumed-session (SessionStart) half. The two share the same /api/gds/search call
|
|
10
|
+
// and the same title-cleaning, so a session sees the same knowledge whether it
|
|
11
|
+
// claims fresh or resumes.
|
|
12
|
+
//
|
|
13
|
+
// Contract (mirrors printRelevantLearnings in claim.js): best-effort + SILENT on
|
|
14
|
+
// any failure — it must NEVER block or delay a successful claim. The rows are
|
|
15
|
+
// merged with the learnings surface and deduped, so a learning and its indexed
|
|
16
|
+
// search chunk don't echo each other.
|
|
17
|
+
|
|
18
|
+
const RECALL_LIMIT = 5;
|
|
19
|
+
|
|
20
|
+
// ---- pure helpers (exported for tests) -------------------------------------
|
|
21
|
+
|
|
22
|
+
// Build the search query from the claimed task: the title with the decorative
|
|
23
|
+
// "V4.R18 — " rank prefix and any trailing "(...)" aside stripped (same cleaning
|
|
24
|
+
// as the #963 SessionStart hint), plus a short single-line lead from the
|
|
25
|
+
// description — so the query is the substantive phrase, not planning chrome. The
|
|
26
|
+
// description lead is what distinguishes this from #963's title-only hint: a claim
|
|
27
|
+
// happens with the full task in hand, so we use it.
|
|
28
|
+
function claimRecallQuery(task) {
|
|
29
|
+
const rawTitle = String((task && task.title) || '').trim();
|
|
30
|
+
let title = rawTitle
|
|
31
|
+
.replace(/^[A-Za-z0-9.]+\s+[—-]\s+/, '') // leading "V4.R18 — " / "R18 - " (require spaces around the dash so an in-word hyphen like "co-located" isn't eaten)
|
|
32
|
+
.replace(/\s*\([^)]*\)\s*$/, '') // trailing parenthetical aside
|
|
33
|
+
.trim();
|
|
34
|
+
if (!title) title = rawTitle; // stripping emptied it → fall back to the raw title
|
|
35
|
+
const descLead = String((task && task.description) || '')
|
|
36
|
+
.replace(/\s+/g, ' ')
|
|
37
|
+
.trim()
|
|
38
|
+
.slice(0, 160)
|
|
39
|
+
.trim();
|
|
40
|
+
return [title, descLead].filter(Boolean).join(' ').trim();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// The dedup identities for a row (a recall result OR a learning). A row is a
|
|
44
|
+
// duplicate of another surface if ANY of its keys collide — we key on both the
|
|
45
|
+
// source ref and the title because a learning's ref in the `learnings` table and
|
|
46
|
+
// its indexed `search_chunks` ref don't always match, but the titles do.
|
|
47
|
+
function rowKeys(row) {
|
|
48
|
+
const keys = [];
|
|
49
|
+
const ref = row
|
|
50
|
+
&& (row.source_ref || row.source || (Array.isArray(row.related_files) && row.related_files[0]));
|
|
51
|
+
if (ref) keys.push(`ref:${String(ref).toLowerCase()}`);
|
|
52
|
+
const t = row && (row.title || row.heading_path);
|
|
53
|
+
if (t) keys.push(`title:${String(t).toLowerCase()}`);
|
|
54
|
+
return keys;
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
// Render the top-N recall sources as a printable block, dropping:
|
|
58
|
+
// - the claimed task's OWN indexed chunk (source_ref `task:<id>`) — the builder
|
|
59
|
+
// already holds the task; echoing it is noise (same filter as #963);
|
|
60
|
+
// - any row that collides with an already-shown learning (`excludeKeys`).
|
|
61
|
+
// Returns null when nothing is left to show, so the caller stays silent.
|
|
62
|
+
function formatRecallSources(results, { limit = RECALL_LIMIT, excludeKeys = [], currentTaskId = null } = {}) {
|
|
63
|
+
const selfKey = currentTaskId != null ? `ref:task:${String(currentTaskId).toLowerCase()}` : null;
|
|
64
|
+
const seen = new Set((excludeKeys || []).map((k) => String(k).toLowerCase()));
|
|
65
|
+
if (selfKey) seen.add(selfKey);
|
|
66
|
+
const rows = [];
|
|
67
|
+
for (const r of (Array.isArray(results) ? results : [])) {
|
|
68
|
+
const keys = rowKeys(r);
|
|
69
|
+
if (keys.length === 0) continue;
|
|
70
|
+
if (keys.some((k) => seen.has(k))) continue; // self-match or learning dup
|
|
71
|
+
keys.forEach((k) => seen.add(k)); // also dedup within the recall set
|
|
72
|
+
rows.push(r);
|
|
73
|
+
if (rows.length >= limit) break;
|
|
74
|
+
}
|
|
75
|
+
if (rows.length === 0) return null;
|
|
76
|
+
const lines = [`\n🔎 Relevant project knowledge (${rows.length}):`];
|
|
77
|
+
for (const r of rows) {
|
|
78
|
+
const where = r.heading_path || r.source_ref || '';
|
|
79
|
+
const title = r.title || r.source_ref || '(untitled)';
|
|
80
|
+
lines.push(` - ${title}${where ? ` — ${where}` : ''}`);
|
|
81
|
+
}
|
|
82
|
+
lines.push(' (rank-scoped recall; run /recall <query> to dig further)');
|
|
83
|
+
return lines.join('\n');
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
// ---- network leg (fail-open) -----------------------------------------------
|
|
87
|
+
|
|
88
|
+
// Query the recall layer for the claimed task and print the top sources, deduped
|
|
89
|
+
// against the learnings already printed (`excludeKeys`). Best-effort + silent —
|
|
90
|
+
// never block a claim. Uses the shared client (throwOnError:false → {status, ok,
|
|
91
|
+
// data}; it does NOT exit the process on a non-2xx, so a swallow here is safe).
|
|
92
|
+
async function printClaimRecall(task, { excludeKeys = [] } = {}) {
|
|
93
|
+
const q = claimRecallQuery(task);
|
|
94
|
+
if (!q) return;
|
|
95
|
+
try {
|
|
96
|
+
// Over-fetch so dropping the self-match + learning dups still leaves a full set.
|
|
97
|
+
const limit = RECALL_LIMIT + (excludeKeys ? excludeKeys.length : 0) + 3;
|
|
98
|
+
const { cliClient } = require('./cli-lib');
|
|
99
|
+
const api = await cliClient();
|
|
100
|
+
const r = await api.search.postSearch({ body: { q, limit } });
|
|
101
|
+
if (!r || r.status !== 200 || !r.data || !Array.isArray(r.data.results)) return;
|
|
102
|
+
const block = formatRecallSources(r.data.results, {
|
|
103
|
+
excludeKeys,
|
|
104
|
+
currentTaskId: task && task.id,
|
|
105
|
+
});
|
|
106
|
+
if (block) console.log(block);
|
|
107
|
+
} catch (_) {
|
|
108
|
+
// swallow — never block a successful claim on a recall lookup
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
module.exports = { claimRecallQuery, rowKeys, formatRecallSources, printClaimRecall, RECALL_LIMIT };
|
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Builder claim — atomically claim a task.
|
|
3
|
+
//
|
|
4
|
+
// Usage:
|
|
5
|
+
// node scripts/gds/claim.js <task-id> [--worktree NAME]
|
|
6
|
+
//
|
|
7
|
+
// On success: prints the claim id, the task title, and the touches[] so the
|
|
8
|
+
// builder knows the parallel-safety boundary they're working within.
|
|
9
|
+
|
|
10
|
+
const { execSync } = require('node:child_process');
|
|
11
|
+
const fs = require('node:fs');
|
|
12
|
+
const path = require('node:path');
|
|
13
|
+
const { cliClient, requireSession, fmtTouches, printOnboardingNudge } = require('./cli-lib');
|
|
14
|
+
const { nextNumbers, padAdr, padMig } = require('./next-number');
|
|
15
|
+
const { CORE_NS } = require('./migration-namespace');
|
|
16
|
+
const { contextPack, formatContextPack } = require('./context-pack');
|
|
17
|
+
const { printClaimRecall } = require('./claim-recall');
|
|
18
|
+
|
|
19
|
+
// Fetch up to 3 learnings relevant to the task being claimed. touches[] cleanup
|
|
20
|
+
// [3/8] (task 878): key off the task's discipline + title (always present) rather
|
|
21
|
+
// than its predicted touches[] — touches[] is becoming an optional advisory
|
|
22
|
+
// (#882) and is often empty at claim time, which silently emptied the old lookup.
|
|
23
|
+
// Silent on empty result, errors, or missing endpoint — this is a UX nice-to-have
|
|
24
|
+
// and must never break the claim flow.
|
|
25
|
+
// Returns the dedup keys of the learnings it printed, so the claim-time recall
|
|
26
|
+
// surface (#956) can drop any source it would otherwise echo. Empty array on any
|
|
27
|
+
// miss — the caller treats that as "nothing to exclude".
|
|
28
|
+
async function printRelevantLearnings(task) {
|
|
29
|
+
const discipline = task && task.discipline;
|
|
30
|
+
const title = task && task.title;
|
|
31
|
+
if (!discipline && !title) return [];
|
|
32
|
+
try {
|
|
33
|
+
const query = {};
|
|
34
|
+
if (discipline) query.discipline = String(discipline);
|
|
35
|
+
if (title) query.title = String(title);
|
|
36
|
+
const api = await cliClient();
|
|
37
|
+
const r = await api.learnings.getLearnings({ query });
|
|
38
|
+
if (r.status !== 200 || !r.data || !Array.isArray(r.data.learnings)) return [];
|
|
39
|
+
const rows = r.data.learnings.slice(0, 3);
|
|
40
|
+
if (rows.length === 0) return [];
|
|
41
|
+
console.log(`\n📚 Relevant learnings (${rows.length}):`);
|
|
42
|
+
const shownKeys = [];
|
|
43
|
+
for (const L of rows) {
|
|
44
|
+
const ref = L.source_ref || L.source || (Array.isArray(L.related_files) && L.related_files[0]) || `#${L.id}`;
|
|
45
|
+
console.log(` - ${L.title} (${ref})`);
|
|
46
|
+
shownKeys.push(`ref:${String(ref).toLowerCase()}`);
|
|
47
|
+
if (L.title) shownKeys.push(`title:${String(L.title).toLowerCase()}`);
|
|
48
|
+
}
|
|
49
|
+
return shownKeys;
|
|
50
|
+
} catch (_) {
|
|
51
|
+
// swallow — never block a successful claim on a learnings lookup
|
|
52
|
+
return [];
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
// Discipline-fork at claim (task 1267). If the claimed task's `discipline`
|
|
57
|
+
// names an operating-playbook skill in discipline-modes.json, print a directive
|
|
58
|
+
// so the session opens that playbook instead of working the task the default
|
|
59
|
+
// way. This IS the whole fork — one data lookup on the claim the builder already
|
|
60
|
+
// runs; no hook, the Conductor untouched. `discipline` is already a column, so
|
|
61
|
+
// there is no classification step here. Fail-open in every branch: a missing or
|
|
62
|
+
// invalid map, or a discipline with no entry (engineer/artist today), prints
|
|
63
|
+
// nothing and never breaks a successful claim.
|
|
64
|
+
function printDisciplineMode(task) {
|
|
65
|
+
try {
|
|
66
|
+
const discipline = task && task.discipline;
|
|
67
|
+
if (!discipline) return;
|
|
68
|
+
const raw = fs.readFileSync(path.join(__dirname, 'discipline-modes.json'), 'utf8');
|
|
69
|
+
const modes = (JSON.parse(raw) || {}).modes || {};
|
|
70
|
+
const mode = modes[discipline];
|
|
71
|
+
if (!mode || !mode.directive) return;
|
|
72
|
+
console.log('');
|
|
73
|
+
console.log(`▶ ${mode.label || 'Working mode'} — /${mode.skill}`);
|
|
74
|
+
console.log(` ${mode.directive}`);
|
|
75
|
+
} catch (_) {
|
|
76
|
+
// never let the mode hint break a successful claim
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function captureHeadSha() {
|
|
81
|
+
try {
|
|
82
|
+
return execSync('git rev-parse HEAD', { encoding: 'utf8' }).trim();
|
|
83
|
+
} catch (_) {
|
|
84
|
+
return null;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// task 1278: nudge (don't block) when this session's build scripts are behind
|
|
89
|
+
// origin/main. The completion cards + skills are CLI-script features that ride
|
|
90
|
+
// the LOCAL checkout, not the deployed server — a worktree branched from a stale
|
|
91
|
+
// main silently lacks them (the root cause behind the missing cards in session
|
|
92
|
+
// 1c1e12d7: claimed/shipped task 1274 on old scripts). Mirrors ship.js's
|
|
93
|
+
// TOOLING_PATHS preflight, but as a NUDGE — claiming on old scripts is fine, you
|
|
94
|
+
// just miss features. Strictly best-effort + fail-open (never break/slow a claim).
|
|
95
|
+
const STALE_TOOLING_DIRS = ['scripts/gds', 'src/bongos', '.claude/skills'];
|
|
96
|
+
function warnIfToolingStale() {
|
|
97
|
+
try {
|
|
98
|
+
// Quiet, timed, fail-open fetch so the diff reflects GitHub's main, not a
|
|
99
|
+
// stale local ref — catching a stale LOCAL main is the whole point.
|
|
100
|
+
try {
|
|
101
|
+
execSync('git fetch origin main', { stdio: 'ignore', timeout: 8000 });
|
|
102
|
+
} catch (_) {
|
|
103
|
+
return; // offline / no remote / detached — skip the nudge silently
|
|
104
|
+
}
|
|
105
|
+
// `...` (symmetric, merge-base) so the builder's OWN edits to these files
|
|
106
|
+
// don't trip it — only files where origin/main has moved ahead (same as ship.js).
|
|
107
|
+
const out = execSync(
|
|
108
|
+
`git diff --name-only HEAD...origin/main -- ${STALE_TOOLING_DIRS.join(' ')}`,
|
|
109
|
+
{ encoding: 'utf8', timeout: 8000 }
|
|
110
|
+
);
|
|
111
|
+
const stale = out.trim().split('\n').filter(Boolean);
|
|
112
|
+
if (stale.length === 0) return;
|
|
113
|
+
console.log('');
|
|
114
|
+
console.log(`⚠ Your build scripts are behind origin/main (${stale.length} file${stale.length === 1 ? '' : 's'} in ${STALE_TOOLING_DIRS.join(', ')}).`);
|
|
115
|
+
console.log(' Run `git merge origin/main` to pick up the latest — newer skills, fixes, and the in-feed completion cards.');
|
|
116
|
+
} catch (_) {
|
|
117
|
+
/* a freshness nudge must never break or slow a claim */
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
// task 1275: the CLAIMED stage of the deterministic lifecycle card — the SAME
|
|
122
|
+
// card the ship surfaces, here showing the scope (priority / estimate / touches /
|
|
123
|
+
// version) with the brief in the dropdown and the discipline session as the
|
|
124
|
+
// action. Best-effort: a claim card must never break a successful claim.
|
|
125
|
+
function printClaimCard(task, widgetsEnabled = true) {
|
|
126
|
+
try {
|
|
127
|
+
const shipCard = require('../../modules/lifecycle/ship-card');
|
|
128
|
+
const model = shipCard.buildCardModel({
|
|
129
|
+
stage: 'claimed',
|
|
130
|
+
taskId: task.id,
|
|
131
|
+
title: task.title,
|
|
132
|
+
description: task.description || '',
|
|
133
|
+
estMinutes: task.est_minutes != null ? Number(task.est_minutes) : null,
|
|
134
|
+
touchesCount: Array.isArray(task.touches) ? task.touches.length : null,
|
|
135
|
+
version: task.version_id,
|
|
136
|
+
kind: task.kind,
|
|
137
|
+
priority: task.priority,
|
|
138
|
+
discipline: task.discipline,
|
|
139
|
+
});
|
|
140
|
+
// task 1279: when the builder has widgets off, emitCard prints only the
|
|
141
|
+
// monospace card (no HTML written or relayed).
|
|
142
|
+
shipCard.emitCard(model, task.id, { widgetsEnabled });
|
|
143
|
+
} catch (_) { /* never block a claim on the card */ }
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
(async () => {
|
|
147
|
+
await requireSession();
|
|
148
|
+
const args = process.argv.slice(2);
|
|
149
|
+
const taskId = Number(args[0]);
|
|
150
|
+
if (!Number.isFinite(taskId)) {
|
|
151
|
+
console.error('usage: node scripts/gds/claim.js <task-id> [--worktree NAME] [--enforce-touches]');
|
|
152
|
+
process.exit(2);
|
|
153
|
+
}
|
|
154
|
+
const wIdx = args.indexOf('--worktree');
|
|
155
|
+
const worktree = wIdx >= 0 ? args[wIdx + 1] : null;
|
|
156
|
+
// touches[] cleanup [5/8] (task 880): touches[] overlap with another active
|
|
157
|
+
// claim is ADVISORY for an interactive human claim (just a warning — git merge
|
|
158
|
+
// is the real collision detector). The autonomous --parallel runner passes
|
|
159
|
+
// --enforce-touches so adjacency becomes a HARD refusal (it fans concurrent
|
|
160
|
+
// unsupervised agents that could clobber each other on shared files).
|
|
161
|
+
const enforceTouches = args.includes('--enforce-touches');
|
|
162
|
+
const headSha = captureHeadSha();
|
|
163
|
+
|
|
164
|
+
const api = await cliClient();
|
|
165
|
+
const r = await api.claims.postClaims({
|
|
166
|
+
body: {
|
|
167
|
+
task_id: taskId,
|
|
168
|
+
worktree_name: worktree,
|
|
169
|
+
head_sha: headSha,
|
|
170
|
+
enforce_touches: enforceTouches,
|
|
171
|
+
},
|
|
172
|
+
});
|
|
173
|
+
if (r.status === 201) {
|
|
174
|
+
const { claim, task } = r.data;
|
|
175
|
+
console.log(`Claimed task #${task.id}: ${task.title}`);
|
|
176
|
+
console.log(`Claim id: ${claim.id}`);
|
|
177
|
+
console.log(`Version: ${task.version_id} · Priority: P${task.priority ?? '?'} · Credit reward: ${task.credits_reward}`);
|
|
178
|
+
if (task.parallel_safe === true) console.log('Parallel-safe: yes (eligible for a parallel autonomous slot)');
|
|
179
|
+
// BV1.R53 (task 1422): module_key is the primary scope signal. touches[] is
|
|
180
|
+
// demoted to derived/advisory for module-keyed tasks; fall back to it for
|
|
181
|
+
// tasks that predate module affinity.
|
|
182
|
+
if (task.module_key) {
|
|
183
|
+
console.log(`Module scope: ${task.module_key} → modules/${task.module_key}/`);
|
|
184
|
+
console.log(' Build within that directory tree. Files outside it will trigger a drift warning at ship time.');
|
|
185
|
+
} else {
|
|
186
|
+
console.log(`Touches: ${fmtTouches(task.touches)}`);
|
|
187
|
+
// touches[] cleanup [7/8] (task 882): the planning field is optional now.
|
|
188
|
+
// If none was declared, it'll be backfilled from the real diff at ship.
|
|
189
|
+
if (!Array.isArray(task.touches) || task.touches.length === 0) {
|
|
190
|
+
console.log(' (no touches declared — backfilled from your committed diff at ship; build where the work leads)');
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// touches[] cleanup [5/8] (task 880): advisory overlap notice. The claim
|
|
194
|
+
// succeeded; this is a heads-up that another active claim declares
|
|
195
|
+
// overlapping files. Self-serialize only if it's genuinely the same code.
|
|
196
|
+
if (Array.isArray(r.data.overlap_warning) && r.data.overlap_warning.length > 0) {
|
|
197
|
+
console.log(`\n⚠ touches[] overlaps an active claim: ${r.data.overlap_warning.join(', ')}`);
|
|
198
|
+
console.log(' Advisory only — your claim stands; git merge is the authoritative collision check.');
|
|
199
|
+
}
|
|
200
|
+
for (const ach of (r.data.just_unlocked || [])) {
|
|
201
|
+
const bonus = ach.credit_bonus > 0 ? ` (+${ach.credit_bonus}c bonus)` : '';
|
|
202
|
+
console.log(`✨ Achievement unlocked: ${ach.name}${bonus}`);
|
|
203
|
+
}
|
|
204
|
+
// task 1278: surface a stale-scripts nudge early, so the builder can merge
|
|
205
|
+
// main before diving in (and pick up newer skills + the completion cards).
|
|
206
|
+
warnIfToolingStale();
|
|
207
|
+
// Claim-time context pack (V4.R26 / #964): the AUTHORITATIVE next-free ADR +
|
|
208
|
+
// migration numbers, computed deterministically from origin/main ∪ the local
|
|
209
|
+
// working tree (next-number.js). This supersedes blind trust in the drift-prone
|
|
210
|
+
// claim-time DB counter, which has handed out already-applied numbers and now
|
|
211
|
+
// sits ahead of the committed files. Best-effort — never break a claim.
|
|
212
|
+
let nn = null;
|
|
213
|
+
try { nn = nextNumbers(); } catch { /* fail-open: skip the hint */ }
|
|
214
|
+
if (nn) {
|
|
215
|
+
console.log(`\nNext free numbers (from ${nn.source} ∪ local):`);
|
|
216
|
+
console.log(` ADR: ${padAdr(nn.adr)} → docs/adr/${padAdr(nn.adr)}-<slug>.md`);
|
|
217
|
+
// New core migrations are namespaced core_ (ADR 0108 §5) so a stem can't collide with an
|
|
218
|
+
// instance/module migration across repos; instance seeds stay bare in migrations/instance/.
|
|
219
|
+
console.log(` migration: ${padMig(nn.migration)} → migrations/${CORE_NS}_${padMig(nn.migration)}_<slug>.sql (core; instance seed → migrations/instance/${padMig(nn.migration)}_<slug>.sql bare)`);
|
|
220
|
+
if (nn.degraded) console.log(' ⚠ origin/main unreachable — recompute with `node scripts/gds/next-number.js` before committing.');
|
|
221
|
+
}
|
|
222
|
+
if (claim.reserved_migration_number != null) {
|
|
223
|
+
const padded = String(claim.reserved_migration_number).padStart(3, '0');
|
|
224
|
+
// The DB counter still reserves a number (parallel-claim arbitration), but
|
|
225
|
+
// it can drift; if it disagrees with the file-derived next-free, trust the
|
|
226
|
+
// file-derived one (it reflects what is actually committed/applied).
|
|
227
|
+
const driftNote = nn && nn.migration !== claim.reserved_migration_number
|
|
228
|
+
? ` ⚠ DB counter reserved ${padded}, but ${padMig(nn.migration)} is the next free on origin/main — use ${padMig(nn.migration)}.`
|
|
229
|
+
: ' (No other parallel claim can be allocated this number.)';
|
|
230
|
+
console.log(`\nMigration counter reserved: ${padded}`);
|
|
231
|
+
console.log(driftNote);
|
|
232
|
+
}
|
|
233
|
+
// Claim-time context pack (V4.R04 / #942, criterion sessions-start-knowing).
|
|
234
|
+
// Fetch /me ONCE here — it gives the builder's currently-held claims for the
|
|
235
|
+
// pack, and is reused for the onboarding nudge at the end. Best-effort: the
|
|
236
|
+
// pack is a UX surface and a /me hiccup must never break a successful claim.
|
|
237
|
+
let meRes = null;
|
|
238
|
+
try {
|
|
239
|
+
const api = await cliClient();
|
|
240
|
+
meRes = await api.me.getMe();
|
|
241
|
+
} catch (_) { /* fail-open */ }
|
|
242
|
+
try {
|
|
243
|
+
const activeClaims = (meRes && meRes.ok && meRes.data)
|
|
244
|
+
? (meRes.data.active_claims || (meRes.data.active_claim ? [meRes.data.active_claim] : []))
|
|
245
|
+
: [];
|
|
246
|
+
console.log('');
|
|
247
|
+
console.log(formatContextPack(contextPack({ activeClaims, currentTaskId: task.id })));
|
|
248
|
+
} catch (_) { /* never block a claim on the pack */ }
|
|
249
|
+
if (task.description) {
|
|
250
|
+
console.log('');
|
|
251
|
+
console.log(task.description);
|
|
252
|
+
}
|
|
253
|
+
// Discipline-fork: route ideator (and any future discipline with a mapped
|
|
254
|
+
// playbook) into its skill. Printed right after the description so it's the
|
|
255
|
+
// last thing the builder reads before deciding how to work — task 1267.
|
|
256
|
+
printDisciplineMode(task);
|
|
257
|
+
if (worktree) console.log(`\nWorktree: ${worktree}`);
|
|
258
|
+
// Claim-time knowledge (#956 / V4.R18, criterion sessions-start-knowing):
|
|
259
|
+
// learnings first (curated, short), then the top recall sources for this task
|
|
260
|
+
// (ADR 0060 search layer), deduped against the learnings just shown. Both are
|
|
261
|
+
// best-effort and never block the claim.
|
|
262
|
+
const shownLearningKeys = await printRelevantLearnings(task);
|
|
263
|
+
await printClaimRecall(task, { excludeKeys: shownLearningKeys });
|
|
264
|
+
console.log('\nWhen you finish:');
|
|
265
|
+
console.log(` node scripts/gds/ship.js ${task.id} --notes "..." --summary "..."`);
|
|
266
|
+
console.log('Or to abandon:');
|
|
267
|
+
console.log(` node scripts/gds/release.js ${task.id}`);
|
|
268
|
+
// V3.R13 (#237): post-claim nudge — for a newcomer, this becomes
|
|
269
|
+
// "Next: Ship thy first work" so the path forward is visible. Reuses the
|
|
270
|
+
// /me fetched above for the context pack (no second round-trip).
|
|
271
|
+
try {
|
|
272
|
+
if (meRes && meRes.ok) {
|
|
273
|
+
console.log('');
|
|
274
|
+
printOnboardingNudge(meRes.data);
|
|
275
|
+
}
|
|
276
|
+
} catch (_) {
|
|
277
|
+
// never let a UX nudge break a successful claim
|
|
278
|
+
}
|
|
279
|
+
// task 1275: the claimed lifecycle card, last so it's the visual anchor.
|
|
280
|
+
// task 1279: honour the builder's render-widgets knob (resolved from the /me
|
|
281
|
+
// fetched above; default ON if /me was unavailable).
|
|
282
|
+
const widgetsEnabled = meRes && meRes.ok ? (meRes.data?.render?.widgets_enabled !== false) : true;
|
|
283
|
+
printClaimCard(task, widgetsEnabled);
|
|
284
|
+
return;
|
|
285
|
+
}
|
|
286
|
+
// #766: the newcomer claim gate is now just the one-claim-at-a-time rule
|
|
287
|
+
// below. A generic stage_required (any future onboarding gate) still renders
|
|
288
|
+
// cleanly rather than as a raw API error.
|
|
289
|
+
if (r.data?.error === 'stage_required') {
|
|
290
|
+
console.error(`Task #${taskId} can't be claimed yet.`);
|
|
291
|
+
console.error(` ${r.data.what_to_do || `Clear "${r.data.required_stage_label || r.data.required_stage}" first.`}`);
|
|
292
|
+
process.exit(1);
|
|
293
|
+
}
|
|
294
|
+
if (r.data?.error === 'newcomer_must_ship_first') {
|
|
295
|
+
console.error(`Task #${taskId} can't be claimed yet — your first work isn't shipped.`);
|
|
296
|
+
console.error(` You're holding an active claim on #${r.data.active_task_id}: ${r.data.active_task_title}`);
|
|
297
|
+
console.error(` ${r.data.what_to_do || 'Ship or release the current claim first.'}`);
|
|
298
|
+
process.exit(1);
|
|
299
|
+
}
|
|
300
|
+
if (r.data?.error === 'ALREADY_CLAIMED') {
|
|
301
|
+
console.error(`Task #${taskId} was just claimed by another session. Try a different task.`);
|
|
302
|
+
process.exit(1);
|
|
303
|
+
}
|
|
304
|
+
if (r.data?.error === 'MODULE_CONFLICT') {
|
|
305
|
+
console.error(`Task #${taskId} has module_key='${r.data.module_key}', but another active claim already owns that module:`);
|
|
306
|
+
for (const t of r.data.conflictTaskTitles || []) console.error(` - ${t}`);
|
|
307
|
+
console.error('Two tasks in the same module cannot run concurrently. Ship or release the in-flight claim first.');
|
|
308
|
+
process.exit(1);
|
|
309
|
+
}
|
|
310
|
+
if (r.data?.error === 'TOUCHES_CONFLICT') {
|
|
311
|
+
console.error(`Task #${taskId} touches files currently in flight on another claim:`);
|
|
312
|
+
for (const t of r.data.conflictTaskTitles || []) console.error(` - ${t}`);
|
|
313
|
+
console.error('Pick a task with disjoint touches[].');
|
|
314
|
+
process.exit(1);
|
|
315
|
+
}
|
|
316
|
+
if (r.data?.error === 'TASK_NOT_READY') {
|
|
317
|
+
console.error(`Task #${taskId} is not ready (current status: ${r.data.currentStatus}).`);
|
|
318
|
+
process.exit(1);
|
|
319
|
+
}
|
|
320
|
+
if (r.data?.error === 'DEPS_NOT_SHIPPED') {
|
|
321
|
+
console.error(`Task #${taskId} can't be claimed yet — these dependencies are not shipped:`);
|
|
322
|
+
for (const d of r.data.deps || []) {
|
|
323
|
+
console.error(` - #${d.id} [${d.status}] ${d.title}`);
|
|
324
|
+
}
|
|
325
|
+
console.error('Ship those first (or release them) and try again.');
|
|
326
|
+
process.exit(1);
|
|
327
|
+
}
|
|
328
|
+
console.error(`Claim failed (${r.status}):`, r.data);
|
|
329
|
+
process.exit(1);
|
|
330
|
+
})().catch((err) => {
|
|
331
|
+
console.error('fatal:', err);
|
|
332
|
+
process.exit(1);
|
|
333
|
+
});
|