@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,716 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
# C7 core-carve proof — BV1.R74 (#1578) · ADR 0091 + ADR 0093 · criterion C7 gds-core-modularized.
|
|
3
|
+
#
|
|
4
|
+
# The single live demonstration C7's tranche-1+2 hinges on. ADR 0091 extended the
|
|
5
|
+
# ADR 0083 strangler to the CORE itself: bound the kernel as a real artifact and
|
|
6
|
+
# carve the core domains out of the ~6k-LOC src/bongos/db.js monolith into
|
|
7
|
+
# modules/<key>/ — memory (R72), grading (R73), then economy (R77, ADR 0093:
|
|
8
|
+
# credits + cost ledger + streaks + achievements + leaderboard behind the `reward`
|
|
9
|
+
# kernel PORT) and security (R79, ADR 0093: red-team reports + bounty behind the
|
|
10
|
+
# `security` kernel PORT — the FEATURE; security-the-PROPERTY stays kernel) and
|
|
11
|
+
# builder-settings (R80, ADR 0093: the per-builder prefs domain — wandering /
|
|
12
|
+
# skill / sound / render — + builder-needs behind the `builder-settings` kernel
|
|
13
|
+
# PORT; the `GET /me` aggregator stays a thin core facade) and onboarding (R81,
|
|
14
|
+
# ADR 0093: the admission · onboarding-state-machine · newcomer-restock domain
|
|
15
|
+
# behind the `onboarding` kernel PORT — the core lifecycle/auth/profile readers
|
|
16
|
+
# resolve it; the access-request admission routes mount in the module). Every
|
|
17
|
+
# prior task asserted ITS slice; this script asserts the WHOLE claim in one
|
|
18
|
+
# runnable command, so "is the core-carve pattern proven?" has a yes/no answer
|
|
19
|
+
# anyone can re-run.
|
|
20
|
+
#
|
|
21
|
+
# It proves five things, each the done-when of the carve (ADR 0091 §1-4 + the
|
|
22
|
+
# "byte-for-byte the same" discipline of ADR 0083 / 0062):
|
|
23
|
+
# 1. memory + grading live as modules/ (valid manifests, loader-discovered,
|
|
24
|
+
# grading provides the `grade` port).
|
|
25
|
+
# 2. db.js shrank by their slices — the kernel slice (db-kernel.js) and the
|
|
26
|
+
# memory query slice left the monolith; grading's CAPABILITY (grader.js) is
|
|
27
|
+
# module-only (its grade-ATTEMPT persistence stays lifecycle, ADR 0091 §4).
|
|
28
|
+
# 3. the kernel is bounded + fitness green — KERNEL_FILES is the real roster
|
|
29
|
+
# (R70), and fitness.js has zero hard failures incl. the four C7 boundary
|
|
30
|
+
# checks.
|
|
31
|
+
# 4. a capability resolves via a kernel PORT (R73) — grading registers `grade`;
|
|
32
|
+
# the lifecycle resolves it via seams.resolveOptional('grade'); NO core file
|
|
33
|
+
# requires the grader directly.
|
|
34
|
+
# 5. OTB behaves byte-identically — every DB-free test that exercises a CARVED
|
|
35
|
+
# surface (the module system, grading + the grade port, memory/search/recall)
|
|
36
|
+
# passes unchanged. These are the precise behavioral evidence the carve
|
|
37
|
+
# changed structure, not behavior, and they are reproducible in ANY checkout.
|
|
38
|
+
# The comprehensive regression backstop is CI's run-unit-tests.js (the full
|
|
39
|
+
# 193-file gate); FULL_SUITE=1 runs that too, but note it includes infra
|
|
40
|
+
# tests (preview/sandbox/box) that need a live preview server + git remote
|
|
41
|
+
# and so only go green in a CI-like environment, not a credential-less
|
|
42
|
+
# worktree. SKIP_SUITE=1 skips leg 5 (structure-only, legs 1-4).
|
|
43
|
+
#
|
|
44
|
+
# Read-only. No network, no DB, no writes. Re-runnable any time; the ONGOING
|
|
45
|
+
# guard already lives in CI (fitness.js + run-unit-tests.js on every PR), so this
|
|
46
|
+
# is the consolidated demonstration, not a new gate.
|
|
47
|
+
#
|
|
48
|
+
# Usage:
|
|
49
|
+
# bash scripts/gds/coreB-carve-proof.sh # legs 1-4 + carve-test leg
|
|
50
|
+
# FULL_SUITE=1 bash scripts/gds/coreB-carve-proof.sh # also run the full CI gate
|
|
51
|
+
# SKIP_SUITE=1 bash scripts/gds/coreB-carve-proof.sh # legs 1-4 only (fast)
|
|
52
|
+
|
|
53
|
+
set -uo pipefail
|
|
54
|
+
cd "$(dirname "$0")/../.." # repo root (consistent with portability-smoke-*.sh)
|
|
55
|
+
|
|
56
|
+
PASS=0; FAIL=0
|
|
57
|
+
ok() { echo "PASS $1"; PASS=$((PASS+1)); }
|
|
58
|
+
bad() { echo "FAIL $1"; FAIL=$((FAIL+1)); }
|
|
59
|
+
# nrun SNIPPET: exit 0 iff the node snippet runs clean (process.exit(0)).
|
|
60
|
+
nrun() { node -e "$1" >/dev/null 2>&1; }
|
|
61
|
+
|
|
62
|
+
echo "=== C7 core-carve proof: memory + grading + economy + security as modules (ADR 0091 + 0093) ==="
|
|
63
|
+
|
|
64
|
+
# --- 1. memory + grading live as modules/ ------------------------------------
|
|
65
|
+
if nrun "const m=require('./modules/memory/module.json');process.exit(m.key==='memory'?0:1)"; then
|
|
66
|
+
ok "modules/memory/module.json valid (key=memory)"
|
|
67
|
+
else
|
|
68
|
+
bad "modules/memory/module.json missing or key!=memory"
|
|
69
|
+
fi
|
|
70
|
+
if nrun "const m=require('./modules/grading/module.json');process.exit(m.key==='grading'&&(m.provides||[]).includes('grade')?0:1)"; then
|
|
71
|
+
ok "modules/grading/module.json valid (key=grading, provides the 'grade' port)"
|
|
72
|
+
else
|
|
73
|
+
bad "modules/grading/module.json missing, key!=grading, or does not provide 'grade'"
|
|
74
|
+
fi
|
|
75
|
+
if nrun "const k=require('./scripts/gds/fitness.js').discoveredModuleKeys();process.exit(k.includes('memory')&&k.includes('grading')?0:1)"; then
|
|
76
|
+
ok "the loader discovers both 'memory' and 'grading' as modules"
|
|
77
|
+
else
|
|
78
|
+
bad "loader does not discover both memory + grading (discoveredModuleKeys)"
|
|
79
|
+
fi
|
|
80
|
+
|
|
81
|
+
# --- 2. db.js shrank by their slices -----------------------------------------
|
|
82
|
+
[ -f src/bongos/db-kernel.js ] \
|
|
83
|
+
&& ok "kernel db slice extracted — src/bongos/db-kernel.js (identity/audit/rank/withTx, R69)" \
|
|
84
|
+
|| bad "src/bongos/db-kernel.js missing (the first slice to leave db.js)"
|
|
85
|
+
|
|
86
|
+
if grep -qE "builder_memory|memory_files" src/bongos/db.js 2>/dev/null; then
|
|
87
|
+
bad "memory domain queries still present in core src/bongos/db.js (slice did not leave)"
|
|
88
|
+
else
|
|
89
|
+
ok "memory domain queries absent from core src/bongos/db.js (slice left the monolith)"
|
|
90
|
+
fi
|
|
91
|
+
if grep -qE "builder_memory" modules/memory/memory.js 2>/dev/null; then
|
|
92
|
+
ok "memory domain queries now live in modules/memory/memory.js"
|
|
93
|
+
else
|
|
94
|
+
bad "memory domain queries not found in modules/memory/memory.js"
|
|
95
|
+
fi
|
|
96
|
+
|
|
97
|
+
# grading's CAPABILITY (the adversarial panel) is module-only; its grade-ATTEMPT
|
|
98
|
+
# persistence (applyGrade -> task_grades) correctly STAYS in core as lifecycle
|
|
99
|
+
# (ADR 0091 §4 — extract the capability, keep the state machine).
|
|
100
|
+
if [ -f modules/grading/grader.js ] && ! [ -f src/bongos/grader.js ]; then
|
|
101
|
+
ok "grading capability is module-only (modules/grading/grader.js; no core src/bongos/grader.js)"
|
|
102
|
+
else
|
|
103
|
+
bad "grader.js not cleanly module-owned (expected modules/grading/grader.js, no src/bongos/grader.js)"
|
|
104
|
+
fi
|
|
105
|
+
|
|
106
|
+
# --- 3. the kernel is bounded + fitness green (R70) --------------------------
|
|
107
|
+
if nrun "const {KERNEL_FILES:K}=require('./scripts/gds/fitness.js');process.exit(K.length>=15&&K.includes('src/bongos/db-kernel.js')&&K.includes('src/bongos/auth.js')?0:1)"; then
|
|
108
|
+
ok "KERNEL_FILES is the real bounded roster (incl. db-kernel.js + auth.js, not the old 6)"
|
|
109
|
+
else
|
|
110
|
+
bad "KERNEL_FILES is not the real roster (missing db-kernel.js/auth.js or too small)"
|
|
111
|
+
fi
|
|
112
|
+
if nrun "const r=require('./scripts/gds/fitness.js').runAll();process.exit(r.filter(x=>x.hardFail).length===0?0:1)"; then
|
|
113
|
+
ok "fitness.js: zero hard failures (the CI architecture gate is green)"
|
|
114
|
+
else
|
|
115
|
+
bad "fitness.js has hard failures (architecture boundary regressed)"
|
|
116
|
+
fi
|
|
117
|
+
if nrun "const r=require('./scripts/gds/fitness.js').runAll();const want=['core never imports a module','modules import only the published API','core carries no module code'];const ok=want.every(n=>{const c=r.find(x=>x.name===n);return c&&!c.hardFail;});process.exit(ok?0:1)"; then
|
|
118
|
+
ok "the three ENFORCING C7 boundary checks pass (core↮module, module→API-only, no module code in core)"
|
|
119
|
+
else
|
|
120
|
+
bad "one of the ENFORCING C7 boundary checks is missing or failing"
|
|
121
|
+
fi
|
|
122
|
+
|
|
123
|
+
# --- 4. a capability resolves via a kernel PORT (R73) ------------------------
|
|
124
|
+
grep -q "registerProvider('grade'" modules/grading/routes/grade.js 2>/dev/null \
|
|
125
|
+
&& ok "grading registers the 'grade' provider at boot (modules/grading/routes/grade.js)" \
|
|
126
|
+
|| bad "grading does not registerProvider('grade')"
|
|
127
|
+
|
|
128
|
+
# tasks.js carved to modules/lifecycle/routes/ at R86; public.js (the status read) stays core.
|
|
129
|
+
if grep -q "resolveOptional('grade')" modules/lifecycle/routes/tasks.js 2>/dev/null \
|
|
130
|
+
&& grep -q "resolveOptional('grade')" src/bongos/routes/public.js 2>/dev/null; then
|
|
131
|
+
ok "the lifecycle resolves grading via the kernel port (seams.resolveOptional('grade') in modules/lifecycle/routes/tasks.js + core public.js)"
|
|
132
|
+
else
|
|
133
|
+
bad "the lifecycle does not resolve 'grade' via the seam in both modules/lifecycle/routes/tasks.js and core public.js"
|
|
134
|
+
fi
|
|
135
|
+
if grep -rnE "require\(['\"][^'\"]*grader['\"]\)" src/ server.js 2>/dev/null | grep -qv node_modules; then
|
|
136
|
+
bad "a core file still require()s the grader directly (the port is bypassed)"
|
|
137
|
+
else
|
|
138
|
+
ok "no core file require()s the grader directly — the edge is severed (ADR 0091 §4)"
|
|
139
|
+
fi
|
|
140
|
+
|
|
141
|
+
# --- 4b. economy carved + registers the `reward` PORT (R77 / ADR 0093) --------
|
|
142
|
+
if nrun "const m=require('./modules/economy/module.json');process.exit(m.key==='economy'&&(m.provides||[]).includes('reward')&&['cost','leaderboard','reward'].every(r=>(m.contributes.routes||[]).includes(r))?0:1)"; then
|
|
143
|
+
ok "modules/economy/module.json valid (key=economy, provides 'reward', routes cost+leaderboard+reward)"
|
|
144
|
+
else
|
|
145
|
+
bad "modules/economy/module.json missing/invalid (key, provides 'reward', or contributes.routes)"
|
|
146
|
+
fi
|
|
147
|
+
if nrun "const k=require('./scripts/gds/fitness.js').discoveredModuleKeys();process.exit(k.includes('economy')?0:1)"; then
|
|
148
|
+
ok "the loader discovers 'economy' as a module"
|
|
149
|
+
else
|
|
150
|
+
bad "loader does not discover 'economy' (discoveredModuleKeys)"
|
|
151
|
+
fi
|
|
152
|
+
|
|
153
|
+
# economy LEDGER SQL left db.js. The bare token credit_log/cost_log still appears
|
|
154
|
+
# in db.js for OUT-OF-SCOPE domains the carve deliberately leaves (the rank-change
|
|
155
|
+
# ceremony + deactivate/reactivate audit rows write credit_log; builderAnalytics
|
|
156
|
+
# reads cost_log) AND for the lifecycle state-machine idempotency GUARDS the carve
|
|
157
|
+
# keeps verbatim (applyGrade/confirmTask: `SELECT 1 FROM credit_log … task.confirmed`,
|
|
158
|
+
# ADR 0093 §2). So we assert the precise ECONOMY-LEDGER signal instead: the cost_log
|
|
159
|
+
# WRITER and every credit-GRANT (the economy reasons) left the monolith.
|
|
160
|
+
if grep -qE "INSERT INTO cost_log" src/bongos/db.js 2>/dev/null; then
|
|
161
|
+
bad "the cost_log WRITER (logCost) still lives in core src/bongos/db.js (economy ledger did not leave)"
|
|
162
|
+
else
|
|
163
|
+
ok "the cost_log writer left src/bongos/db.js (economy ledger writer is module-only)"
|
|
164
|
+
fi
|
|
165
|
+
if grep -qE "'task\.confirmed'|'idea_promotion_bonus'|'session\.token_reward'|'ship\.net_negative'" src/bongos/db.js 2>/dev/null | grep -qE "INSERT INTO credit_log"; then
|
|
166
|
+
bad "an economy credit-GRANT INSERT still lives in core src/bongos/db.js"
|
|
167
|
+
elif grep -nE "INSERT INTO credit_log" src/bongos/db.js 2>/dev/null | grep -qE "task\.confirmed|idea_promotion_bonus|session\.token_reward|ship\.net_negative"; then
|
|
168
|
+
bad "an economy credit-GRANT INSERT still lives in core src/bongos/db.js"
|
|
169
|
+
else
|
|
170
|
+
ok "every economy credit-GRANT left src/bongos/db.js (only rank-change/audit credit_log rows remain — out of scope)"
|
|
171
|
+
fi
|
|
172
|
+
# economy SQL now lives in the module.
|
|
173
|
+
if grep -q credit_log modules/economy/credits.js 2>/dev/null; then
|
|
174
|
+
ok "economy credit ledger SQL now lives in modules/economy/credits.js"
|
|
175
|
+
else
|
|
176
|
+
bad "economy credit ledger SQL not found in modules/economy/credits.js"
|
|
177
|
+
fi
|
|
178
|
+
if grep -q cost_log modules/economy/cost.js 2>/dev/null; then
|
|
179
|
+
ok "economy cost ledger SQL now lives in modules/economy/cost.js"
|
|
180
|
+
else
|
|
181
|
+
bad "economy cost ledger SQL not found in modules/economy/cost.js"
|
|
182
|
+
fi
|
|
183
|
+
# the moved standalone files are gone from core.
|
|
184
|
+
if [ ! -f src/bongos/cost.js ] && [ ! -f src/bongos/streak.js ] && [ ! -f src/bongos/achievements.js ] && [ ! -f src/bongos/cost-summary-shape.js ]; then
|
|
185
|
+
ok "the moved standalone economy files are gone from core (cost/streak/achievements/cost-summary-shape)"
|
|
186
|
+
else
|
|
187
|
+
bad "a moved economy file still exists under src/bongos/ (cost/streak/achievements/cost-summary-shape)"
|
|
188
|
+
fi
|
|
189
|
+
# economy registers the `reward` port; the lifecycle resolves it.
|
|
190
|
+
grep -q "registerProvider('reward'" modules/economy/routes/reward.js 2>/dev/null \
|
|
191
|
+
&& ok "economy registers the 'reward' provider at boot (modules/economy/routes/reward.js)" \
|
|
192
|
+
|| bad "economy does not registerProvider('reward')"
|
|
193
|
+
# the lifecycle db slice carved to modules/lifecycle/db.js at R86 — it resolves the reward port there.
|
|
194
|
+
if grep -q "resolveOptional('reward')" modules/lifecycle/db.js 2>/dev/null; then
|
|
195
|
+
ok "the lifecycle resolves economy via the kernel port (seams.resolveOptional('reward') in modules/lifecycle/db.js)"
|
|
196
|
+
else
|
|
197
|
+
bad "the lifecycle does not resolve 'reward' via the seam in modules/lifecycle/db.js"
|
|
198
|
+
fi
|
|
199
|
+
# no core file requires the moved economy files directly (llm-pricing stays core).
|
|
200
|
+
if grep -rnE "require\(['\"][^'\"]*/(cost|streak|achievements|cost-summary-shape)['\"]\)" src/ server.js 2>/dev/null | grep -v node_modules | grep -v module-api | grep -v 'modules/economy' | grep -qv llm-pricing; then
|
|
201
|
+
bad "a core file still require()s a moved economy file directly (the port is bypassed)"
|
|
202
|
+
else
|
|
203
|
+
ok "no core file require()s a moved economy file directly — the edge is severed (ADR 0093 §2)"
|
|
204
|
+
fi
|
|
205
|
+
|
|
206
|
+
# --- 4c. security FEATURE carved + registers the `security` PORT (R79 / ADR 0093) --
|
|
207
|
+
# security-the-FEATURE (red-team reports + bounty) is a module; security-the-PROPERTY
|
|
208
|
+
# (permission-path/route-rank + the /security/adr+docs threat-model plane) STAYS kernel
|
|
209
|
+
# (02-module-map §5). We assert both halves landed on the right side of the line.
|
|
210
|
+
if nrun "const m=require('./modules/security/module.json');process.exit(m.key==='security'&&(m.provides||[]).includes('security')&&(m.contributes.routes||[]).includes('reports')?0:1)"; then
|
|
211
|
+
ok "modules/security/module.json valid (key=security, provides 'security' port, routes reports)"
|
|
212
|
+
else
|
|
213
|
+
bad "modules/security/module.json missing/invalid (key, provides 'security', or contributes.routes)"
|
|
214
|
+
fi
|
|
215
|
+
if nrun "const k=require('./scripts/gds/fitness.js').discoveredModuleKeys();process.exit(k.includes('security')?0:1)"; then
|
|
216
|
+
ok "the loader discovers 'security' as a module"
|
|
217
|
+
else
|
|
218
|
+
bad "loader does not discover 'security' (discoveredModuleKeys)"
|
|
219
|
+
fi
|
|
220
|
+
# the report/bounty domain file moved out of core into the module.
|
|
221
|
+
if [ ! -f src/bongos/security.js ] && [ -f modules/security/security.js ]; then
|
|
222
|
+
ok "the security FEATURE domain is module-only (modules/security/security.js; no core src/bongos/security.js)"
|
|
223
|
+
else
|
|
224
|
+
bad "security.js not cleanly module-owned (expected modules/security/security.js, no src/bongos/security.js)"
|
|
225
|
+
fi
|
|
226
|
+
if grep -qE "vulnerability_reports" modules/security/security.js 2>/dev/null; then
|
|
227
|
+
ok "the vulnerability_reports / bounty SQL now lives in modules/security/security.js"
|
|
228
|
+
else
|
|
229
|
+
bad "vulnerability_reports SQL not found in modules/security/security.js"
|
|
230
|
+
fi
|
|
231
|
+
# security-the-PROPERTY stayed kernel: the trust matchers + the adr/docs route plane.
|
|
232
|
+
if [ -f src/bongos/route-rank-check.js ] && [ -f src/bongos/permission-path-check.js ] && grep -qE "/security/(adr|docs)" src/bongos/routes/security.js 2>/dev/null; then
|
|
233
|
+
ok "security-the-PROPERTY stayed kernel (route-rank/permission-path matchers + /security/adr+docs in core routes/security.js)"
|
|
234
|
+
else
|
|
235
|
+
bad "security-the-PROPERTY did not stay kernel (matchers or the adr/docs route plane went missing from core)"
|
|
236
|
+
fi
|
|
237
|
+
# security registers the `security` port; the public bounty-table resolves it.
|
|
238
|
+
grep -q "registerProvider('security'" modules/security/routes/reports.js 2>/dev/null \
|
|
239
|
+
&& ok "security registers the 'security' provider at boot (modules/security/routes/reports.js)" \
|
|
240
|
+
|| bad "security does not registerProvider('security')"
|
|
241
|
+
if grep -q "resolveOptional('security')" src/bongos/routes/public.js 2>/dev/null; then
|
|
242
|
+
ok "core resolves the security bounty schedule via the kernel port (resolveOptional('security') in public.js)"
|
|
243
|
+
else
|
|
244
|
+
bad "core does not resolve 'security' via the seam in public.js (the bounty table import was not severed)"
|
|
245
|
+
fi
|
|
246
|
+
# no core file requires the moved security DOMAIN file directly. The match is
|
|
247
|
+
# scoped to the old domain path (require('../security') / './security') and
|
|
248
|
+
# EXCLUDES the property router core legitimately keeps: require('./routes/security')
|
|
249
|
+
# (the /security/adr+docs plane that stayed kernel — 02-module-map §5).
|
|
250
|
+
if grep -rnE "require\(['\"]\.\.?/security['\"]\)" src/ server.js 2>/dev/null | grep -v node_modules | grep -q .; then
|
|
251
|
+
bad "a core file still require()s the moved security domain file directly (the port is bypassed)"
|
|
252
|
+
else
|
|
253
|
+
ok "no core file require()s the moved security.js domain directly — the edge is severed (ADR 0093 §1; routes/security.js property plane stays)"
|
|
254
|
+
fi
|
|
255
|
+
|
|
256
|
+
# --- 4d. builder-settings carved + registers the `builder-settings` PORT (R80 / ADR 0093) --
|
|
257
|
+
# The per-builder PREFS domain (wandering·skill·sound·render) + builder-needs is a
|
|
258
|
+
# module; the `GET /me` aggregator stays a thin core facade resolving the port
|
|
259
|
+
# (02-module-map §2). We assert the prefs libs + their db slice moved, the routes
|
|
260
|
+
# split, and the edge from me.js + cascade-dispatch is severed.
|
|
261
|
+
if nrun "const m=require('./modules/builder-settings/module.json');process.exit(m.key==='builder-settings'&&(m.provides||[]).includes('builder-settings')&&(m.contributes.routes||[]).includes('settings')?0:1)"; then
|
|
262
|
+
ok "modules/builder-settings/module.json valid (key=builder-settings, provides 'builder-settings' port, routes settings)"
|
|
263
|
+
else
|
|
264
|
+
bad "modules/builder-settings/module.json missing/invalid (key, provides 'builder-settings', or contributes.routes)"
|
|
265
|
+
fi
|
|
266
|
+
if nrun "const k=require('./scripts/gds/fitness.js').discoveredModuleKeys();process.exit(k.includes('builder-settings')?0:1)"; then
|
|
267
|
+
ok "the loader discovers 'builder-settings' as a module"
|
|
268
|
+
else
|
|
269
|
+
bad "loader does not discover 'builder-settings' (discoveredModuleKeys)"
|
|
270
|
+
fi
|
|
271
|
+
# the five pref libs + builder-needs moved out of core into the module.
|
|
272
|
+
if [ ! -f src/bongos/skill-prefs.js ] && [ ! -f src/bongos/sound-prefs.js ] && [ ! -f src/bongos/wandering-prefs.js ] && [ ! -f src/bongos/render-prefs.js ] && [ ! -f src/bongos/event-sound-prefs.js ] && [ ! -f src/bongos/builder-needs.js ]; then
|
|
273
|
+
ok "the prefs libs + builder-needs are module-only (no src/bongos/{skill,sound,wandering,render,event-sound}-prefs.js / builder-needs.js)"
|
|
274
|
+
else
|
|
275
|
+
bad "a moved builder-settings file still exists under src/bongos/ (a pref lib or builder-needs.js)"
|
|
276
|
+
fi
|
|
277
|
+
if [ -f modules/builder-settings/skill-prefs.js ] && [ -f modules/builder-settings/builder-needs.js ]; then
|
|
278
|
+
ok "the prefs libs + builder-needs now live in modules/builder-settings/"
|
|
279
|
+
else
|
|
280
|
+
bad "the prefs libs / builder-needs not found in modules/builder-settings/"
|
|
281
|
+
fi
|
|
282
|
+
# the prefs db SLICE left core db.js (the skill_model_prefs writer is the signal).
|
|
283
|
+
if grep -qE "SET skill_model_prefs" src/bongos/db.js 2>/dev/null; then
|
|
284
|
+
bad "the prefs db slice (setBuilderSkillPrefs) still lives in core src/bongos/db.js (slice did not leave)"
|
|
285
|
+
else
|
|
286
|
+
ok "the prefs db slice left src/bongos/db.js (skill_model_prefs/sound_prefs/behavior_prefs writers are module-only)"
|
|
287
|
+
fi
|
|
288
|
+
if grep -qE "skill_model_prefs" modules/builder-settings/db.js 2>/dev/null; then
|
|
289
|
+
ok "the prefs db slice now lives in modules/builder-settings/db.js"
|
|
290
|
+
else
|
|
291
|
+
bad "the prefs db slice not found in modules/builder-settings/db.js"
|
|
292
|
+
fi
|
|
293
|
+
# builder-settings registers the `builder-settings` port; me.js resolves it.
|
|
294
|
+
grep -q "registerProvider('builder-settings'" modules/builder-settings/routes/settings.js 2>/dev/null \
|
|
295
|
+
&& ok "builder-settings registers the 'builder-settings' provider at boot (modules/builder-settings/routes/settings.js)" \
|
|
296
|
+
|| bad "builder-settings does not registerProvider('builder-settings')"
|
|
297
|
+
if grep -q "resolveOptional('builder-settings')" src/bongos/routes/me.js 2>/dev/null \
|
|
298
|
+
&& grep -q "resolveOptional('builder-settings')" src/bongos/cascade-dispatch.js 2>/dev/null; then
|
|
299
|
+
ok "core resolves builder-settings via the kernel port (resolveOptional('builder-settings') in me.js + cascade-dispatch.js)"
|
|
300
|
+
else
|
|
301
|
+
bad "core does not resolve 'builder-settings' via the seam in both me.js and cascade-dispatch.js"
|
|
302
|
+
fi
|
|
303
|
+
# no core file requires a moved prefs lib directly.
|
|
304
|
+
if grep -rnE "require\(['\"][^'\"]*/(skill-prefs|sound-prefs|wandering-prefs|render-prefs|event-sound-prefs|builder-needs)['\"]\)" src/ server.js 2>/dev/null | grep -v node_modules | grep -v 'modules/builder-settings' | grep -q .; then
|
|
305
|
+
bad "a core file still require()s a moved prefs lib directly (the port is bypassed)"
|
|
306
|
+
else
|
|
307
|
+
ok "no core file require()s a moved prefs lib directly — the edge is severed (ADR 0093 §1)"
|
|
308
|
+
fi
|
|
309
|
+
|
|
310
|
+
# --- 4e. onboarding carved + registers the `onboarding` PORT (R81 / ADR 0093) --
|
|
311
|
+
# The admission · onboarding-state-machine · newcomer-restock domain is a module;
|
|
312
|
+
# the core lifecycle (db.js claim/ship), auth callbacks, and the me/builders
|
|
313
|
+
# profile readers resolve the `onboarding` kernel port (the FIRST core→module
|
|
314
|
+
# port direction db.js drives alongside `reward`). The access-request admission
|
|
315
|
+
# routes mount in the module. We assert the domain files + their db slice moved,
|
|
316
|
+
# the port is registered + resolved in db.js, and the edge is severed.
|
|
317
|
+
if nrun "const m=require('./modules/onboarding/module.json');process.exit(m.key==='onboarding'&&(m.provides||[]).includes('onboarding')&&(m.contributes.routes||[]).includes('onboarding')?0:1)"; then
|
|
318
|
+
ok "modules/onboarding/module.json valid (key=onboarding, provides 'onboarding' port, routes onboarding)"
|
|
319
|
+
else
|
|
320
|
+
bad "modules/onboarding/module.json missing/invalid (key, provides 'onboarding', or contributes.routes)"
|
|
321
|
+
fi
|
|
322
|
+
if nrun "const k=require('./scripts/gds/fitness.js').discoveredModuleKeys();process.exit(k.includes('onboarding')?0:1)"; then
|
|
323
|
+
ok "the loader discovers 'onboarding' as a module"
|
|
324
|
+
else
|
|
325
|
+
bad "loader does not discover 'onboarding' (discoveredModuleKeys)"
|
|
326
|
+
fi
|
|
327
|
+
# the onboarding domain files moved out of core into the module.
|
|
328
|
+
if [ ! -f src/bongos/onboarding.js ] && [ ! -f src/bongos/onboarding-state.js ] && [ ! -f src/bongos/newcomer-restock.js ] && [ ! -f src/bongos/approval-broadcast.js ] && [ ! -f src/bongos/routes/access-requests.js ]; then
|
|
329
|
+
ok "the onboarding domain files are module-only (no src/bongos/{onboarding,onboarding-state,newcomer-restock,approval-broadcast}.js / routes/access-requests.js)"
|
|
330
|
+
else
|
|
331
|
+
bad "a moved onboarding file still exists under src/bongos/ (onboarding/onboarding-state/newcomer-restock/approval-broadcast/access-requests)"
|
|
332
|
+
fi
|
|
333
|
+
if [ -f modules/onboarding/onboarding-state.js ] && [ -f modules/onboarding/routes/access-requests.js ]; then
|
|
334
|
+
ok "the onboarding domain + admission routes now live in modules/onboarding/"
|
|
335
|
+
else
|
|
336
|
+
bad "the onboarding state machine / access-request routes not found in modules/onboarding/"
|
|
337
|
+
fi
|
|
338
|
+
# the onboarding db SLICE left core db.js (the newcomerInstanceStats query is the signal).
|
|
339
|
+
if grep -qE "async function newcomerInstanceStats" src/bongos/db.js 2>/dev/null; then
|
|
340
|
+
bad "the onboarding db slice (newcomerInstanceStats) still lives in core src/bongos/db.js (slice did not leave)"
|
|
341
|
+
else
|
|
342
|
+
ok "the onboarding db slice left src/bongos/db.js (newcomerInstanceStats is module-only)"
|
|
343
|
+
fi
|
|
344
|
+
if grep -qE "newcomerInstanceStats" modules/onboarding/db.js 2>/dev/null; then
|
|
345
|
+
ok "the onboarding db slice now lives in modules/onboarding/db.js"
|
|
346
|
+
else
|
|
347
|
+
bad "the onboarding db slice not found in modules/onboarding/db.js"
|
|
348
|
+
fi
|
|
349
|
+
# onboarding registers the `onboarding` port; the lifecycle (db.js) resolves it.
|
|
350
|
+
grep -q "registerProvider('onboarding'" modules/onboarding/routes/onboarding.js 2>/dev/null \
|
|
351
|
+
&& ok "onboarding registers the 'onboarding' provider at boot (modules/onboarding/routes/onboarding.js)" \
|
|
352
|
+
|| bad "onboarding does not registerProvider('onboarding')"
|
|
353
|
+
# the lifecycle's claim/ship carved to modules/lifecycle/db.js at R86 (it ticks the
|
|
354
|
+
# onboarding stage there); core auth.js (the auth callbacks) stays and resolves it too.
|
|
355
|
+
if grep -q "resolveOptional('onboarding')" modules/lifecycle/db.js 2>/dev/null \
|
|
356
|
+
&& grep -q "resolveOptional('onboarding')" src/bongos/auth.js 2>/dev/null; then
|
|
357
|
+
ok "the lifecycle + core resolve onboarding via the kernel port (resolveOptional('onboarding') in modules/lifecycle/db.js + core auth.js)"
|
|
358
|
+
else
|
|
359
|
+
bad "the lifecycle or core does not resolve 'onboarding' via the seam (modules/lifecycle/db.js + auth.js)"
|
|
360
|
+
fi
|
|
361
|
+
# no core file requires a moved onboarding domain file directly. The match is
|
|
362
|
+
# scoped to the moved domain basenames; the onboarding CLIs (setup/onboarding-
|
|
363
|
+
# config/onboarding-analyze/newcomer-floor) stay under scripts/, outside this scan.
|
|
364
|
+
if grep -rnE "require\(['\"][^'\"]*/(onboarding-state|newcomer-restock|approval-broadcast)['\"]\)" src/ server.js 2>/dev/null | grep -v node_modules | grep -v 'modules/onboarding' | grep -q .; then
|
|
365
|
+
bad "a core file still require()s a moved onboarding file directly (the port is bypassed)"
|
|
366
|
+
else
|
|
367
|
+
ok "no core file require()s a moved onboarding file directly — the edge is severed (ADR 0093 §1)"
|
|
368
|
+
fi
|
|
369
|
+
|
|
370
|
+
# --- 4f. sessions/BFG carved — like memory, registers NO port (R82 / ADR 0093) --
|
|
371
|
+
# The session-records corpus + its data plane + the BFG cross-builder scorer +
|
|
372
|
+
# the session-pulse helpers carved to modules/sessions/. Unlike economy/security/
|
|
373
|
+
# onboarding, sessions registers NO kernel port (provides: []) — exactly like
|
|
374
|
+
# memory: CORE never calls back into it (the ship-time digest write is an HTTP POST
|
|
375
|
+
# to the module's own /sessions route). The ONE outward edge is the economy
|
|
376
|
+
# `reward` port the module resolves (token reward + sumCreditsForTasks) — a
|
|
377
|
+
# module↔module seam, never a sibling require. We assert the domain files + the
|
|
378
|
+
# session_records db slice moved, the route mounts via the loader, and the BFG
|
|
379
|
+
# reaches the kernel only through the doorway.
|
|
380
|
+
if nrun "const m=require('./modules/sessions/module.json');process.exit(m.key==='sessions'&&(m.provides||[]).length===0&&(m.contributes.routes||[]).includes('sessions')?0:1)"; then
|
|
381
|
+
ok "modules/sessions/module.json valid (key=sessions, registers NO port like memory, routes sessions)"
|
|
382
|
+
else
|
|
383
|
+
bad "modules/sessions/module.json missing/invalid (key, should provide no port, or contributes.routes)"
|
|
384
|
+
fi
|
|
385
|
+
if nrun "const k=require('./scripts/gds/fitness.js').discoveredModuleKeys();process.exit(k.includes('sessions')?0:1)"; then
|
|
386
|
+
ok "the loader discovers 'sessions' as a module"
|
|
387
|
+
else
|
|
388
|
+
bad "loader does not discover 'sessions' (discoveredModuleKeys)"
|
|
389
|
+
fi
|
|
390
|
+
# the session domain files (bfg + pulse + the route) moved out of core into the module.
|
|
391
|
+
if [ ! -f src/bongos/bfg.js ] && [ ! -f src/bongos/pulse.js ] && [ ! -f src/bongos/routes/sessions.js ] \
|
|
392
|
+
&& [ -f modules/sessions/bfg.js ] && [ -f modules/sessions/pulse.js ] && [ -f modules/sessions/routes/sessions.js ]; then
|
|
393
|
+
ok "the session domain files are module-only (no src/bongos/{bfg,pulse}.js / routes/sessions.js; all in modules/sessions/)"
|
|
394
|
+
else
|
|
395
|
+
bad "a session domain file did not move cleanly (expected modules/sessions/{bfg,pulse,routes/sessions}.js, none in src/bongos/)"
|
|
396
|
+
fi
|
|
397
|
+
# the session_records db SLICE left core db.js (the upsert writer is the signal).
|
|
398
|
+
if grep -qE "INSERT INTO session_records" src/bongos/db.js 2>/dev/null; then
|
|
399
|
+
bad "the session_records writer (upsertSessionRecordTx) still lives in core src/bongos/db.js (slice did not leave)"
|
|
400
|
+
else
|
|
401
|
+
ok "the session_records db slice left src/bongos/db.js (upsert/search/fetch are module-only)"
|
|
402
|
+
fi
|
|
403
|
+
if grep -qE "INSERT INTO session_records" modules/sessions/db.js 2>/dev/null; then
|
|
404
|
+
ok "the session_records db slice now lives in modules/sessions/db.js"
|
|
405
|
+
else
|
|
406
|
+
bad "the session_records db slice not found in modules/sessions/db.js"
|
|
407
|
+
fi
|
|
408
|
+
# sessions resolves the economy `reward` port (the module↔module seam) and the
|
|
409
|
+
# core route mount left routes.js (mountModuleRoutes mounts it now).
|
|
410
|
+
if grep -q "resolveOptional('reward')" modules/sessions/db.js 2>/dev/null \
|
|
411
|
+
&& grep -q "resolveOptional('reward')" modules/sessions/routes/sessions.js 2>/dev/null; then
|
|
412
|
+
ok "sessions resolves the economy 'reward' port (resolveOptional('reward') in db.js + routes/sessions.js — module↔module seam)"
|
|
413
|
+
else
|
|
414
|
+
bad "sessions does not resolve the 'reward' port via the seam in both db.js and routes/sessions.js"
|
|
415
|
+
fi
|
|
416
|
+
if grep -q "require('./routes/sessions')" src/bongos/routes.js 2>/dev/null; then
|
|
417
|
+
bad "core routes.js still require()s ./routes/sessions directly (the route mount was not severed)"
|
|
418
|
+
else
|
|
419
|
+
ok "no core file require()s the moved sessions route directly — mountModuleRoutes mounts it (ADR 0093 §1)"
|
|
420
|
+
fi
|
|
421
|
+
|
|
422
|
+
# --- 4g. autonomy/MAS carved — NO port; OBSERVES lifecycle (R83 / ADR 0093) ----
|
|
423
|
+
# The Multi-Agent System (ADR 0024): the autonomy gate, the conductor/architect/
|
|
424
|
+
# run-routine CLIs, and the in-process routine timers carved to modules/autonomy/.
|
|
425
|
+
# The cross-cutting domain — it OBSERVES lifecycle. Two inbound core→autonomy edges
|
|
426
|
+
# inverted: the routine timer (was routineTimers.start() in server.js) is now a
|
|
427
|
+
# loader-started POLLER (contributes.pollers), and the precheck route (was mounted
|
|
428
|
+
# in routes.js) a module route. Like sessions/memory it registers NO kernel port;
|
|
429
|
+
# its ONE outward edge is the lifecycle `tallyPeerVotes` capability it resolves
|
|
430
|
+
# through the DOORWAY (api.tallyPeerVotes — a tracked lifecycle leak), never a core
|
|
431
|
+
# require. We assert the manifest, the loader discovery, the moved files, the
|
|
432
|
+
# autonomy_runs db slice, the poller seam, the doorway capability, and that both
|
|
433
|
+
# severed edges (the timer start + the route mount) left core.
|
|
434
|
+
if nrun "const m=require('./modules/autonomy/module.json');process.exit(m.key==='autonomy'&&(m.provides||[]).length===0&&(m.contributes.routes||[]).includes('autonomy')&&(m.contributes.pollers||[]).includes('routine-timers')?0:1)"; then
|
|
435
|
+
ok "modules/autonomy/module.json valid (key=autonomy, NO port like sessions, routes autonomy + pollers routine-timers)"
|
|
436
|
+
else
|
|
437
|
+
bad "modules/autonomy/module.json missing/invalid (key, should provide no port, contributes.routes/pollers)"
|
|
438
|
+
fi
|
|
439
|
+
if nrun "const k=require('./scripts/gds/fitness.js').discoveredModuleKeys();process.exit(k.includes('autonomy')?0:1)"; then
|
|
440
|
+
ok "the loader discovers 'autonomy' as a module"
|
|
441
|
+
else
|
|
442
|
+
bad "loader does not discover 'autonomy' (discoveredModuleKeys)"
|
|
443
|
+
fi
|
|
444
|
+
# the carved domain files (the routine-timers poller + the precheck route) moved
|
|
445
|
+
# out of core into the module.
|
|
446
|
+
if [ ! -f src/bongos/routine-timers.js ] && [ ! -f src/bongos/routes/autonomy.js ] \
|
|
447
|
+
&& [ -f modules/autonomy/pollers/routine-timers.js ] && [ -f modules/autonomy/routes/autonomy.js ]; then
|
|
448
|
+
ok "the autonomy domain files are module-only (no src/bongos/routine-timers.js / routes/autonomy.js; all in modules/autonomy/)"
|
|
449
|
+
else
|
|
450
|
+
bad "an autonomy domain file did not move cleanly (expected modules/autonomy/{pollers/routine-timers,routes/autonomy}.js, none in src/bongos/)"
|
|
451
|
+
fi
|
|
452
|
+
# the autonomy_runs db SLICE left core db.js (the INSERT writer is the signal).
|
|
453
|
+
if grep -qE "INSERT INTO autonomy_runs" src/bongos/db.js 2>/dev/null; then
|
|
454
|
+
bad "the autonomy_runs writer (recordAutonomyRun) still lives in core src/bongos/db.js (slice did not leave)"
|
|
455
|
+
else
|
|
456
|
+
ok "the autonomy_runs db slice left src/bongos/db.js (recordAutonomyRun/lastAutonomyHead are module-only)"
|
|
457
|
+
fi
|
|
458
|
+
if grep -qE "INSERT INTO autonomy_runs" modules/autonomy/db.js 2>/dev/null; then
|
|
459
|
+
ok "the autonomy_runs db slice now lives in modules/autonomy/db.js"
|
|
460
|
+
else
|
|
461
|
+
bad "the autonomy_runs db slice not found in modules/autonomy/db.js"
|
|
462
|
+
fi
|
|
463
|
+
# the routine timer reaches the lifecycle tallyPeerVotes capability through the
|
|
464
|
+
# `lifecycle` kernel PORT (the doorway leak retired at BV1.R86), not a core require.
|
|
465
|
+
if grep -q "require('../../../src/module-api')" modules/autonomy/pollers/routine-timers.js 2>/dev/null \
|
|
466
|
+
&& grep -q "resolveOptional('lifecycle')" modules/autonomy/pollers/routine-timers.js 2>/dev/null; then
|
|
467
|
+
ok "the routine-timers poller resolves 'tallyPeerVotes' via the lifecycle PORT (resolveOptional('lifecycle') — never a core require; the doorway leak retired at R86)"
|
|
468
|
+
else
|
|
469
|
+
bad "the routine-timers poller does not reach tallyPeerVotes through the lifecycle port"
|
|
470
|
+
fi
|
|
471
|
+
# both severed edges left core: the timer start (server.js) and the route mount (routes.js).
|
|
472
|
+
if grep -q "require('./bongos/routine-timers')" server.js 2>/dev/null || grep -q "routineTimers.start" server.js 2>/dev/null; then
|
|
473
|
+
bad "server.js still starts routineTimers directly (the poller seam did not replace the hardcoded start)"
|
|
474
|
+
elif grep -q "require('./routes/autonomy')" src/bongos/routes.js 2>/dev/null; then
|
|
475
|
+
bad "core routes.js still require()s ./routes/autonomy directly (the route mount was not severed)"
|
|
476
|
+
else
|
|
477
|
+
ok "no core file starts the timer or mounts the autonomy route directly — the loader (startModulePollers + mountModuleRoutes) wires both (ADR 0093 §1)"
|
|
478
|
+
fi
|
|
479
|
+
|
|
480
|
+
# --- 4h. status-UI carved — the FIRST web-surface module (R84 / ADR 0093) ------
|
|
481
|
+
# The public status dashboard (public-status/, ~3k LOC) became a first-class
|
|
482
|
+
# WEB-SURFACE module (02-module-map §6). Unlike every backend carve it has NO db
|
|
483
|
+
# slice, NO kernel port, and NO routes — it is pure static assets + a
|
|
484
|
+
# contributes.webSurfaces manifest declaration the loader hands serve-internal,
|
|
485
|
+
# which serves the module's public/ dir on the status. host. We assert the
|
|
486
|
+
# manifest, the loader discovery, the moved static surface, the generalized serving
|
|
487
|
+
# seam (serve-internal resolves moduleWebSurfaces, no hardcoded public-status), and
|
|
488
|
+
# that the old repo-root path is gone from core.
|
|
489
|
+
if nrun "const m=require('./modules/status-ui/module.json');const ws=(m.contributes&&m.contributes.webSurfaces)||[];process.exit(m.key==='status-ui'&&(m.provides||[]).length===0&&!(m.contributes.routes||[]).length&&ws.length===1&&ws[0].host==='status.'&&ws[0].dir==='public'?0:1)"; then
|
|
490
|
+
ok "modules/status-ui/module.json valid (key=status-ui, NO port + NO routes, webSurfaces=[{host:status.,dir:public}])"
|
|
491
|
+
else
|
|
492
|
+
bad "modules/status-ui/module.json missing/invalid (key, should declare webSurfaces with no port/routes)"
|
|
493
|
+
fi
|
|
494
|
+
if nrun "const k=require('./scripts/gds/fitness.js').discoveredModuleKeys();process.exit(k.includes('status-ui')?0:1)"; then
|
|
495
|
+
ok "the loader discovers 'status-ui' as a module"
|
|
496
|
+
else
|
|
497
|
+
bad "loader does not discover 'status-ui' (discoveredModuleKeys)"
|
|
498
|
+
fi
|
|
499
|
+
# the static surface moved out of the repo root into the module.
|
|
500
|
+
if [ ! -d public-status ] && [ -f modules/status-ui/public/index.html ] && [ -f modules/status-ui/public/status.js ]; then
|
|
501
|
+
ok "the status surface is module-only (no repo-root public-status/; modules/status-ui/public/{index.html,status.js} present)"
|
|
502
|
+
else
|
|
503
|
+
bad "the status surface did not move cleanly (expected modules/status-ui/public/, no repo-root public-status/)"
|
|
504
|
+
fi
|
|
505
|
+
# the loader exposes the web-surface seam, and the live status-ui surface resolves through it.
|
|
506
|
+
if nrun "const l=require('./src/module-loader/loader.js');const {isModuleEnabled}=require('./src/modules.js');const s=l.moduleWebSurfaces({isEnabled:isModuleEnabled}).find(x=>x.key==='status-ui');process.exit(s&&s.host==='status.'&&require('node:fs').existsSync(require('node:path').join(s.dir,'index.html'))?0:1)"; then
|
|
507
|
+
ok "loader.moduleWebSurfaces resolves the live status-ui surface (host status., serves its index.html)"
|
|
508
|
+
else
|
|
509
|
+
bad "loader.moduleWebSurfaces does not resolve the status-ui surface"
|
|
510
|
+
fi
|
|
511
|
+
# serve-internal serves via the GENERALIZED seam (moduleWebSurfaces), with no hardcoded public-status path.
|
|
512
|
+
if grep -q "moduleWebSurfaces" src/bongos/serve-internal.js 2>/dev/null && ! grep -q "public-status" src/bongos/serve-internal.js 2>/dev/null; then
|
|
513
|
+
ok "serve-internal serves web surfaces via the loader seam (moduleWebSurfaces) — no hardcoded public-status path (ADR 0083 §Decision #4)"
|
|
514
|
+
else
|
|
515
|
+
bad "serve-internal still hardcodes public-status or does not use the moduleWebSurfaces seam"
|
|
516
|
+
fi
|
|
517
|
+
|
|
518
|
+
# --- 4i. hall-UI carved — the LARGEST web-surface module (R85 / ADR 0093) ------
|
|
519
|
+
# The authenticated builders' hall (public-builders/, ~13k LOC) became a first-class
|
|
520
|
+
# WEB-SURFACE module (02-module-map §6) — the largest of the two web surfaces. Like
|
|
521
|
+
# status-UI it has NO db slice, NO kernel port, and NO routes; it declares
|
|
522
|
+
# contributes.webSurfaces:[{host:"builders.",dir:"public"}] so the loader DISCOVERS
|
|
523
|
+
# it (feeding the scope map, fitness keys, docs, window.__MODULES__). UNLIKE the
|
|
524
|
+
# generic status surface, the hall keeps its DEDICATED serving block in serve-internal
|
|
525
|
+
# (the apex /builders/* shim, canonical redirects, the citizen/Archon page gates,
|
|
526
|
+
# per-page asset-stamping, and the module hall-widget injection) — it is partitioned
|
|
527
|
+
# OUT of the generic web-surface loop and served from BUILDERS_DIR = modules/hall-ui/
|
|
528
|
+
# public/. We assert the manifest, the loader discovery, the moved static surface, the
|
|
529
|
+
# resolved web-surface descriptor, and that no repo-root public-builders/ path remains
|
|
530
|
+
# in core serve-internal.
|
|
531
|
+
if nrun "const m=require('./modules/hall-ui/module.json');const ws=(m.contributes&&m.contributes.webSurfaces)||[];process.exit(m.key==='hall-ui'&&(m.provides||[]).length===0&&!(m.contributes.routes||[]).length&&ws.length===1&&ws[0].host==='builders.'&&ws[0].dir==='public'?0:1)"; then
|
|
532
|
+
ok "modules/hall-ui/module.json valid (key=hall-ui, NO port + NO routes, webSurfaces=[{host:builders.,dir:public}])"
|
|
533
|
+
else
|
|
534
|
+
bad "modules/hall-ui/module.json missing/invalid (key, should declare webSurfaces with no port/routes)"
|
|
535
|
+
fi
|
|
536
|
+
if nrun "const k=require('./scripts/gds/fitness.js').discoveredModuleKeys();process.exit(k.includes('hall-ui')?0:1)"; then
|
|
537
|
+
ok "the loader discovers 'hall-ui' as a module"
|
|
538
|
+
else
|
|
539
|
+
bad "loader does not discover 'hall-ui' (discoveredModuleKeys)"
|
|
540
|
+
fi
|
|
541
|
+
# the static surface moved out of the repo root into the module.
|
|
542
|
+
if [ ! -d public-builders ] && [ -f modules/hall-ui/public/index.html ] && [ -f modules/hall-ui/public/builders.js ]; then
|
|
543
|
+
ok "the hall surface is module-only (no repo-root public-builders/; modules/hall-ui/public/{index.html,builders.js} present)"
|
|
544
|
+
else
|
|
545
|
+
bad "the hall surface did not move cleanly (expected modules/hall-ui/public/, no repo-root public-builders/)"
|
|
546
|
+
fi
|
|
547
|
+
# the loader exposes the web-surface seam, and the live hall-ui surface resolves through it.
|
|
548
|
+
if nrun "const l=require('./src/module-loader/loader.js');const {isModuleEnabled}=require('./src/modules.js');const s=l.moduleWebSurfaces({isEnabled:isModuleEnabled}).find(x=>x.key==='hall-ui');process.exit(s&&s.host==='builders.'&&require('node:fs').existsSync(require('node:path').join(s.dir,'index.html'))?0:1)"; then
|
|
549
|
+
ok "loader.moduleWebSurfaces resolves the live hall-ui surface (host builders., serves its index.html)"
|
|
550
|
+
else
|
|
551
|
+
bad "loader.moduleWebSurfaces does not resolve the hall-ui surface"
|
|
552
|
+
fi
|
|
553
|
+
# serve-internal serves the hall from the MODULE dir (BUILDERS_DIR), with no hardcoded
|
|
554
|
+
# repo-root public-builders path. The dedicated block stays (it is NOT the generic loop).
|
|
555
|
+
if grep -q "modules', 'hall-ui', 'public'" src/bongos/serve-internal.js 2>/dev/null && ! grep -qE "'public-builders'|\"public-builders\"" src/bongos/serve-internal.js 2>/dev/null; then
|
|
556
|
+
ok "serve-internal serves the hall from modules/hall-ui/public (BUILDERS_DIR) — no hardcoded repo-root public-builders path (BV1.R85)"
|
|
557
|
+
else
|
|
558
|
+
bad "serve-internal still hardcodes a repo-root public-builders path or does not point BUILDERS_DIR at modules/hall-ui/public"
|
|
559
|
+
fi
|
|
560
|
+
|
|
561
|
+
# --- 4j. lifecycle carved — the LAST core domain + the `lifecycle` PORT (R86) ---
|
|
562
|
+
# The build state machine (tasks·claims·versions·done-when·goals·dependencies·
|
|
563
|
+
# ship orchestration) — the most-coupled core domain — carved to modules/lifecycle/.
|
|
564
|
+
# It registers the `lifecycle` kernel PORT and RETIRES the three ADR-0091 §3 doorway
|
|
565
|
+
# leaks (createTask / VOTABLE_TASK_STATUSES / tallyPeerVotes), so the db.js residue
|
|
566
|
+
# is now exactly the kernel identity/auth/twin slice + db-kernel.js (ADR 0093 §3).
|
|
567
|
+
# We assert the manifest, the loader discovery, the moved domain files + db slice,
|
|
568
|
+
# the port registration + resolution, the retired leaks, and the inverted poller.
|
|
569
|
+
if nrun "const m=require('./modules/lifecycle/module.json');process.exit(m.key==='lifecycle'&&(m.provides||[]).includes('lifecycle')&&['tasks','claims','versions','done-when','goals','dependencies','gate-approvals','analytics'].every(r=>(m.contributes.routes||[]).includes(r))&&(m.contributes.pollers||[]).includes('publish-reconciler')?0:1)"; then
|
|
570
|
+
ok "modules/lifecycle/module.json valid (key=lifecycle, provides 'lifecycle' port, the lifecycle routes + the publish-reconciler poller)"
|
|
571
|
+
else
|
|
572
|
+
bad "modules/lifecycle/module.json missing/invalid (key, provides 'lifecycle', contributes.routes/pollers)"
|
|
573
|
+
fi
|
|
574
|
+
if nrun "const k=require('./scripts/gds/fitness.js').discoveredModuleKeys();process.exit(k.includes('lifecycle')?0:1)"; then
|
|
575
|
+
ok "the loader discovers 'lifecycle' as a module"
|
|
576
|
+
else
|
|
577
|
+
bad "loader does not discover 'lifecycle' (discoveredModuleKeys)"
|
|
578
|
+
fi
|
|
579
|
+
# the lifecycle domain libs + routes moved out of core into the module.
|
|
580
|
+
if [ ! -f src/bongos/task-classifier.js ] && [ ! -f src/bongos/done-when.js ] && [ ! -f src/bongos/hierarchy.js ] \
|
|
581
|
+
&& [ ! -f src/bongos/github-push.js ] && [ ! -f src/bongos/merge-lock.js ] && [ ! -f src/bongos/routes/tasks.js ] \
|
|
582
|
+
&& [ -f modules/lifecycle/task-classifier.js ] && [ -f modules/lifecycle/routes/tasks.js ] && [ -f modules/lifecycle/db.js ]; then
|
|
583
|
+
ok "the lifecycle domain is module-only (no src/bongos/{task-classifier,done-when,hierarchy,github-push,merge-lock}.js or routes/tasks.js; all in modules/lifecycle/)"
|
|
584
|
+
else
|
|
585
|
+
bad "a moved lifecycle file still exists under src/bongos/ (a lib or a route)"
|
|
586
|
+
fi
|
|
587
|
+
# the lifecycle state-machine SQL SLICE left core db.js (claimTask/shipTask/createTask are the signal).
|
|
588
|
+
if grep -qE "^async function (claimTask|shipTask|createTask|resolveClaim)\b" src/bongos/db.js 2>/dev/null; then
|
|
589
|
+
bad "the lifecycle state-machine functions still live in core src/bongos/db.js (slice did not leave)"
|
|
590
|
+
else
|
|
591
|
+
ok "the lifecycle state-machine SQL left src/bongos/db.js — the residue is the kernel identity/auth/twin slice (ADR 0093 §3)"
|
|
592
|
+
fi
|
|
593
|
+
if grep -qE "async function (claimTask|shipTask|createTask)\b" modules/lifecycle/db.js 2>/dev/null; then
|
|
594
|
+
ok "the lifecycle state-machine SQL now lives in modules/lifecycle/db.js (claim/ship/createTask/…)"
|
|
595
|
+
else
|
|
596
|
+
bad "the lifecycle state-machine SQL not found in modules/lifecycle/db.js"
|
|
597
|
+
fi
|
|
598
|
+
# lifecycle registers the `lifecycle` port; core read routes + cascade-dispatch resolve it.
|
|
599
|
+
grep -q "registerProvider('lifecycle'" modules/lifecycle/routes/lifecycle.js 2>/dev/null \
|
|
600
|
+
&& ok "lifecycle registers the 'lifecycle' provider at boot (modules/lifecycle/routes/lifecycle.js)" \
|
|
601
|
+
|| bad "lifecycle does not registerProvider('lifecycle')"
|
|
602
|
+
if grep -q "resolveOptional('lifecycle')" src/bongos/routes/public.js 2>/dev/null \
|
|
603
|
+
&& grep -q "resolveOptional('lifecycle')" src/bongos/cascade-dispatch.js 2>/dev/null; then
|
|
604
|
+
ok "core resolves the lifecycle port (resolveOptional('lifecycle') in public.js + cascade-dispatch.js)"
|
|
605
|
+
else
|
|
606
|
+
bad "core does not resolve 'lifecycle' via the seam in both public.js and cascade-dispatch.js"
|
|
607
|
+
fi
|
|
608
|
+
# the three ADR-0091 §3 doorway leaks retired (off the doorway, behind the port).
|
|
609
|
+
if grep -qE "^ createTask:|^ get VOTABLE_TASK_STATUSES|^ tallyPeerVotes:" src/module-api.js 2>/dev/null; then
|
|
610
|
+
bad "a retired lifecycle leak (createTask/VOTABLE_TASK_STATUSES/tallyPeerVotes) is still on the doorway (src/module-api.js)"
|
|
611
|
+
else
|
|
612
|
+
ok "the three lifecycle doorway leaks retired (createTask/VOTABLE_TASK_STATUSES/tallyPeerVotes off src/module-api.js — the last leak deletion, ADR 0093 §3)"
|
|
613
|
+
fi
|
|
614
|
+
# the consumers of the retired leaks resolve the lifecycle port instead.
|
|
615
|
+
if grep -q "resolveOptional('lifecycle')" modules/onboarding/db.js 2>/dev/null \
|
|
616
|
+
&& grep -q "resolveOptional('lifecycle')" modules/discord/discord-reaction.js 2>/dev/null \
|
|
617
|
+
&& grep -q "resolveOptional('lifecycle')" modules/autonomy/pollers/routine-timers.js 2>/dev/null; then
|
|
618
|
+
ok "the leak consumers resolve the lifecycle port (onboarding createTask · discord VOTABLE · autonomy tallyPeerVotes)"
|
|
619
|
+
else
|
|
620
|
+
bad "a retired-leak consumer (onboarding/discord/autonomy) does not resolve the lifecycle port"
|
|
621
|
+
fi
|
|
622
|
+
# the publish-reconciler poller inverted: server.js no longer starts it directly.
|
|
623
|
+
if grep -q "publishReconciler.start" server.js 2>/dev/null || grep -q "require('./src/bongos/publish-reconciler')" server.js 2>/dev/null; then
|
|
624
|
+
bad "server.js still starts the publish reconciler directly (the poller seam did not replace the hardcoded start)"
|
|
625
|
+
else
|
|
626
|
+
ok "no core file starts the publish reconciler directly — the loader (startModulePollers) wires the lifecycle poller (ADR 0093 §1)"
|
|
627
|
+
fi
|
|
628
|
+
|
|
629
|
+
# --- 5. OTB behaves byte-identically -----------------------------------------
|
|
630
|
+
# The DB-free tests that exercise the CARVED surfaces. If the carve changed only
|
|
631
|
+
# structure (not behavior), every one passes unchanged. Curated like the sets in
|
|
632
|
+
# run-unit-tests.js — a new module/grading/memory test is opted in deliberately.
|
|
633
|
+
CARVE_TESTS=(
|
|
634
|
+
# module system (the kernel machinery the carve rides on) — module_loader +
|
|
635
|
+
# module_manifest also cover the R84/R85 web-surface seam (moduleWebSurfaces +
|
|
636
|
+
# the webSurfaces manifest key, incl. the live status-ui + hall-ui surfaces);
|
|
637
|
+
# fitness/modules cover status-ui + hall-ui membership; module_contributions
|
|
638
|
+
# exercises the hall's dom-utils settings-panel seam (now read from
|
|
639
|
+
# modules/hall-ui/public/); atlas pins the hall's Repo Atlas renderer contract.
|
|
640
|
+
fitness module_api module_seams module_loader modules module_manifest
|
|
641
|
+
module_cli module_route_rank module_contributions module-scope-map atlas
|
|
642
|
+
# grading — R73: carved capability + the `grade` kernel port
|
|
643
|
+
grader grader_panel grader_prompt_fencing grader_bypass
|
|
644
|
+
grade_attempts grade_attribution grade_server_authoritative
|
|
645
|
+
grade_unavailable_display regrade_eligibility
|
|
646
|
+
# memory + search + recall — R72: carved domain
|
|
647
|
+
memory_map search_route search_chunker search_ingest search_ingest_db
|
|
648
|
+
search_isolation recall_cli recall_hints
|
|
649
|
+
# economy — R77 / ADR 0093: carved domain + the `reward` kernel port
|
|
650
|
+
credit_grant cost cost_audit cost_budget_status cost_summary_shape streak
|
|
651
|
+
grade_attribution confirm_attribution diff_derived_signals
|
|
652
|
+
# security — R79 / ADR 0093: FEATURE carved (reports+bounty); PROPERTY stays
|
|
653
|
+
# kernel. These DB-free tests exercise the property plane that stayed in core
|
|
654
|
+
# routes/security.js + its rank pins (byte-identical after the route split).
|
|
655
|
+
security_route security_docs
|
|
656
|
+
# builder-settings — R80 / ADR 0093: the prefs domain carved + the
|
|
657
|
+
# `builder-settings` kernel port. The pure shapers (byte-identical after the move).
|
|
658
|
+
skill_prefs sound_prefs wandering_prefs render_prefs builder_needs cascade-dispatch
|
|
659
|
+
# onboarding — R81 / ADR 0093: the admission · state-machine · newcomer-restock
|
|
660
|
+
# domain carved + the `onboarding` kernel port. The state-machine engine + the
|
|
661
|
+
# gate middleware + the restock stamper + the route-signal pass-through (the
|
|
662
|
+
# route now resolves the port — registered in the test) — byte-identical.
|
|
663
|
+
onboarding_state onboarding_gate newcomer_restock onboarding_route_signals
|
|
664
|
+
# sessions/BFG — R82 / ADR 0093: the session-records corpus + data plane + BFG
|
|
665
|
+
# scorer + session-pulse carved (NO port, like memory). The search ORDER-BY/clamp
|
|
666
|
+
# guards (module db), the SR-17 disk-fill bounds (module route + module db,
|
|
667
|
+
# reward port registered in the test), the 6D evaluator + #506 regression, the
|
|
668
|
+
# ship-time digest builder, and the backfill scope-parser — byte-identical.
|
|
669
|
+
session_search session_caps session_eval session_506_regression session_digest
|
|
670
|
+
session_records backfill_sessions
|
|
671
|
+
# autonomy/MAS — R83 / ADR 0093: the autonomy gate + conductor/architect CLIs +
|
|
672
|
+
# the routine timers carved (NO port, like sessions; OBSERVES lifecycle via the
|
|
673
|
+
# poller seam + the `lifecycle` port for tallyPeerVotes). The pure gate decision
|
|
674
|
+
# (inert until armed), the peer-vote timer's run function (pure w.r.t. injected
|
|
675
|
+
# deps), and the conductor/architect/run-routine CLI logic — byte-identical.
|
|
676
|
+
autonomy_gate routine_timers conductor architect run_routine
|
|
677
|
+
# lifecycle — R86 / ADR 0093 §3: the build state machine carved (the LAST + most-
|
|
678
|
+
# coupled domain) + the `lifecycle` kernel port + the three retired doorway leaks.
|
|
679
|
+
# The pure DB-free surfaces: the task-kind/votable classifier, the done-when
|
|
680
|
+
# criterion progress shaper, github-push ancestry/land-proof/merge-driver, the
|
|
681
|
+
# ship-card + ship-preflight pure guards, merge-lock, conflict-resolve, the
|
|
682
|
+
# publish-reconciler's pure run, the goal-achievement rollup, and the context-pack
|
|
683
|
+
# bounds (which read the classifier) — all byte-identical after the move.
|
|
684
|
+
task_classifier_vocab criterion_progress github_push_ancestry github_push_land_proof
|
|
685
|
+
github_push_merge_driver ship_card ship_preflight merge_lock conflict_resolve
|
|
686
|
+
publish_reconciler goal_achievement context_pack
|
|
687
|
+
)
|
|
688
|
+
if [ "${SKIP_SUITE:-0}" = "1" ]; then
|
|
689
|
+
echo " (byte-identical leg skipped — SKIP_SUITE=1; run without it to exercise carved surfaces)"
|
|
690
|
+
else
|
|
691
|
+
echo "--- running ${#CARVE_TESTS[@]} DB-free tests that exercise the carved surfaces ---"
|
|
692
|
+
carve_fail=0
|
|
693
|
+
for t in "${CARVE_TESTS[@]}"; do
|
|
694
|
+
if NODE_ENV=test node "tests/$t.mjs" >/dev/null 2>&1; then
|
|
695
|
+
echo " ok $t"
|
|
696
|
+
else
|
|
697
|
+
echo " FAIL $t"; carve_fail=$((carve_fail+1))
|
|
698
|
+
fi
|
|
699
|
+
done
|
|
700
|
+
[ "$carve_fail" -eq 0 ] \
|
|
701
|
+
&& ok "all ${#CARVE_TESTS[@]} carved-surface tests pass unchanged — behavior is byte-identical post-carve" \
|
|
702
|
+
|| bad "$carve_fail carved-surface test(s) failed — behavior is NOT byte-identical"
|
|
703
|
+
|
|
704
|
+
if [ "${FULL_SUITE:-0}" = "1" ]; then
|
|
705
|
+
echo "--- FULL_SUITE=1: also running the full CI 'unit' gate (run-unit-tests.js) ---"
|
|
706
|
+
if node scripts/gds/run-unit-tests.js; then
|
|
707
|
+
ok "full DB-free unit gate passes (run-unit-tests.js)"
|
|
708
|
+
else
|
|
709
|
+
bad "full DB-free unit gate has failures — inspect (infra tests need a CI-like env: preview server + git remote)"
|
|
710
|
+
fi
|
|
711
|
+
fi
|
|
712
|
+
fi
|
|
713
|
+
|
|
714
|
+
# --- summary -----------------------------------------------------------------
|
|
715
|
+
echo "=== C7 core-carve proof: $PASS passed, $FAIL failed ==="
|
|
716
|
+
[ "$FAIL" -eq 0 ]
|