@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,145 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// scripts/gds/codemod-rename-src-gds.js
|
|
3
|
+
//
|
|
4
|
+
// One-shot, auditable codemod for task 2004 (BV1.R124): rename the core source
|
|
5
|
+
// directory src/gds/ -> src/bongos/ and rewrite EVERY in-repo reference to it.
|
|
6
|
+
// Committed so the approach is reproducible and reviewable (task done-when).
|
|
7
|
+
//
|
|
8
|
+
// Deterministic by construction:
|
|
9
|
+
// 1. `git mv src/gds src/bongos` (idempotent -- skipped if already moved).
|
|
10
|
+
// 2. Over every TRACKED text file, rewrite the literal path token `src/gds`
|
|
11
|
+
// -> `src/bongos`, guarded by a TRAILING boundary so look-alike tokens are
|
|
12
|
+
// never clobbered:
|
|
13
|
+
// src/gds/... -> src/bongos/... (directory refs)
|
|
14
|
+
// "src/gds" -> "src/bongos" (bare, at a boundary)
|
|
15
|
+
// src/gds-client -> src/gds-client (UNCHANGED: devbox-app/src/gds-client.js)
|
|
16
|
+
// src/gdsx -> src/gdsx (UNCHANGED here: prefix-edge fixture)
|
|
17
|
+
//
|
|
18
|
+
// Regex: /src\/gds(?![A-Za-z0-9_-])/g -- trailing guard only. No LEADING guard:
|
|
19
|
+
// `scripts/gds` contains no `src/gds` substring, and the two real leading-glue
|
|
20
|
+
// sites (`keyed-to-src/gds` in an audit, `\tsrc/gds/auth.js` in a mirror-export
|
|
21
|
+
// fixture) are genuine directory refs we DO want rewritten.
|
|
22
|
+
//
|
|
23
|
+
// Excluded from the sweep (see EXCLUDE):
|
|
24
|
+
// - this script (its own source contains the search literal),
|
|
25
|
+
// - tests/path_match.mjs + tests/touches_overlap.mjs -- they assert the
|
|
26
|
+
// "src/gdsx must NOT match src/gds/" boundary edge; a mechanical half-rewrite
|
|
27
|
+
// (which leaves `src/gdsx` but changes `src/gds/`) would silently gut the
|
|
28
|
+
// test. Those two are hand-edited to src/bongos / src/bongosx so the edge
|
|
29
|
+
// stays meaningful.
|
|
30
|
+
//
|
|
31
|
+
// git ls-files is the file source, so gitignored generated docs
|
|
32
|
+
// (docs/repo-map.md, docs/session-log-index.md) are excluded -- they regenerate.
|
|
33
|
+
// Binary files are skipped via a NUL-byte sniff.
|
|
34
|
+
//
|
|
35
|
+
// Idempotent: a second run moves nothing and rewrites nothing (0 replacements).
|
|
36
|
+
|
|
37
|
+
const { execSync } = require('node:child_process');
|
|
38
|
+
const fs = require('node:fs');
|
|
39
|
+
const path = require('node:path');
|
|
40
|
+
|
|
41
|
+
const REPO_ROOT = execSync('git rev-parse --show-toplevel').toString().trim();
|
|
42
|
+
|
|
43
|
+
// (a) The slash form: `src/gds`, `src/gds/routes`, `"src/gds"` ... Trailing guard
|
|
44
|
+
// only (see header) so `src/gds-client` and `src/gdsx` are left alone.
|
|
45
|
+
const NEEDLE = /src\/gds(?![A-Za-z0-9_-])/g;
|
|
46
|
+
const REPLACEMENT = 'src/bongos';
|
|
47
|
+
|
|
48
|
+
// (b) The SPLIT-SEGMENT form: `path.join(root, 'src', 'gds', ...)` -- the segments
|
|
49
|
+
// are separate string args, so there is no literal `src/gds` substring for (a) to
|
|
50
|
+
// catch. Anchored on a PRECEDING quoted `'src'` segment so it rewrites only the
|
|
51
|
+
// `'gds'` that follows `'src'` -- NEVER `'scripts', 'gds'` (scripts/gds is not
|
|
52
|
+
// renamed). \s between segments tolerates a newline-split path.join. The `gds`
|
|
53
|
+
// quote must close immediately, so `'gdsx'` / `'gds-client'` never match.
|
|
54
|
+
const SEG = /(['"])src\1(\s*,\s*)(['"])gds\3/g;
|
|
55
|
+
const segReplace = (s) => s.replace(SEG, (_m, q1, sep, q2) => `${q1}src${q1}${sep}${q2}bongos${q2}`);
|
|
56
|
+
|
|
57
|
+
// (c) RELATIVE requires into the moved dir. A file DIRECTLY under src/ addresses
|
|
58
|
+
// its former sibling as `require('./gds/x')` -- no `src/` prefix, so (a) misses it,
|
|
59
|
+
// and after the move it dangles. `./gds` resolves to src/gds ONLY from a src-top-
|
|
60
|
+
// level file; a `./gds` in scripts/* means scripts/gds (NOT renamed) and a deeper
|
|
61
|
+
// src/**/* file resolves elsewhere -- so this pass is gated to `src/<file>` and
|
|
62
|
+
// never fires elsewhere. (Verified: the only matches are src/module-api.js +
|
|
63
|
+
// src/platform-server.js; no `../gds` relative forms exist.) `(?=\/|['"])` keeps
|
|
64
|
+
// `./gds-client` / `./gdsx` safe.
|
|
65
|
+
const isSrcTopLevel = (rel) => /^src\/[^/]+\.(?:js|mjs|cjs)$/.test(rel);
|
|
66
|
+
const REL = /(\.\/)gds(?=\/|['"])/g;
|
|
67
|
+
|
|
68
|
+
// (d) REGEX-ESCAPED slash form: `src\/gds` (backslash-slash) as written inside a
|
|
69
|
+
// RegExp literal -- e.g. route-rank-check.js's ROUTE_FILE_RE and the tests that
|
|
70
|
+
// match against it. `\/` is not the plain `/` (a) scans for, so (a) misses it.
|
|
71
|
+
const ESC = /src\\\/gds(?![A-Za-z0-9_-])/g;
|
|
72
|
+
|
|
73
|
+
// (e) WINDOWS double-backslash form: `src\\gds` in JS source (one backslash on
|
|
74
|
+
// disk-per-escape, two chars) -- Windows-path fixtures the matchers normalize
|
|
75
|
+
// (permission_path / publish_manifest). Trailing guard keeps `src\\gdsx` safe.
|
|
76
|
+
const WIN = /src\\\\gds(?![A-Za-z0-9_-])/g;
|
|
77
|
+
|
|
78
|
+
const EXCLUDE = new Set([
|
|
79
|
+
'scripts/gds/codemod-rename-src-gds.js',
|
|
80
|
+
'tests/path_match.mjs',
|
|
81
|
+
'tests/touches_overlap.mjs',
|
|
82
|
+
]);
|
|
83
|
+
|
|
84
|
+
function gitMv() {
|
|
85
|
+
const oldDir = path.join(REPO_ROOT, 'src', 'gds');
|
|
86
|
+
const newDir = path.join(REPO_ROOT, 'src', 'bongos');
|
|
87
|
+
if (fs.existsSync(newDir)) {
|
|
88
|
+
console.log('git mv: src/bongos already exists -- skipping move (idempotent).');
|
|
89
|
+
return;
|
|
90
|
+
}
|
|
91
|
+
if (!fs.existsSync(oldDir)) {
|
|
92
|
+
console.log('git mv: neither src/gds nor src/bongos present -- nothing to move.');
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
execSync('git mv src/gds src/bongos', { cwd: REPO_ROOT, stdio: 'inherit' });
|
|
96
|
+
console.log('git mv: src/gds -> src/bongos');
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
function isBinary(buf) {
|
|
100
|
+
const n = Math.min(buf.length, 8192);
|
|
101
|
+
for (let i = 0; i < n; i++) if (buf[i] === 0) return true;
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function main() {
|
|
106
|
+
gitMv();
|
|
107
|
+
|
|
108
|
+
const tracked = execSync('git ls-files', { cwd: REPO_ROOT, maxBuffer: 128 * 1024 * 1024 })
|
|
109
|
+
.toString().split('\n').filter(Boolean);
|
|
110
|
+
|
|
111
|
+
let filesChanged = 0;
|
|
112
|
+
let totalReplacements = 0;
|
|
113
|
+
const changed = [];
|
|
114
|
+
|
|
115
|
+
for (const rel of tracked) {
|
|
116
|
+
if (EXCLUDE.has(rel)) continue;
|
|
117
|
+
const abs = path.join(REPO_ROOT, rel);
|
|
118
|
+
let buf;
|
|
119
|
+
try { buf = fs.readFileSync(abs); } catch { continue; } // e.g. deleted-in-index
|
|
120
|
+
if (isBinary(buf)) continue;
|
|
121
|
+
const before = buf.toString('utf8');
|
|
122
|
+
const slashN = (before.match(NEEDLE) || []).length;
|
|
123
|
+
const segN = (before.match(SEG) || []).length;
|
|
124
|
+
const escN = (before.match(ESC) || []).length;
|
|
125
|
+
const winN = (before.match(WIN) || []).length;
|
|
126
|
+
const relN = isSrcTopLevel(rel) ? (before.match(REL) || []).length : 0;
|
|
127
|
+
if (slashN === 0 && segN === 0 && escN === 0 && winN === 0 && relN === 0) continue;
|
|
128
|
+
let after = segReplace(before.replace(NEEDLE, REPLACEMENT));
|
|
129
|
+
after = after.replace(ESC, 'src\\/bongos').replace(WIN, 'src\\\\bongos');
|
|
130
|
+
if (relN > 0) after = after.replace(REL, '$1bongos');
|
|
131
|
+
if (after === before) continue;
|
|
132
|
+
fs.writeFileSync(abs, after);
|
|
133
|
+
filesChanged++;
|
|
134
|
+
const n = slashN + segN + escN + winN + relN;
|
|
135
|
+
totalReplacements += n;
|
|
136
|
+
changed.push({ rel, n });
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
changed.sort((a, b) => b.n - a.n);
|
|
140
|
+
console.log(`\ncodemod: rewrote ${totalReplacements} reference(s) across ${filesChanged} file(s).`);
|
|
141
|
+
for (const c of changed) console.log(` ${String(c.n).padStart(4)} ${c.rel}`);
|
|
142
|
+
console.log('\nExcluded (hand-edited or self): ' + [...EXCLUDE].join(', '));
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
main();
|
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// MAS Phase 4 (#439) — Conductor dispatcher.
|
|
3
|
+
//
|
|
4
|
+
// Runs one or more grader specialists on the CURRENT working diff — the
|
|
5
|
+
// mid-flight counterpart to the ship-time panel. It REUSES the exact
|
|
6
|
+
// grader-workers/* machinery (same prompts, same cross-family model, same
|
|
7
|
+
// verdict logic), so a mid-flight Hacker review and a ship-time Hacker review
|
|
8
|
+
// are literally the same code. This is the "dispatch" capability the Conductor
|
|
9
|
+
// points at: when you've touched a security surface, you (or the Conductor's
|
|
10
|
+
// directive) run this to bring the Hacker in NOW instead of waiting for ship.
|
|
11
|
+
//
|
|
12
|
+
// Dispatch mode is SESSION-MEDIATED (ADR 0024 Phase 4): the specialist-on-diff
|
|
13
|
+
// modes below run inside the builder's session, visibly. The Conductor hook
|
|
14
|
+
// recommends running it; the session executes it.
|
|
15
|
+
//
|
|
16
|
+
// Phase 4.5 (ADR 0024 — the one deferred MAS leg) adds the AUTONOMOUS path:
|
|
17
|
+
// `auto-dispatch` selects the next claimable autonomous task WITHOUT a human
|
|
18
|
+
// prompt and emits a dispatch directive (the `/builder-claim` command) for a
|
|
19
|
+
// runner to execute. It still "proposes, never disposes" — this entry point
|
|
20
|
+
// SELECTS + EMITS; it does not itself spawn a build session or land code (that
|
|
21
|
+
// stays the runner/ship-pipeline's job, where ADR 0016's DB-enforced gates and
|
|
22
|
+
// the grader still bite). It is gated by the same $0 deterministic
|
|
23
|
+
// `autonomy-gate` precheck the nightly routines use, so it is INERT until
|
|
24
|
+
// OTB_AUTONOMY_ENABLED=1 and respects the MTD spend brake + no-signal skips.
|
|
25
|
+
// The claimable feed is the protected-path-filtered `fit:'autonomous'` view, so
|
|
26
|
+
// the permission/methodology/deploy core can never be auto-selected (SR-12).
|
|
27
|
+
//
|
|
28
|
+
// Usage:
|
|
29
|
+
// node scripts/gds/conductor-dispatch.js [hacker|narc|quality|efficiency|auto|all] [--base <ref>]
|
|
30
|
+
// node scripts/gds/conductor-dispatch.js auto-dispatch [--json]
|
|
31
|
+
//
|
|
32
|
+
// auto (default) → pick specialists by what changed (Hacker if a security
|
|
33
|
+
// surface is in the diff; nothing otherwise → suggests `all`)
|
|
34
|
+
// all → run the full 4-worker panel on the current diff
|
|
35
|
+
// <name> → run just that specialist
|
|
36
|
+
// auto-dispatch → Phase 4.5: autonomous selection. Gate → pick the top
|
|
37
|
+
// claimable autonomous task → emit its claim directive.
|
|
38
|
+
//
|
|
39
|
+
// Diff = everything different from origin/main right now: committed-on-branch
|
|
40
|
+
// PLUS uncommitted, via `git diff <merge-base HEAD origin/main>`.
|
|
41
|
+
//
|
|
42
|
+
// Exit code: 0 if no worker returned verdict 'fail'; 1 if any did (so it can
|
|
43
|
+
// gate a script). Informational findings print regardless. For auto-dispatch:
|
|
44
|
+
// 0 when a task was selected (a directive was emitted), 1 on a NO-GO / no work.
|
|
45
|
+
|
|
46
|
+
const { execFileSync } = require('node:child_process');
|
|
47
|
+
const { cliClient } = require('./cli-lib');
|
|
48
|
+
const grader = require('../../modules/grading/grader');
|
|
49
|
+
// Phase 4.5: reuse the $0 deterministic autonomy precheck (the same gate the
|
|
50
|
+
// nightly routines run as Step 0). It owns the master kill-switch, the MTD
|
|
51
|
+
// spend brake, and the no-signal skip — autonomous dispatch must not re-invent
|
|
52
|
+
// any of them. Built INERT (OTB_AUTONOMY_ENABLED off) → precheck returns GO but
|
|
53
|
+
// gatherSignals isn't paid for; selection below still runs but the runner that
|
|
54
|
+
// consumes the directive is what actually spends.
|
|
55
|
+
const autonomyGate = require('./autonomy-gate');
|
|
56
|
+
// Single source of truth shared with the Conductor hook — see
|
|
57
|
+
// src/bongos/sensitive-surfaces.js. (The Phase 4 dogfood flagged the prior
|
|
58
|
+
// hand-copied pattern set in this file as a drift risk vs. the hook.)
|
|
59
|
+
const { isSensitive } = require('../../src/bongos/sensitive-surfaces');
|
|
60
|
+
// Canonical touches[] matcher — the same one ship.js's scanner + the Conductor
|
|
61
|
+
// hook use. (#439 first-ship: the panel flagged that bestMatchingClaim had
|
|
62
|
+
// re-hand-rolled this coverage logic — the exact drift this PR fixed for the
|
|
63
|
+
// sensitive-surface set. Route through the one matcher instead.)
|
|
64
|
+
const { matchOne } = require('../../src/bongos/path-match');
|
|
65
|
+
|
|
66
|
+
const GRADER_DIFF_CHAR_CAP = 250_000;
|
|
67
|
+
const GRADER_TIMEOUT_MS = 240_000;
|
|
68
|
+
|
|
69
|
+
// --- pure: which specialists does `auto` pick for a given changed-file set? ---
|
|
70
|
+
// Phase 4 auto-dispatch is deliberately security-focused: Hacker is the
|
|
71
|
+
// highest-value mid-flight check and the one cleanly triggered by file paths.
|
|
72
|
+
// Efficiency Monger needs perf-context paths don't reveal; Narc/Quality want
|
|
73
|
+
// a finished task to grade against — all three remain available explicitly.
|
|
74
|
+
function pickSpecialists(changedFiles) {
|
|
75
|
+
const picks = [];
|
|
76
|
+
if ((changedFiles || []).some((f) => isSensitive(f))) {
|
|
77
|
+
picks.push('hacker');
|
|
78
|
+
}
|
|
79
|
+
return picks;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
// --- pure: Phase 4.5 autonomous task selection ---
|
|
83
|
+
// Given a GO/NO-GO gate result and the already-fetched claimable-autonomous
|
|
84
|
+
// feed, pick the work to dispatch and shape the directive. Pure (no I/O) so the
|
|
85
|
+
// selection contract is unit-testable; the live gate + feed are gathered in
|
|
86
|
+
// autoDispatch() below.
|
|
87
|
+
//
|
|
88
|
+
// Contract:
|
|
89
|
+
// - gate.decision !== 'go' → { ok:false, reason } (no work dispatched)
|
|
90
|
+
// - empty/absent feed → { ok:false, reason:'no claimable…' }
|
|
91
|
+
// - otherwise → { ok:true, task, command, directive }
|
|
92
|
+
//
|
|
93
|
+
// The feed is ALREADY ordered by priority then calibrated-estimate then
|
|
94
|
+
// created_at (listClaimableTasks) and ALREADY protected-path filtered for the
|
|
95
|
+
// autonomous fit (SR-12), so "the top row" is the right pick — we don't
|
|
96
|
+
// re-rank, we take rows[0]. command is the exact `/builder-claim` a runner
|
|
97
|
+
// runs; the entry point proposes it, the runner disposes.
|
|
98
|
+
function selectAutonomousDispatch(gate, claimable) {
|
|
99
|
+
if (!gate || gate.decision !== 'go') {
|
|
100
|
+
return { ok: false, reason: gate ? gate.reason : 'no gate decision' };
|
|
101
|
+
}
|
|
102
|
+
const rows = Array.isArray(claimable) ? claimable : [];
|
|
103
|
+
if (rows.length === 0) {
|
|
104
|
+
return { ok: false, reason: 'no claimable autonomous tasks — nothing to dispatch' };
|
|
105
|
+
}
|
|
106
|
+
const t = rows[0];
|
|
107
|
+
const task = {
|
|
108
|
+
id: t.id,
|
|
109
|
+
title: t.title || '(untitled)',
|
|
110
|
+
version_id: t.version_id,
|
|
111
|
+
est_minutes: t.est_minutes_calibrated != null ? t.est_minutes_calibrated : t.est_minutes,
|
|
112
|
+
discipline: t.discipline || null,
|
|
113
|
+
};
|
|
114
|
+
const command = `node scripts/gds/claim.js ${task.id}`;
|
|
115
|
+
return {
|
|
116
|
+
ok: true,
|
|
117
|
+
task,
|
|
118
|
+
command,
|
|
119
|
+
directive: `Autonomously dispatch task #${task.id} — ${task.title}. Run \`${command}\`, build it, then \`/builder-ship\`.`,
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
// --- git diff plumbing (mirrors scripts/gds/ship.js's computation) ---
|
|
124
|
+
|
|
125
|
+
function git(args) {
|
|
126
|
+
try {
|
|
127
|
+
return execFileSync('git', args, { encoding: 'utf8', timeout: 5000, stdio: ['ignore', 'pipe', 'ignore'] });
|
|
128
|
+
} catch (_) {
|
|
129
|
+
return '';
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
function repoRoot() {
|
|
134
|
+
const top = git(['rev-parse', '--show-toplevel']).trim();
|
|
135
|
+
return top || process.cwd();
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
function resolveBase(explicit) {
|
|
139
|
+
if (explicit) return explicit;
|
|
140
|
+
const mb = git(['merge-base', 'HEAD', 'origin/main']).trim();
|
|
141
|
+
// Fallback when origin/main can't be resolved (offline / fresh clone): diff
|
|
142
|
+
// against HEAD. NOTE this only surfaces UNCOMMITTED work — committed-on-branch
|
|
143
|
+
// changes are relative to a base we couldn't compute, so they're dropped in
|
|
144
|
+
// this degraded mode. Untracked files are still picked up separately.
|
|
145
|
+
return mb || 'HEAD';
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
function untrackedFiles() {
|
|
149
|
+
// `git diff` shows only TRACKED changes — brand-new files are invisible to
|
|
150
|
+
// it. A security/quality reviewer must not be blind to a new route file, so
|
|
151
|
+
// we list untracked files explicitly (mirrors the hook's status-based
|
|
152
|
+
// collection). The worker has a Read tool + cwd=repo root, so naming them is
|
|
153
|
+
// enough — it can Read the contents.
|
|
154
|
+
const out = git(['ls-files', '--others', '--exclude-standard']);
|
|
155
|
+
return out.split('\n').map((s) => s.trim()).filter(Boolean);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
// `untracked` is computed once in main() and threaded through, so we don't
|
|
159
|
+
// spawn `git ls-files` twice per dispatch (Efficiency Monger flagged the
|
|
160
|
+
// double-spawn on the Phase 4 dogfood).
|
|
161
|
+
function changedFilesSince(base, untracked) {
|
|
162
|
+
// `git diff --name-only <base>` = tracked changes (committed + uncommitted)
|
|
163
|
+
// vs base. Union with untracked so new files are included.
|
|
164
|
+
const tracked = git(['diff', '--name-only', base]).split('\n').map((s) => s.trim()).filter(Boolean);
|
|
165
|
+
return [...new Set([...tracked, ...untracked])];
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
function diffTextSince(base, untracked) {
|
|
169
|
+
let diff = git(['diff', '--no-color', '-M', base]);
|
|
170
|
+
// Note untracked files at the tail so the worker knows to Read them (their
|
|
171
|
+
// content isn't in the tracked diff).
|
|
172
|
+
if (untracked.length) {
|
|
173
|
+
diff += `\n\n[untracked new files — not shown in the diff above; Read them for content]\n${untracked.map((f) => ` + ${f}`).join('\n')}\n`;
|
|
174
|
+
}
|
|
175
|
+
if (!diff.trim()) return '';
|
|
176
|
+
if (diff.length > GRADER_DIFF_CHAR_CAP) {
|
|
177
|
+
return `${diff.slice(0, GRADER_DIFF_CHAR_CAP)}\n\n[diff truncated — original ${diff.length} chars. The worker can Read any file for full context.]`;
|
|
178
|
+
}
|
|
179
|
+
return diff;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
function diffStatsSince(base, untracked) {
|
|
183
|
+
const s = git(['diff', '--shortstat', base]);
|
|
184
|
+
const f = /(\d+)\s+files?\s+changed/.exec(s);
|
|
185
|
+
const i = /(\d+)\s+insertions?\(\+\)/.exec(s);
|
|
186
|
+
const d = /(\d+)\s+deletions?\(-\)/.exec(s);
|
|
187
|
+
// Untracked new files aren't in `git diff` shortstat; add them to the file
|
|
188
|
+
// count so the worker's diff-size context isn't undercounted. (Their line
|
|
189
|
+
// counts aren't computed — the worker has the file list + a Read tool.)
|
|
190
|
+
const untrackedCount = Array.isArray(untracked) ? untracked.length : 0;
|
|
191
|
+
return {
|
|
192
|
+
files_changed: (f ? Number(f[1]) : 0) + untrackedCount,
|
|
193
|
+
lines_added: i ? Number(i[1]) : 0,
|
|
194
|
+
lines_removed: d ? Number(d[1]) : 0,
|
|
195
|
+
};
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
// Pick the active claim whose touches[] best overlap the changed files — the
|
|
199
|
+
// claim the current diff most plausibly belongs to. With multiple (possibly
|
|
200
|
+
// stale) claims, blindly taking claims[0] grades the diff against the wrong
|
|
201
|
+
// task: the Phase 4 dogfood's Narc FAILed because it graded Conductor code
|
|
202
|
+
// against an unrelated stale offsite-backup claim. Best-overlap fixes that.
|
|
203
|
+
function bestMatchingClaim(claims, changedFiles) {
|
|
204
|
+
if (!Array.isArray(claims) || claims.length === 0) return null;
|
|
205
|
+
const files = Array.isArray(changedFiles) ? changedFiles : [];
|
|
206
|
+
let best = claims[0];
|
|
207
|
+
let bestScore = -1;
|
|
208
|
+
for (const c of claims) {
|
|
209
|
+
// Use the canonical matcher; ties keep the earlier claim (strict >).
|
|
210
|
+
const score = files.filter((f) => matchOne(f, c.touches || []) !== null).length;
|
|
211
|
+
if (score > bestScore) { bestScore = score; best = c; }
|
|
212
|
+
}
|
|
213
|
+
return best;
|
|
214
|
+
}
|
|
215
|
+
|
|
216
|
+
// --- task context (best-effort) ---
|
|
217
|
+
// Workers grade a diff against a task. For a mid-flight review we use the
|
|
218
|
+
// best-matching active claim's task; otherwise we synthesize a minimal
|
|
219
|
+
// context so the specialist judges the diff on its own merits.
|
|
220
|
+
async function resolveTaskContext(changedFiles) {
|
|
221
|
+
try {
|
|
222
|
+
const api = await cliClient();
|
|
223
|
+
const me = await api.me.getMe();
|
|
224
|
+
if (me.ok) {
|
|
225
|
+
const claims = me.data.active_claims || (me.data.active_claim ? [me.data.active_claim] : []);
|
|
226
|
+
if (claims.length > 0) {
|
|
227
|
+
const c = bestMatchingClaim(claims, changedFiles);
|
|
228
|
+
// Pull the full description for richer context (best-effort). Coerce
|
|
229
|
+
// task_id to an integer before interpolating it into the URL path —
|
|
230
|
+
// it's a trusted internal value, but a guard costs nothing and closes
|
|
231
|
+
// the theoretical path-injection the Hacker noted.
|
|
232
|
+
let description = '';
|
|
233
|
+
const taskId = Number(c.task_id);
|
|
234
|
+
if (Number.isInteger(taskId)) {
|
|
235
|
+
try {
|
|
236
|
+
const t = await api.tasks.getTasksId({ id: taskId });
|
|
237
|
+
if (t.ok && t.data.task) description = t.data.task.description || '';
|
|
238
|
+
} catch (_) { /* fall through to title-only */ }
|
|
239
|
+
}
|
|
240
|
+
return {
|
|
241
|
+
id: c.task_id,
|
|
242
|
+
title: c.title || '(active claim)',
|
|
243
|
+
description: description || '(no description fetched — mid-flight review; judge the diff on its own merits)',
|
|
244
|
+
kind: 'unclassified',
|
|
245
|
+
version_id: c.version_id,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
} catch (_) { /* offline / no session */ }
|
|
250
|
+
return {
|
|
251
|
+
id: null,
|
|
252
|
+
title: '(mid-flight review — no active claim)',
|
|
253
|
+
description: 'Conductor mid-flight dispatch. No formal task/acceptance context; review the current working changes for this specialist\'s concern and judge the diff on its own merits.',
|
|
254
|
+
kind: 'unclassified',
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
|
|
258
|
+
// --- rendering ---
|
|
259
|
+
|
|
260
|
+
function renderWorker(w) {
|
|
261
|
+
const lines = [];
|
|
262
|
+
const status = w.error ? `ERROR (${w.error})` : w.verdict.toUpperCase();
|
|
263
|
+
const scores = Object.entries(w.scores || {})
|
|
264
|
+
.filter(([, v]) => Number.isFinite(v))
|
|
265
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
266
|
+
.join(' ');
|
|
267
|
+
lines.push(`── ${w.name} — ${status}${scores ? ' · ' + scores : ''}${w.confidence != null ? ` · conf=${w.confidence}` : ''}`);
|
|
268
|
+
if (Array.isArray(w.issues) && w.issues.length) {
|
|
269
|
+
for (const it of w.issues) {
|
|
270
|
+
const sev = String(it.severity || '?').padEnd(7);
|
|
271
|
+
lines.push(` [${sev}] ${it.file || '?'} — ${String(it.summary || '').replace(/\s+/g, ' ').trim()}`);
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
// First substantive line of the worker's own notes, for a human-readable
|
|
275
|
+
// gist. The worker's notes_md always opens with a "<Name> — VERDICT (...)"
|
|
276
|
+
// header line we've already rendered (status/scores above), so drop line 0
|
|
277
|
+
// and take the next non-empty line — robust regardless of its content.
|
|
278
|
+
const noteLines = (w.notes_md || '').split('\n').slice(1);
|
|
279
|
+
const note = noteLines.find((l) => l.trim());
|
|
280
|
+
if (note) lines.push(` ${note.trim()}`);
|
|
281
|
+
return lines.join('\n');
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
// --- Phase 4.5: autonomous background dispatch ---
|
|
285
|
+
// Gate (deterministic, $0) → select the top claimable autonomous task → emit
|
|
286
|
+
// the claim directive. No git diff, no grader, no model spend in this path: it
|
|
287
|
+
// is the SELECTOR, and the runner that consumes the directive is what spends.
|
|
288
|
+
// Deps are injectable so the live wiring stays a thin shell over pure logic.
|
|
289
|
+
async function autoDispatch(deps = {}) {
|
|
290
|
+
const ROUTINE = 'conductor-auto-dispatch';
|
|
291
|
+
const precheck = deps.precheck || autonomyGate.precheck;
|
|
292
|
+
// The same protected-path-filtered autonomous feed the gate itself counts.
|
|
293
|
+
// Required lazily (a module require) so `require()`-ing this file for its pure
|
|
294
|
+
// exports never pulls the lifecycle data layer / a DB pool.
|
|
295
|
+
const listClaimable = deps.listClaimableTasks
|
|
296
|
+
|| ((opts) => require('../../modules/lifecycle/db').listClaimableTasks(opts));
|
|
297
|
+
|
|
298
|
+
const gate = await precheck(ROUTINE).catch((e) => ({ decision: 'no-go', reason: `gate error: ${e && e.message}` }));
|
|
299
|
+
// Only pay for the feed when the gate said GO.
|
|
300
|
+
let claimable = [];
|
|
301
|
+
if (gate.decision === 'go') {
|
|
302
|
+
claimable = await listClaimable({ fit: 'autonomous' }).catch(() => []);
|
|
303
|
+
}
|
|
304
|
+
const result = selectAutonomousDispatch(gate, claimable);
|
|
305
|
+
return { routine: ROUTINE, gate, ...result };
|
|
306
|
+
}
|
|
307
|
+
|
|
308
|
+
async function main() {
|
|
309
|
+
const args = process.argv.slice(2);
|
|
310
|
+
|
|
311
|
+
// Phase 4.5 — autonomous dispatch is its own mode (no diff/grader machinery).
|
|
312
|
+
if (args.includes('auto-dispatch')) {
|
|
313
|
+
const out = await autoDispatch();
|
|
314
|
+
if (args.includes('--json')) {
|
|
315
|
+
console.log(JSON.stringify(out, null, 2));
|
|
316
|
+
} else {
|
|
317
|
+
console.log(`🎼 Conductor auto-dispatch — gate: ${out.gate.decision.toUpperCase()} (${out.gate.reason})`);
|
|
318
|
+
if (out.ok) {
|
|
319
|
+
console.log(` → selected task #${out.task.id}: ${out.task.title}`);
|
|
320
|
+
console.log(` → ${out.directive}`);
|
|
321
|
+
} else {
|
|
322
|
+
console.log(` → no dispatch: ${out.reason}`);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
process.exit(out.ok ? 0 : 1);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
const baseArg = (() => { const i = args.indexOf('--base'); return i >= 0 ? args[i + 1] : null; })();
|
|
329
|
+
// --base is passed to git as an array arg (no shell), but reject anything
|
|
330
|
+
// that isn't a plausible ref so a malformed value can't silently produce a
|
|
331
|
+
// misleading review scope (dev-tool surface, but cheap to validate).
|
|
332
|
+
// Reject anything that isn't a plausible git ref (first char not '-', so a
|
|
333
|
+
// value like '--format=...' can't masquerade as a ref).
|
|
334
|
+
if (baseArg && !/^[\w.@~^{}/][\w./@~^{}-]*$/.test(baseArg)) {
|
|
335
|
+
console.error(`Invalid --base ref '${baseArg}'. Expected a git ref (commit/branch/tag).`);
|
|
336
|
+
process.exit(2);
|
|
337
|
+
}
|
|
338
|
+
const target = (args.find((a) => !a.startsWith('--') && a !== baseArg) || 'auto').toLowerCase();
|
|
339
|
+
|
|
340
|
+
const root = repoRoot();
|
|
341
|
+
process.chdir(root); // so workers' Read tool resolves repo-relative paths
|
|
342
|
+
const base = resolveBase(baseArg);
|
|
343
|
+
const untracked = untrackedFiles(); // computed once, threaded through
|
|
344
|
+
const files = changedFilesSince(base, untracked);
|
|
345
|
+
const diff = diffTextSince(base, untracked);
|
|
346
|
+
const stats = diffStatsSince(base, untracked);
|
|
347
|
+
|
|
348
|
+
if (files.length === 0) {
|
|
349
|
+
console.log('Conductor dispatch: no changes vs origin/main — nothing to review.');
|
|
350
|
+
process.exit(0);
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
// Resolve which specialists to run.
|
|
354
|
+
const REGISTRY = grader.WORKERS.REGISTRY;
|
|
355
|
+
let kinds;
|
|
356
|
+
if (target === 'all') {
|
|
357
|
+
kinds = grader.WORKERS.DEFAULT_PANEL.slice();
|
|
358
|
+
} else if (target === 'auto') {
|
|
359
|
+
kinds = pickSpecialists(files);
|
|
360
|
+
if (kinds.length === 0) {
|
|
361
|
+
console.log(`Conductor dispatch (auto): ${files.length} file(s) changed, none on a security surface — nothing auto-triggers.`);
|
|
362
|
+
console.log('For a full mid-flight review of all four lenses, run: node scripts/gds/conductor-dispatch.js all');
|
|
363
|
+
process.exit(0);
|
|
364
|
+
}
|
|
365
|
+
} else if (Object.hasOwn(REGISTRY, target)) {
|
|
366
|
+
// hasOwn, not truthiness — a target of '__proto__'/'constructor' would
|
|
367
|
+
// otherwise resolve off Object.prototype rather than a real worker.
|
|
368
|
+
kinds = [target];
|
|
369
|
+
} else {
|
|
370
|
+
console.error(`Unknown specialist '${target}'. Use one of: ${Object.keys(REGISTRY).join(', ')}, auto, all.`);
|
|
371
|
+
process.exit(2);
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
const task = await resolveTaskContext(files);
|
|
375
|
+
const model = grader.selectGraderModel({});
|
|
376
|
+
const valueSummary = '(work in progress — Conductor mid-flight dispatch; no final value summary yet)';
|
|
377
|
+
|
|
378
|
+
// Deterministic route-rank pre-pass (#475) — same helper the ship-time
|
|
379
|
+
// grader uses. Findings feed the Hacker as input; its pseudo-worker result
|
|
380
|
+
// is appended below so the dispatch verdict reflects it. Runs only when a
|
|
381
|
+
// route file is in the diff (zero cost otherwise).
|
|
382
|
+
const routeRank = grader.routeRankPrePass(files);
|
|
383
|
+
|
|
384
|
+
console.log(`🎼 Conductor dispatch → ${kinds.join(', ')} (model=${model}, ${files.length} changed file(s), base=${base.slice(0, 8)})`);
|
|
385
|
+
console.log(` task context: ${task.id ? '#' + task.id + ' ' + task.title : task.title}`);
|
|
386
|
+
if (routeRank) console.log(' + deterministic route-rank check (route file in diff)');
|
|
387
|
+
console.log('');
|
|
388
|
+
|
|
389
|
+
const results = await Promise.all(kinds.map((k) => grader.WORKERS.runWorker(REGISTRY[k], {
|
|
390
|
+
task,
|
|
391
|
+
valueSummary,
|
|
392
|
+
diff,
|
|
393
|
+
changedFiles: files,
|
|
394
|
+
diffStats: stats,
|
|
395
|
+
model,
|
|
396
|
+
runOpts: { timeoutMs: GRADER_TIMEOUT_MS, cwd: root },
|
|
397
|
+
runSubagentFn: grader.runSubagent,
|
|
398
|
+
extractAssistantResultFn: grader.extractAssistantResult,
|
|
399
|
+
deterministicFindings: routeRank ? routeRank.findings : null,
|
|
400
|
+
})));
|
|
401
|
+
// Append the deterministic pseudo-worker so a write-route 'unknown' fails the
|
|
402
|
+
// dispatch on its own, even if the requested specialist set excludes Hacker.
|
|
403
|
+
if (routeRank) results.push(routeRank.workerResult);
|
|
404
|
+
|
|
405
|
+
for (const w of results) {
|
|
406
|
+
console.log(renderWorker(w));
|
|
407
|
+
console.log('');
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
const anyFail = results.some((w) => w.verdict === 'fail');
|
|
411
|
+
const anyConcerns = results.some((w) => w.verdict === 'concerns');
|
|
412
|
+
const summary = anyFail ? 'FAIL — at least one specialist flagged a blocker'
|
|
413
|
+
: anyConcerns ? 'CONCERNS — review the flagged items'
|
|
414
|
+
: 'CLEAR — no blocking findings';
|
|
415
|
+
console.log(`Conductor dispatch verdict: ${summary}`);
|
|
416
|
+
process.exit(anyFail ? 1 : 0);
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
if (require.main === module) {
|
|
420
|
+
main().catch((err) => {
|
|
421
|
+
console.error('Conductor dispatch error:', err && err.message ? err.message : err);
|
|
422
|
+
process.exit(2);
|
|
423
|
+
});
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
module.exports = { pickSpecialists, bestMatchingClaim, selectAutonomousDispatch, autoDispatch };
|