@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,200 @@
|
|
|
1
|
+
// src/instance-config.js — the instance config namespace (R61 / task 1200, ADR 0062).
|
|
2
|
+
//
|
|
3
|
+
// Two instance-identity leaks lived hard-coded across the codebase: the CLI
|
|
4
|
+
// config root (~/.config/otb/) and the OTB_*/PMS_*/GDS_* env-var prefixes. This
|
|
5
|
+
// module makes BOTH resolve from the branding contract (src/branding.js) so a
|
|
6
|
+
// fresh Cloud Bongos instance uses a neutral namespace, while keeping read-side
|
|
7
|
+
// back-compat so existing OTB installs and old local sessions never break.
|
|
8
|
+
//
|
|
9
|
+
// config dir : ~/.config/<branding.configDir> (OTB → "otb", vanilla → "cloudbongos")
|
|
10
|
+
// env prefix : <branding.envPrefix>_<SUFFIX> (OTB → "OTB_", vanilla → "CLOUDBONGOS_")
|
|
11
|
+
//
|
|
12
|
+
// The cut is deliberately ZERO-RISK for the live instance: OTB's branding pack
|
|
13
|
+
// pins configDir="otb" + envPrefix="OTB", so every path + env read resolves to
|
|
14
|
+
// EXACTLY what it does today. Only a fresh/neutral instance gets the neutral
|
|
15
|
+
// namespace. On READ we additionally fall back to the historical hard-coded dir
|
|
16
|
+
// and to the legacy env prefixes, so a value set the old way still resolves.
|
|
17
|
+
|
|
18
|
+
const fs = require('node:fs');
|
|
19
|
+
const os = require('node:os');
|
|
20
|
+
const path = require('node:path');
|
|
21
|
+
|
|
22
|
+
// Last-resort default if branding can't be read at all (vanilla, never OTB).
|
|
23
|
+
const FALLBACK_DIR = 'cloudbongos';
|
|
24
|
+
const FALLBACK_ENV_PREFIX = 'CLOUDBONGOS';
|
|
25
|
+
|
|
26
|
+
// Historical hard-coded config dir — always also checked on READ so a session /
|
|
27
|
+
// ledger / key written before R61 (or by an instance that later changed its
|
|
28
|
+
// configDir) still resolves. Write always targets the configured dir.
|
|
29
|
+
const LEGACY_DIRS = ['otb'];
|
|
30
|
+
|
|
31
|
+
// Legacy env prefixes tried (in order) AFTER the configured one. These cover the
|
|
32
|
+
// three prefixes that coexisted pre-R61 (OTB_ operational, GDS_ API/auth, PMS_
|
|
33
|
+
// the original name). Keeping them means prod's existing env is honored verbatim.
|
|
34
|
+
const LEGACY_ENV_PREFIXES = ['OTB', 'GDS', 'PMS'];
|
|
35
|
+
|
|
36
|
+
// Lazy require (ADR 0108 §1 made this a two-way edge: branding.js now requires
|
|
37
|
+
// resolveCoreRoot()/resolveInstanceRoot() from this module, so a top-level
|
|
38
|
+
// require('./branding') here would form an eval-time cycle — branding.js would
|
|
39
|
+
// receive this module's still-empty exports and crash on the undefined resolver).
|
|
40
|
+
// By call time both modules have finished loading.
|
|
41
|
+
function safeBrand() {
|
|
42
|
+
try { return require('./branding').branding(); } catch { return {}; }
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function configDirName(b = safeBrand()) {
|
|
46
|
+
return b.configDir || FALLBACK_DIR;
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
function envPrefix(b = safeBrand()) {
|
|
50
|
+
return b.envPrefix || FALLBACK_ENV_PREFIX;
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
// Absolute path to the instance config dir — the WRITE target and first read.
|
|
54
|
+
function configHome(b = safeBrand()) {
|
|
55
|
+
return path.join(os.homedir(), '.config', configDirName(b));
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// All config dirs to try on READ, configured first then legacy, de-duped.
|
|
59
|
+
function configReadDirs(b = safeBrand()) {
|
|
60
|
+
const home = os.homedir();
|
|
61
|
+
const dirs = [configHome(b)];
|
|
62
|
+
for (const d of LEGACY_DIRS) {
|
|
63
|
+
const p = path.join(home, '.config', d);
|
|
64
|
+
if (!dirs.includes(p)) dirs.push(p);
|
|
65
|
+
}
|
|
66
|
+
return dirs;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
// Path to a named file inside the configured (write) config dir.
|
|
70
|
+
function configPath(name, b = safeBrand()) {
|
|
71
|
+
return path.join(configHome(b), name);
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
// Every candidate path for a named config file, configured dir first then legacy
|
|
75
|
+
// dirs — for read-with-fallback (the gds-session.json / cost_ledger pattern).
|
|
76
|
+
function configReadPaths(name, b = safeBrand()) {
|
|
77
|
+
return configReadDirs(b).map((d) => path.join(d, name));
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Read the first existing copy of a config file across the read dirs (configured
|
|
81
|
+
// dir first, then legacy ~/.config/otb). Returns the file contents, or null if
|
|
82
|
+
// none exists. Non-ENOENT errors (e.g. permissions) propagate. This is the
|
|
83
|
+
// read-side back-compat shim every local-dev config file (discord-bot.json,
|
|
84
|
+
// gds-github.json, the secret key, …) routes through.
|
|
85
|
+
function readConfigFileSync(name, { encoding = 'utf8', b = safeBrand() } = {}) {
|
|
86
|
+
for (const p of configReadPaths(name, b)) {
|
|
87
|
+
try { return fs.readFileSync(p, encoding); }
|
|
88
|
+
catch (e) { if (e.code !== 'ENOENT') throw e; }
|
|
89
|
+
}
|
|
90
|
+
return null;
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Resolve an env var by SUFFIX across the configured prefix + legacy prefixes.
|
|
94
|
+
// resolveEnv('API_BASE') tries <PREFIX>_API_BASE (CLOUDBONGOS_ on vanilla, OTB_
|
|
95
|
+
// on the OTB instance), then OTB_/GDS_/PMS_API_BASE. Returns undefined if none
|
|
96
|
+
// is set to a non-empty value. `extraLegacy` prepends suffix-specific aliases
|
|
97
|
+
// (rare — e.g. a var that had an idiosyncratic legacy name).
|
|
98
|
+
function resolveEnv(suffix, { env = process.env, prefix = envPrefix(), legacy = LEGACY_ENV_PREFIXES } = {}) {
|
|
99
|
+
const seen = new Set();
|
|
100
|
+
for (const pfx of [prefix, ...legacy]) {
|
|
101
|
+
if (!pfx || seen.has(pfx)) continue;
|
|
102
|
+
seen.add(pfx);
|
|
103
|
+
const v = env[`${pfx}_${suffix}`];
|
|
104
|
+
if (v !== undefined && v !== '') return v;
|
|
105
|
+
}
|
|
106
|
+
return undefined;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// resolveCoreRoot() / resolveInstanceRoot() — the ADR 0108 §1 configurable-root
|
|
110
|
+
// resolvers, extending this module's established zero-risk pattern from
|
|
111
|
+
// ~/.config to the in-repo roots. Two OPPOSITE directions, both load-bearing:
|
|
112
|
+
//
|
|
113
|
+
// resolveCoreRoot() -> where the core PACKAGE's own files live (core
|
|
114
|
+
// modules/, core migrations/, infra/ installers,
|
|
115
|
+
// *.neutral.json defaults). Today: the repo root
|
|
116
|
+
// (this file lives at <root>/src/instance-config.js).
|
|
117
|
+
// Packaged later: the node_modules package dir —
|
|
118
|
+
// that flip needs no further per-site edits.
|
|
119
|
+
//
|
|
120
|
+
// resolveInstanceRoot() -> where HOST content lives (config/, instance
|
|
121
|
+
// modules/, migrations/instance/, identity).
|
|
122
|
+
// Precedence: <PREFIX>_INSTANCE_ROOT env -> a
|
|
123
|
+
// bongos.config.json pointer -> process.cwd().
|
|
124
|
+
//
|
|
125
|
+
// Today process.cwd() === resolveCoreRoot() === the single repo root (the
|
|
126
|
+
// live instance runs from its own checkout), so routing a reader through
|
|
127
|
+
// either resolver is BYTE-IDENTICAL for prod. The split only diverges once a
|
|
128
|
+
// consumer repo installs the core as a dependency.
|
|
129
|
+
function resolveCoreRoot() {
|
|
130
|
+
return path.resolve(__dirname, '..');
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// Reads an optional bongos.config.json at `cwd` for an `instanceRoot` pointer
|
|
134
|
+
// (a relative or absolute path). Returns undefined when absent/invalid so the
|
|
135
|
+
// caller falls through to process.cwd() — a missing/malformed pointer must
|
|
136
|
+
// never crash boot (same fail-to-default posture as branding/modules).
|
|
137
|
+
function readInstanceRootPointer(cwd = process.cwd()) {
|
|
138
|
+
try {
|
|
139
|
+
const raw = fs.readFileSync(path.join(cwd, 'bongos.config.json'), 'utf8');
|
|
140
|
+
const j = JSON.parse(raw);
|
|
141
|
+
if (j && typeof j.instanceRoot === 'string' && j.instanceRoot.trim()) {
|
|
142
|
+
return path.resolve(cwd, j.instanceRoot);
|
|
143
|
+
}
|
|
144
|
+
} catch (e) { if (e.code !== 'ENOENT') throw e; }
|
|
145
|
+
return undefined;
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// The instance root ONLY when it is EXPLICITLY pointed at (env var or a
|
|
149
|
+
// bongos.config.json pointer) — never the cwd fallback. `null` when neither is
|
|
150
|
+
// set. Callers that must write to a DETERMINISTIC location (a generated-doc
|
|
151
|
+
// write) use this so the output never lands "wherever the process happens to be".
|
|
152
|
+
function resolveInstanceRootExplicit({ env = process.env } = {}) {
|
|
153
|
+
// prefix is pinned to FALLBACK_ENV_PREFIX rather than envPrefix()'s default —
|
|
154
|
+
// envPrefix() reads the brand pack, and the brand pack's own path is resolved
|
|
155
|
+
// FROM this function (branding.js's INSTANCE_PATH calls resolveInstanceRoot()).
|
|
156
|
+
// Calling back into safeBrand() here would be a genuine self-reference, not
|
|
157
|
+
// just a require-order artifact. LEGACY_ENV_PREFIXES already covers OTB's
|
|
158
|
+
// configured prefix, so this is byte-identical for the live instance (mirrors
|
|
159
|
+
// GDS_BRANDING_FILE's own "read before the resolved envPrefix is known" rule).
|
|
160
|
+
const fromEnv = resolveEnv('INSTANCE_ROOT', { env, prefix: FALLBACK_ENV_PREFIX });
|
|
161
|
+
if (fromEnv) return path.resolve(fromEnv);
|
|
162
|
+
const fromConfig = readInstanceRootPointer();
|
|
163
|
+
if (fromConfig) return fromConfig;
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
function resolveInstanceRoot({ env = process.env } = {}) {
|
|
168
|
+
return resolveInstanceRootExplicit({ env }) || process.cwd();
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
// Where a PER-INSTANCE generated artifact (the OpenAPI spec + the typed client)
|
|
172
|
+
// is written/read. A consumer that installs the core as an npm dep points at its
|
|
173
|
+
// own repo (via <PREFIX>_INSTANCE_ROOT / bongos.config.json — e.g. `bongos
|
|
174
|
+
// upgrade` sets it), so the docs+client regenerate INTO the instance, not into
|
|
175
|
+
// node_modules/@cloudbongos/core. In a single checkout no pointer is set, so this
|
|
176
|
+
// is resolveCoreRoot() — BYTE-IDENTICAL to today (ADR 0108). Deliberately NOT the
|
|
177
|
+
// cwd fallback: a generated-doc write must be deterministic.
|
|
178
|
+
function resolveDocsRoot(opts = {}) {
|
|
179
|
+
return resolveInstanceRootExplicit(opts) || resolveCoreRoot();
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
module.exports = {
|
|
183
|
+
FALLBACK_DIR,
|
|
184
|
+
FALLBACK_ENV_PREFIX,
|
|
185
|
+
LEGACY_DIRS,
|
|
186
|
+
LEGACY_ENV_PREFIXES,
|
|
187
|
+
configDirName,
|
|
188
|
+
envPrefix,
|
|
189
|
+
configHome,
|
|
190
|
+
configReadDirs,
|
|
191
|
+
configPath,
|
|
192
|
+
configReadPaths,
|
|
193
|
+
readConfigFileSync,
|
|
194
|
+
resolveEnv,
|
|
195
|
+
resolveCoreRoot,
|
|
196
|
+
resolveInstanceRoot,
|
|
197
|
+
resolveInstanceRootExplicit,
|
|
198
|
+
resolveDocsRoot,
|
|
199
|
+
readInstanceRootPointer,
|
|
200
|
+
};
|
|
@@ -0,0 +1,366 @@
|
|
|
1
|
+
// src/module-api.js — THE PUBLISHED, SEMVER'D DOORWAY (ADR 0083 / design 01§3).
|
|
2
|
+
//
|
|
3
|
+
// This is the ONLY core file a module may `require`. It re-exports the kernel
|
|
4
|
+
// capabilities a module legitimately needs; everything else in the core is
|
|
5
|
+
// off-limits to modules. The one-way rule (enforced by the fitness checks in
|
|
6
|
+
// BV1.R40 once modules exist):
|
|
7
|
+
//
|
|
8
|
+
// module ──require──▶ src/module-api.js ──▶ kernel
|
|
9
|
+
// core ──✗──────────────────────────────▶ module (forbidden)
|
|
10
|
+
// module ──✗──────────────────────────────▶ module (forbidden; use a seam)
|
|
11
|
+
//
|
|
12
|
+
// Adding to this surface is a MINOR semver bump (safe — existing modules keep
|
|
13
|
+
// working). Changing or removing an export is a MAJOR bump (breaking). Each
|
|
14
|
+
// module declares the `coreVersion` it supports; `bongos upgrade` (BV1.R50)
|
|
15
|
+
// pre-checks every enabled module against CORE_VERSION below.
|
|
16
|
+
//
|
|
17
|
+
// Introduced by the doorway task (BV1.R37 / task 1406). The seam registry is in
|
|
18
|
+
// src/module-seams.js (hardened in BV1.R39 / task 1408); the loader that mounts
|
|
19
|
+
// modules behind kernel-composed auth is BV1.R41 / task 1410.
|
|
20
|
+
|
|
21
|
+
const auth = require('./bongos/auth');
|
|
22
|
+
const { pool, instanceDbName } = require('./bongos/pool');
|
|
23
|
+
const branding = require('./branding');
|
|
24
|
+
const instanceConfig = require('./instance-config');
|
|
25
|
+
const seams = require('./module-seams');
|
|
26
|
+
const { buildInfo } = require('./build-info');
|
|
27
|
+
const { validateOrRespond, LIMITS, parseId, asyncHandler, corsPublicGet, parsePagination, pageMeta, PAGINATION } = require('./bongos/routes/_helpers');
|
|
28
|
+
|
|
29
|
+
// ---------------------------------------------------------------------------
|
|
30
|
+
// CORE_VERSION — the version of THIS published surface (semver).
|
|
31
|
+
// Bump MINOR when adding an export; MAJOR when changing/removing one.
|
|
32
|
+
// 1.0.0 — initial doorway: auth gates, pool accessor, config/branding, seams.
|
|
33
|
+
// 1.1.0 — contribution seam: contribute/contributions/collectContributions/
|
|
34
|
+
// listContributionPoints (BV1.R42 / task 1411) — additive, so MINOR.
|
|
35
|
+
// 1.2.0 — capabilities the first extracted module (dev-box, BV1.R43 / task 1412)
|
|
36
|
+
// needs from the kernel: auth.allowBoxScope, db.getBuilderById /
|
|
37
|
+
// setBuilderBoxBlocked, buildInfo, route _helpers (validateOrRespond /
|
|
38
|
+
// LIMITS) — all additive, so MINOR.
|
|
39
|
+
// 1.3.0 — capabilities the art-pipeline module (BV1.R48 / task 1417) needs:
|
|
40
|
+
// db.getBuilderGeminiKeyRow / setBuilderGeminiKey / clearBuilderGeminiKey
|
|
41
|
+
// — all additive, so MINOR.
|
|
42
|
+
// 1.4.0 — generic kernel capabilities the discord module (BV1.R47 / task 1416)
|
|
43
|
+
// needs: db.insertAuditLog / createTask, inbox.captureIdea, the
|
|
44
|
+
// LIVE_RANK_LADDER rank ladder, and task-classifier VOTABLE_TASK_STATUSES.
|
|
45
|
+
// All generic (no module is named) + additive, so MINOR. The discord-
|
|
46
|
+
// SPECIFIC helpers (bot-token loader, snowflake validator, webhook poster)
|
|
47
|
+
// are deliberately NOT here — a module vendors its own domain code; the
|
|
48
|
+
// kernel doorway stays module-agnostic (the "core carries no module code"
|
|
49
|
+
// fitness check forbids naming a module key in this file).
|
|
50
|
+
// 1.5.0 — BV1.R68 / ADR 0091 (kernel-bounding): adds `withTx` — the BEGIN/COMMIT
|
|
51
|
+
// transaction primitive a carved CORE domain needs for a multi-statement
|
|
52
|
+
// write (memory, R72, runs transactional stores). Additive → MINOR. The
|
|
53
|
+
// same change RELOCATES the dev-box domain query `setBuilderBoxBlocked`
|
|
54
|
+
// out to modules/dev-box/db.js and drops its doorway re-export. A strict
|
|
55
|
+
// reading calls removing an export MAJOR, but the sole consumer (the
|
|
56
|
+
// dev-box module) moves in lockstep and no enabled module at its pinned
|
|
57
|
+
// coreVersion loses a capability it uses — so the strangler treats an
|
|
58
|
+
// in-repo lockstep relocation as MINOR (a real MAJOR bump would
|
|
59
|
+
// gratuitously break every `^1.x` module at the loader's coreVersion gate).
|
|
60
|
+
// ADR 0091 §3 classifies the rest of this surface (kernel vs leak) below.
|
|
61
|
+
// 1.6.0 — BV1.R73 / ADR 0091 §1+§4 (grading carve): adds the two KERNEL trust
|
|
62
|
+
// classifiers `routeRankCheck` + `permissionPathCheck` (the deterministic
|
|
63
|
+
// route→rank + protected-path matchers — KERNEL_FILES per R70) so the
|
|
64
|
+
// grading module's deterministic pre-passes reach them through the doorway
|
|
65
|
+
// instead of a deep core require; and `llmCache` (the shared LLM-cost
|
|
66
|
+
// cache — a DOMAIN leak, not kernel; see the leak bucket below). All
|
|
67
|
+
// additive → MINOR. The grade capability itself is NOT a doorway export —
|
|
68
|
+
// it is a kernel PORT the grading module registers (`grade`) and the
|
|
69
|
+
// lifecycle resolves (ADR 0091 §4).
|
|
70
|
+
// 1.7.0 — BV1.R77 / ADR 0093 (economy carve): adds `llmPricing` (the shared
|
|
71
|
+
// token->USD pricing lib — a DOMAIN leak like `llmCache`, consumed by BOTH
|
|
72
|
+
// the carved economy module's reward/cost paths AND core cost scripts
|
|
73
|
+
// ship.js/session-cost.js, so it can't be economy-owned). Additive ->
|
|
74
|
+
// MINOR. The reward capability is a kernel PORT the economy module
|
|
75
|
+
// registers (`reward`), not a doorway export.
|
|
76
|
+
// 1.8.0 — BV1.R78 / ADR 0093 §5 (ideas carve): adds `parseId` — the route-param
|
|
77
|
+
// validator from routes/_helpers.js, alongside `validateOrRespond`/`LIMITS`
|
|
78
|
+
// (KERNEL shared route helpers, ADR 0091 §1) so the carved ideas module's
|
|
79
|
+
// routes don't vendor their own. Additive. The same change RETIRES the
|
|
80
|
+
// `captureIdea` doorway leak: it relocates to the ideas module behind the
|
|
81
|
+
// `ideas.capture` kernel PORT (the home ADR 0091 §3 promised), with the
|
|
82
|
+
// sole consumer (discord #ideas inbound) moving to resolve the port in
|
|
83
|
+
// lockstep — so, like `setBuilderBoxBlocked` at 1.5.0, the export removal
|
|
84
|
+
// is treated as MINOR (no enabled module at its pinned coreVersion loses a
|
|
85
|
+
// capability it uses; a real MAJOR bump would gratuitously break every
|
|
86
|
+
// `^1.x` module at the loader's coreVersion gate).
|
|
87
|
+
// 1.9.0 — BV1.R81 / ADR 0093 §1 (onboarding carve): adds `enabledDisciplines` —
|
|
88
|
+
// the instance's offered-disciplines resolver (src/modules.js: core
|
|
89
|
+
// engineer/ideator + each enabled module's disciplines). The carved
|
|
90
|
+
// onboarding module's newcomer-restock backstop intersects the chore
|
|
91
|
+
// disciplines with what THIS instance offers, so it needs the registry's
|
|
92
|
+
// answer without reaching into src/modules.js directly. Generic (names no
|
|
93
|
+
// module) + additive, so MINOR. The onboarding capability itself is NOT a
|
|
94
|
+
// doorway export — it is a kernel PORT the onboarding module registers
|
|
95
|
+
// (`onboarding`) and the lifecycle/profile readers resolve (ADR 0093 §1).
|
|
96
|
+
// 1.10.0 — BV1.R82 / ADR 0093 §1 (sessions/BFG carve): adds `builderRollingAvgGrade`
|
|
97
|
+
// — the per-builder rolling grade-pass read the BFG's cross-builder
|
|
98
|
+
// `gatherInteractionSignals` needs to score interaction quality. It is a
|
|
99
|
+
// grade-TREND read (not kernel; consumed by the carved sessions module's
|
|
100
|
+
// BFG AND still by core routes/me.js's profile reader — the discord-twin
|
|
101
|
+
// pattern), so it sits in the DOMAIN-leak bucket like `llmPricing`/
|
|
102
|
+
// `getBuilderGeminiKeyRow`, relocating behind a port if/when the grade-
|
|
103
|
+
// trend reads are carved. Generic (names no module) + additive, so MINOR.
|
|
104
|
+
// The sessions capability itself is NOT a doorway export and NOT a port —
|
|
105
|
+
// sessions registers no provider (like memory); core never calls back in.
|
|
106
|
+
// 1.11.0 — BV1.R83 / ADR 0093 §1 (autonomy/MAS carve): adds `tallyPeerVotes` —
|
|
107
|
+
// the peer-vote→karma weekly fold-in transaction the carved autonomy
|
|
108
|
+
// module's in-process routine timer (modules/autonomy/pollers/routine-
|
|
109
|
+
// timers.js) fires. It's the SAME transaction the lifecycle route
|
|
110
|
+
// POST /tasks/peer-votes/tally runs (the route + timer must share ONE
|
|
111
|
+
// path, never diverge), so it can't be autonomy-owned — it writes
|
|
112
|
+
// karma_log/peer_votes/tasks, all lifecycle/core-owned. A LIFECYCLE leak
|
|
113
|
+
// like `createTask`/`VOTABLE_TASK_STATUSES`: no clean home until the
|
|
114
|
+
// lifecycle domain is carved (R86), when it resolves behind a `lifecycle.*`
|
|
115
|
+
// kernel port. Until then the doorway re-export IS the (explicit, marked)
|
|
116
|
+
// seam. Generic (names no module) + additive, so MINOR. The autonomy
|
|
117
|
+
// capability itself is NOT a doorway export — the timer is a poller the
|
|
118
|
+
// loader starts, the precheck a module route, and the gate a CLI.
|
|
119
|
+
// 1.12.0 — BV1.R86 / ADR 0093 §1,§3 (lifecycle carve — the LAST core-domain
|
|
120
|
+
// carve): the build state machine (tasks·claims·versions·done-when·ship
|
|
121
|
+
// orchestration) became modules/lifecycle/, so two net changes to this
|
|
122
|
+
// surface:
|
|
123
|
+
// (a) ADDS the KERNEL helpers the moved lifecycle libs need through the
|
|
124
|
+
// doorway instead of a deep core require: `repoInfo` (src/bongos/repo-
|
|
125
|
+
// info.js — the git-remote/slug resolver github-push.js + conflict-
|
|
126
|
+
// resolve.js read), `moduleScopeMap` (src/bongos/module-scope-map.js —
|
|
127
|
+
// the goal scope-wall roster routes/tasks.js + routes/goals.js read for
|
|
128
|
+
// module-key validation), `userAgent` (src/branding.js — the
|
|
129
|
+
// branding-derived HTTP UA github-push.js stamps GitHub requests with),
|
|
130
|
+
// `pathMatch` (src/bongos/path-match.js — the pure touches[]-overlap
|
|
131
|
+
// matcher claim/optimizer use; already grandfathered kernel-adjacent
|
|
132
|
+
// infra), and two more shared route helpers off _helpers.js
|
|
133
|
+
// (`asyncHandler` + `corsPublicGet`, alongside the existing
|
|
134
|
+
// validateOrRespond/LIMITS/parseId) the carved lifecycle routes
|
|
135
|
+
// (versions/done-when/analytics) reuse. All KERNEL config/identity/
|
|
136
|
+
// infra/route-helpers (ADR 0091 §1); additive → MINOR.
|
|
137
|
+
// (b) RETIRES the three LIFECYCLE doorway leaks `createTask`,
|
|
138
|
+
// `VOTABLE_TASK_STATUSES`, and `tallyPeerVotes` — they now resolve
|
|
139
|
+
// behind the `lifecycle` kernel PORT the module registers (ADR 0093 §3,
|
|
140
|
+
// "each carve deletes its leak"). The sole consumers (modules/ideas →
|
|
141
|
+
// via onboarding/discord, modules/discord, modules/autonomy, and core
|
|
142
|
+
// cascade-dispatch.js) resolve that port in lockstep, so — like
|
|
143
|
+
// `setBuilderBoxBlocked` at 1.5.0 / `captureIdea` at 1.8.0 — the export
|
|
144
|
+
// removal is treated as MINOR (no enabled module at its pinned
|
|
145
|
+
// coreVersion loses a capability it uses; a real MAJOR bump would
|
|
146
|
+
// gratuitously break every `^1.x` module at the loader's coreVersion
|
|
147
|
+
// gate). The lifecycle capability itself is NOT a doorway export — it is
|
|
148
|
+
// a kernel PORT (`lifecycle`) the module registers and core + the other
|
|
149
|
+
// modules resolve.
|
|
150
|
+
// 1.13.0 — BV1.R60 / ADR 0086 §3 (goal-scoped bounded task authoring): adds
|
|
151
|
+
// `goalScopeCheck` (src/bongos/goal-scope-check.js) — the PURE scope wall the
|
|
152
|
+
// carved lifecycle module's POST /goals/:id/tasks create gate calls to
|
|
153
|
+
// decide "may this member author this task here?". It is KERNEL (the trust
|
|
154
|
+
// boundary for the create-time gate; it only COMPOSES the existing kernel
|
|
155
|
+
// matchers moduleScopeMap + pathMatch + permissionPathCheck, holding no
|
|
156
|
+
// domain logic), exposed so the module reaches it through the doorway
|
|
157
|
+
// instead of a deep core require. Generic (names no module) + additive, so
|
|
158
|
+
// MINOR. PERMANENT — same family as routeRankCheck/permissionPathCheck.
|
|
159
|
+
// 1.15.0 — task 1971 (single-host hall): the published ./serve-internal surface's
|
|
160
|
+
// host router (isBuildersHost) now also treats the configured
|
|
161
|
+
// branding().domains.buildersOrigin host as the hall host, so an instance with
|
|
162
|
+
// no dedicated builders.<apex> subdomain serves its hall on its own host.
|
|
163
|
+
// Backward-compatible new capability of an exported surface → MINOR. Also
|
|
164
|
+
// carries task 1970 (the firstAdmin web-flow admission fix, src/bongos/auth.js).
|
|
165
|
+
// First stock version to supersede the emersonian-circles 1.14.1 fork (the
|
|
166
|
+
// task 1973 de-fork).
|
|
167
|
+
// 1.16.0 — task 1690 / ADR 0100 §2 + ADR 0103 §4: the first core release consumed via the REAL
|
|
168
|
+
// `bongos upgrade` channel (previously the module-compat pre-check stub). Turns it into a
|
|
169
|
+
// real bump-pin → npm install → migrate → materialize .claude → restart → verify path, plus
|
|
170
|
+
// the per-instance core_upgrades ledger (core_189). Builds on the 1.15.0 line above; no
|
|
171
|
+
// doorway export removed or changed → MINOR.
|
|
172
|
+
// 1.17.0 — R14 (#2001 / ADR 0119, criterion api-pagination): adds the shared
|
|
173
|
+
// pagination helpers `parsePagination` / `pageMeta` / `PAGINATION` off
|
|
174
|
+
// _helpers.js so a MODULE list route adopts the one paging contract
|
|
175
|
+
// (limit/offset clamp + the page-meta block) instead of hand-rolling it —
|
|
176
|
+
// the same reason validateOrRespond/LIMITS are on the doorway. Additive
|
|
177
|
+
// (new exports, no export removed or changed) → MINOR; every `^1.x`
|
|
178
|
+
// module keeps working, and a module using them is satisfied by 1.17.0.
|
|
179
|
+
// ---------------------------------------------------------------------------
|
|
180
|
+
const CORE_VERSION = '1.17.0'; // see the changelog above — R14 adds the shared pagination helpers to the doorway (#2001)
|
|
181
|
+
|
|
182
|
+
// A namespaced logger so a module's log lines are attributable + consistent.
|
|
183
|
+
// Usage: const log = api.logger('dev-box'); log.info('mounted');
|
|
184
|
+
function logger(moduleKey) {
|
|
185
|
+
const tag = `[${moduleKey || 'module'}]`;
|
|
186
|
+
return {
|
|
187
|
+
info: (...a) => console.log(tag, ...a),
|
|
188
|
+
warn: (...a) => console.warn(tag, ...a),
|
|
189
|
+
error: (...a) => console.error(tag, ...a),
|
|
190
|
+
};
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
module.exports = {
|
|
194
|
+
CORE_VERSION,
|
|
195
|
+
|
|
196
|
+
// --- auth & rank (ADR 0016) — the gates the loader composes around a module's
|
|
197
|
+
// routes; a module declares the rank it needs and never wires auth itself.
|
|
198
|
+
requireBuilder: auth.requireBuilder,
|
|
199
|
+
requireRank: auth.requireRank,
|
|
200
|
+
rankMeetsThreshold: auth.rankMeetsThreshold,
|
|
201
|
+
requireBfgPrincipal: auth.requireBfgPrincipal,
|
|
202
|
+
// allowBoxScope — opt a route in to box-scoped (dev-box bootstrap) session
|
|
203
|
+
// tokens. A module's own bootstrap routes flag themselves; everything else
|
|
204
|
+
// stays closed to box tokens (the ADR 0016 trust boundary).
|
|
205
|
+
allowBoxScope: auth.allowBoxScope,
|
|
206
|
+
|
|
207
|
+
// --- data — the shared Postgres pool. A module owns its namespaced tables
|
|
208
|
+
// (<key>_*) via its own migrations (BV1.R46); it reaches them through this.
|
|
209
|
+
pool,
|
|
210
|
+
getPool: () => pool,
|
|
211
|
+
instanceDbName,
|
|
212
|
+
// withTx(fn, {pool}) — run fn(client) inside BEGIN/COMMIT (ROLLBACK + rethrow
|
|
213
|
+
// on error, always release). The KERNEL transaction primitive a carved
|
|
214
|
+
// core domain needs for a multi-statement write (BV1.R68 / ADR 0091 §3;
|
|
215
|
+
// the memory carve, R72, runs transactional stores). Resolves from the
|
|
216
|
+
// bounded src/bongos/db-kernel.js slice (carved in R69), not the monolith.
|
|
217
|
+
withTx: (...a) => require('./bongos/db-kernel').withTx(...a),
|
|
218
|
+
|
|
219
|
+
// === KERNEL db helpers — PERMANENT doorway surface (ADR 0091 §1/§3) ========
|
|
220
|
+
// Genuinely-kernel reads/writes: builder IDENTITY (getBuilderById), the
|
|
221
|
+
// AUDIT log (insertAuditLog), and the RANK ladder (LIVE_RANK_LADDER).
|
|
222
|
+
// These belong on the doorway and stay. R69 carved them out of the 6k-LOC
|
|
223
|
+
// db.js into the bounded src/bongos/db-kernel.js, which this surface resolves
|
|
224
|
+
// through — so loading a kernel accessor no longer drags in the monolith.
|
|
225
|
+
getBuilderById: (...a) => require('./bongos/db-kernel').getBuilderById(...a),
|
|
226
|
+
insertAuditLog: (...a) => require('./bongos/db-kernel').insertAuditLog(...a),
|
|
227
|
+
get LIVE_RANK_LADDER() { return require('./bongos/db-kernel').LIVE_RANK_LADDER; },
|
|
228
|
+
// --- per-builder secrets at rest (AES-256-GCM box) — a kernel trust
|
|
229
|
+
// primitive; the full secretBox object is exposed so a module can call
|
|
230
|
+
// isConfigured/encrypt/decrypt/provisionMasterKey without reaching core.
|
|
231
|
+
secretBox: require('./bongos/secret-box'),
|
|
232
|
+
|
|
233
|
+
// --- KERNEL trust classifiers (ADR 0091 §1, KERNEL_FILES) — the deterministic
|
|
234
|
+
// route→rank + protected-path matchers. They are KERNEL (the trust
|
|
235
|
+
// boundary, never "called" by a domain), exposed so a module that runs the
|
|
236
|
+
// same deterministic pre-passes (the grading panel, BV1.R73) reaches them
|
|
237
|
+
// through the doorway instead of a deep core require. PERMANENT.
|
|
238
|
+
routeRankCheck: require('./bongos/route-rank-check'),
|
|
239
|
+
permissionPathCheck: require('./bongos/permission-path-check'),
|
|
240
|
+
// --- KERNEL repo + scope-map helpers (ADR 0091 §1, KERNEL_FILES) — exposed for
|
|
241
|
+
// the carved lifecycle module (BV1.R86): repoInfo (the git-remote/slug
|
|
242
|
+
// resolver github-push.js + conflict-resolve.js read) and moduleScopeMap
|
|
243
|
+
// (the goal scope-wall roster routes/tasks.js + routes/goals.js read for
|
|
244
|
+
// module-key validation). Both are KERNEL files (the scope-map IS the trust
|
|
245
|
+
// wall, repo-info is the publish-target identity); a module reaches them
|
|
246
|
+
// through the doorway instead of a deep core require. PERMANENT.
|
|
247
|
+
repoInfo: require('./bongos/repo-info'),
|
|
248
|
+
moduleScopeMap: require('./bongos/module-scope-map'),
|
|
249
|
+
// pathMatch — the pure touches[]-overlap matcher (src/bongos/path-match.js; no
|
|
250
|
+
// domain logic — already a grandfathered kernel-adjacent infra util). The
|
|
251
|
+
// carved lifecycle module's claim/optimizer overlap checks reach it here
|
|
252
|
+
// instead of requiring the core file (BV1.R86).
|
|
253
|
+
pathMatch: require('./bongos/path-match'),
|
|
254
|
+
// goalScopeCheck — the pure scope wall for goal-authored tasks (src/bongos/goal-
|
|
255
|
+
// scope-check.js, BV1.R59 / ADR 0086 §3). The lifecycle module's POST /goals/:id/
|
|
256
|
+
// tasks create gate (BV1.R60) calls check(goalScopeModules, touches, builderRank)
|
|
257
|
+
// to decide, ordered + fail-closed, whether a goal member may author a task here.
|
|
258
|
+
// KERNEL (the trust boundary for the create-time gate): it only COMPOSES the
|
|
259
|
+
// moduleScopeMap + pathMatch + permissionPathCheck matchers above — never a
|
|
260
|
+
// second protected list — so a module reaches it via the doorway, not a deep
|
|
261
|
+
// core require (which the module-boundary fitness check would red). PERMANENT.
|
|
262
|
+
goalScopeCheck: require('./bongos/goal-scope-check'),
|
|
263
|
+
|
|
264
|
+
// === DOMAIN capabilities still on the doorway — SCHEDULED TO RELOCATE ======
|
|
265
|
+
// NOT kernel: these leak a domain's queries through the doorway (ADR 0091
|
|
266
|
+
// §3, the "domain-leak-pending-carve" bucket). Each is kept ONLY until the
|
|
267
|
+
// owning domain is carved — deleting one early would break its in-repo
|
|
268
|
+
// consumer. A NEW module must NOT depend on these.
|
|
269
|
+
// • Gemini-key storage → RELOCATED to modules/art-pipeline/db.js (ADR 0102):
|
|
270
|
+
// the art module owns the credential store + registers the
|
|
271
|
+
// 'art.getBuilderGeminiKeyRow' port; the doorway no longer imports the core db.
|
|
272
|
+
// • builderRollingAvgGrade → RELOCATED to modules/grading/db.js (ADR 0102): a
|
|
273
|
+
// grade-TREND read behind the 'grade.builderRollingAvgGrade' port; core me.js
|
|
274
|
+
// + the sessions BFG resolve it, so the doorway no longer imports the core db.
|
|
275
|
+
// • createTask, VOTABLE_TASK_STATUSES, tallyPeerVotes — RETIRED at BV1.R86
|
|
276
|
+
// (ADR 0093 §3). The lifecycle domain is now a module (modules/lifecycle/),
|
|
277
|
+
// so all three live behind the `lifecycle` kernel PORT it registers, not on
|
|
278
|
+
// the doorway. The sole consumers resolve that port: createTask via the
|
|
279
|
+
// onboarding/discord module db slices (newcomer-restock + discord-bugs),
|
|
280
|
+
// VOTABLE_TASK_STATUSES via discord-reaction, tallyPeerVotes via the autonomy
|
|
281
|
+
// routine-timers poller, and classifyTaskKind via core cascade-dispatch.js.
|
|
282
|
+
// This is the last leak deletion ADR 0091 §3 promised — the doorway no longer
|
|
283
|
+
// re-exports any lifecycle domain query.
|
|
284
|
+
// • captureIdea — RETIRED at BV1.R78 (ADR 0093 §5). The ideas domain is now a
|
|
285
|
+
// module (modules/ideas/), so captureIdea lives behind the `ideas.capture`
|
|
286
|
+
// kernel PORT it registers, not on the doorway. The sole consumer (discord
|
|
287
|
+
// #ideas inbound) resolves that port. This is the leak deletion §3 promised.
|
|
288
|
+
// • llmCache (BV1.R73) → the shared LLM-cost cache (cache key/TTL/savings
|
|
289
|
+
// ledger over its own table). NOT kernel (not in the ADR 0091 §1 roster);
|
|
290
|
+
// consumed by BOTH the carved grading module (grader.runSubagent wraps its
|
|
291
|
+
// spawns in withCache) AND core (routes/llm-cache.js, the cost scripts), so
|
|
292
|
+
// it can't be grading-owned. A tracked domain leak (the R70 ratchet flags
|
|
293
|
+
// module-api → llm-cache as WARN); it relocates behind a port if/when an
|
|
294
|
+
// llm-infra domain is carved (tranche 2).
|
|
295
|
+
llmCache: require('./bongos/llm-cache'),
|
|
296
|
+
// • llmPricing (BV1.R77) → the shared token->USD pricing lib (the locked
|
|
297
|
+
// PRICES table + priceModelUsage/componentsFromModelUsage). NOT kernel;
|
|
298
|
+
// consumed by BOTH the carved economy module (reward/cost paths) AND core
|
|
299
|
+
// cost scripts (ship.js, session-cost.js), so it can't be economy-owned —
|
|
300
|
+
// a DOMAIN leak like llmCache. Relocates behind a port if/when an llm-infra
|
|
301
|
+
// domain is carved (tranche 2).
|
|
302
|
+
llmPricing: require('./bongos/llm-pricing'),
|
|
303
|
+
|
|
304
|
+
// --- host context — config / branding / identity (a module reads, never
|
|
305
|
+
// hardcodes, instance strings).
|
|
306
|
+
branding: branding.branding,
|
|
307
|
+
clientBranding: branding.clientBranding,
|
|
308
|
+
// userAgent — the instance's HTTP User-Agent string (branding-derived). The
|
|
309
|
+
// carved lifecycle module's github-push.js stamps every GitHub API request with
|
|
310
|
+
// it instead of reaching into src/branding.js directly (BV1.R86).
|
|
311
|
+
userAgent: branding.userAgent,
|
|
312
|
+
resolveEnv: instanceConfig.resolveEnv,
|
|
313
|
+
readConfigFileSync: instanceConfig.readConfigFileSync,
|
|
314
|
+
configHome: instanceConfig.configHome,
|
|
315
|
+
configPath: instanceConfig.configPath,
|
|
316
|
+
// --- module-selection facade (src/modules.js) — the instance's offered
|
|
317
|
+
// disciplines (core engineer/ideator + each enabled module's). A module
|
|
318
|
+
// that gates work by what THIS instance actually offers (onboarding's
|
|
319
|
+
// newcomer-chore backstop) reads it here instead of requiring src/modules.js
|
|
320
|
+
// directly. Resolved lazily so requiring the doorway never forces a config
|
|
321
|
+
// read at module-load (BV1.R81 / ADR 0093 §1).
|
|
322
|
+
enabledDisciplines: (...a) => require('./modules').enabledDisciplines(...a),
|
|
323
|
+
|
|
324
|
+
// --- the seam registry — how modules cooperate without importing each other.
|
|
325
|
+
// Three primitives: PORTS (one required provider), EVENTS (many optional
|
|
326
|
+
// reactions), CONTRIBUTIONS (many accumulating extension points — how a
|
|
327
|
+
// module adds its slice to a core surface, e.g. 'profile.fields'). See
|
|
328
|
+
// src/module-seams.js.
|
|
329
|
+
registerProvider: seams.registerProvider,
|
|
330
|
+
hasProvider: seams.hasProvider,
|
|
331
|
+
resolve: seams.resolve,
|
|
332
|
+
resolveOptional: seams.resolveOptional,
|
|
333
|
+
listPorts: seams.listPorts,
|
|
334
|
+
verifyPortsSatisfied: seams.verifyPortsSatisfied,
|
|
335
|
+
on: seams.on,
|
|
336
|
+
emit: seams.emit,
|
|
337
|
+
emitAsync: seams.emitAsync,
|
|
338
|
+
listEvents: seams.listEvents,
|
|
339
|
+
contribute: seams.contribute,
|
|
340
|
+
contributions: seams.contributions,
|
|
341
|
+
collectContributions: seams.collectContributions,
|
|
342
|
+
listContributionPoints: seams.listContributionPoints,
|
|
343
|
+
seamSnapshot: seams.snapshot,
|
|
344
|
+
|
|
345
|
+
// --- build metadata + shared route-validation helpers — a module's routes
|
|
346
|
+
// reuse the kernel's request validators (validateOrRespond/LIMITS/parseId),
|
|
347
|
+
// the async-route error wrapper (asyncHandler), the public-GET CORS+cache
|
|
348
|
+
// wrapper (corsPublicGet), and the build stamp instead of vendoring their
|
|
349
|
+
// own. asyncHandler + corsPublicGet added at BV1.R86 for the carved
|
|
350
|
+
// lifecycle routes (versions/done-when/analytics).
|
|
351
|
+
buildInfo,
|
|
352
|
+
validateOrRespond,
|
|
353
|
+
LIMITS,
|
|
354
|
+
parseId,
|
|
355
|
+
asyncHandler,
|
|
356
|
+
corsPublicGet,
|
|
357
|
+
// R14 (#2001 / ADR 0119): the shared pagination contract, so a MODULE list
|
|
358
|
+
// route pages identically to core (parsePagination clamps ?limit=&offset=;
|
|
359
|
+
// pageMeta builds the { limit, offset, total? } block).
|
|
360
|
+
parsePagination,
|
|
361
|
+
pageMeta,
|
|
362
|
+
PAGINATION,
|
|
363
|
+
|
|
364
|
+
// --- logging
|
|
365
|
+
logger,
|
|
366
|
+
};
|