@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,519 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
'use strict';
|
|
3
|
+
// gen-repo-map.js — Path B (ADR 0062 §9 / ADR 0063, task 1224).
|
|
4
|
+
//
|
|
5
|
+
// A committed, CI-regenerated SYMBOL SKELETON for this instance's codebase:
|
|
6
|
+
// (1) docs/repo-map.md — an "altitude map" so an agent can navigate without reading every
|
|
7
|
+
// file: top symbols ranked by reference frequency (à la Aider's repo map) + per-directory
|
|
8
|
+
// exported signatures.
|
|
9
|
+
// (2) refreshes the FACTUAL half of the nested per-module CLAUDE.md docs (ADR 0061) — a
|
|
10
|
+
// generated, delimited block of the directory's exported signatures, so the hand-written
|
|
11
|
+
// interpretive prose stays put while the file list / signatures can't silently drift.
|
|
12
|
+
//
|
|
13
|
+
// Zero-dependency on purpose: the codebase is CommonJS JS, and a portable-core capability must
|
|
14
|
+
// regenerate in CI and on every dev box with no native build / no node-gyp / no WASM grammar to
|
|
15
|
+
// fetch (the whole point of Paths B+C is keeping every instance navigable cheaply). A line+regex
|
|
16
|
+
// extractor is accurate enough for an *advisory* navigation aid (it is not a compiler input). A
|
|
17
|
+
// richer tree-sitter/WASM backend can slot in behind extractFile() later for polyglot instances
|
|
18
|
+
// (ADR 0063 Alternatives).
|
|
19
|
+
//
|
|
20
|
+
// Deterministic: no timestamps, stable sort — so `--check` is a clean idempotent CI gate.
|
|
21
|
+
//
|
|
22
|
+
// Usage:
|
|
23
|
+
// node scripts/gds/gen-repo-map.js # regenerate docs/repo-map.md + nested-doc blocks
|
|
24
|
+
// node scripts/gds/gen-repo-map.js --check # write nothing; exit 2 if EITHER bucket would change
|
|
25
|
+
// node scripts/gds/gen-repo-map.js --check-block # exit 2 only if a TRACKED nested block would change (the CI gate)
|
|
26
|
+
// node scripts/gds/gen-repo-map.js --check-whole # exit 2 only if docs/repo-map.md would change
|
|
27
|
+
// docs/repo-map.md is GITIGNORED + regenerated at deploy/box-fetch since ADR 0110 (task 1926);
|
|
28
|
+
// only the nested-doc symbol blocks stay tracked, so CI gates the block bucket, not the whole file.
|
|
29
|
+
// node scripts/gds/gen-repo-map.js --json # print the extracted model as JSON (debug)
|
|
30
|
+
|
|
31
|
+
const fs = require('node:fs');
|
|
32
|
+
const path = require('node:path');
|
|
33
|
+
const { resolveCoreRoot, resolveInstanceRoot } = require('../../src/instance-config'); // ADR 0108 §1: configurable-root
|
|
34
|
+
// task 2013: reuse docs-entropy's link/staleness detectors (single source) to
|
|
35
|
+
// build the doc link-graph + staleness flags. Requiring it is side-effect-free
|
|
36
|
+
// (its CLI body is require.main-guarded).
|
|
37
|
+
const docsEntropy = require('./docs-entropy');
|
|
38
|
+
|
|
39
|
+
// ADR 0108 §Consequences #4 (configurable-root W6 / task 1886) — the generator scans TWO trees.
|
|
40
|
+
// CORE code + the core-owned nested docs live under the core PACKAGE (resolveCoreRoot); the
|
|
41
|
+
// instance's .claude/hooks are materialized under the host REPO (resolveInstanceRoot); modules
|
|
42
|
+
// ship from BOTH. Today both resolve to the same checkout, so the scan is byte-identical; once the
|
|
43
|
+
// core installs from node_modules they diverge and the map covers the right trees. A NEW hardcoded
|
|
44
|
+
// `path.resolve(__dirname,'..','..')` reintroduces the bug.
|
|
45
|
+
const CORE_ROOT = resolveCoreRoot();
|
|
46
|
+
const INSTANCE_ROOT = resolveInstanceRoot();
|
|
47
|
+
const REPO_ROOT = CORE_ROOT; // alias for the purely-core scan/write sites; instance/module sites route explicitly
|
|
48
|
+
const MODULE_ROOTS = [...new Set([CORE_ROOT, INSTANCE_ROOT])];
|
|
49
|
+
|
|
50
|
+
// Source roots scanned for both symbol extraction AND reference counting, grouped by which root
|
|
51
|
+
// each resolves against. The build-system core (server-side JS) — the Cloud Bongos decoupling
|
|
52
|
+
// target. Extend here to map more of an instance.
|
|
53
|
+
const CORE_SCAN_ROOTS = ['server.js', 'src', 'scripts'];
|
|
54
|
+
const INSTANCE_SCAN_ROOTS = ['.claude/hooks'];
|
|
55
|
+
const MODULE_SCAN_ROOT = 'modules';
|
|
56
|
+
const SCAN_ROOTS = [...CORE_SCAN_ROOTS, ...INSTANCE_SCAN_ROOTS, MODULE_SCAN_ROOT]; // combined list, for the scope header
|
|
57
|
+
|
|
58
|
+
// Directories whose nested CLAUDE.md gets a generated symbol-skeleton block (must already exist —
|
|
59
|
+
// they are authored in Path A / ADR 0061; this only refreshes the factual half). All CORE dirs.
|
|
60
|
+
const NESTED_DIRS = ['src/bongos', 'src/bongos/routes', 'scripts/gds'];
|
|
61
|
+
|
|
62
|
+
const EXCLUDE_DIR = new Set(['node_modules', '.git', 'tests', 'test', 'vendor']);
|
|
63
|
+
const TOP_GLOBAL = 50; // global "most-referenced" table cap
|
|
64
|
+
const PER_FILE = 10; // exported symbols listed per file
|
|
65
|
+
const SIG_MAX = 90; // signature truncation
|
|
66
|
+
|
|
67
|
+
const BEGIN = '<!-- BEGIN GENERATED REPO-MAP (scripts/gds/gen-repo-map.js — do not hand-edit) -->';
|
|
68
|
+
const END = '<!-- END GENERATED REPO-MAP -->';
|
|
69
|
+
|
|
70
|
+
// Generic per-file local-helper / boilerplate names. They dominate a raw token tally (every script
|
|
71
|
+
// has a `main`, a `log`, an `err`) but say nothing about cross-file centrality, so they are noise
|
|
72
|
+
// for an altitude map. CommonJS reachability means real cross-file centrality ⟺ being exported, so
|
|
73
|
+
// the global ranking is exported-only; this list trims the few generic names that still leak in.
|
|
74
|
+
const NOISE = new Set([
|
|
75
|
+
'main', 'run', 'log', 'err', 'warn', 'fail', 'ok', 'info', 'debug', 'usage', 'help', 'sleep',
|
|
76
|
+
'noop', 'status', 'client', 'pool', 'res', 'req', 'next', 'data', 'result', 'val', 'value',
|
|
77
|
+
'fn', 'cb', 'msg', 'out', 'ret', 'args', 'opts', 'options', 'ctx', 'app', 'router', 'init',
|
|
78
|
+
]);
|
|
79
|
+
const isNoise = (name) => NOISE.has(name) || name.length <= 2;
|
|
80
|
+
|
|
81
|
+
// macOS Finder / iCloud Drive sync-conflict copies are named "<base> 2.js",
|
|
82
|
+
// "<base> 3.js", … (a space + digits before the extension). They are untracked,
|
|
83
|
+
// stale duplicates that must NEVER enter the symbol skeleton: left in, they
|
|
84
|
+
// double-count a module's symbols and bump file/symbol totals, so a ship from an
|
|
85
|
+
// iCloud-synced checkout bakes phantom entries into the committed repo-map — and
|
|
86
|
+
// CI's `repo_map --check` (run on a clean checkout that has no such copies) then
|
|
87
|
+
// flags it STALE and fails the required `unit` gate. Skip them at the walk so the
|
|
88
|
+
// generator is deterministic regardless of the working tree's sync artifacts
|
|
89
|
+
// (task 1236; first hit on PR #165, the task 1233 ship).
|
|
90
|
+
const CONFLICT_COPY_RE = / \d+\.js$/;
|
|
91
|
+
const isConflictCopy = (name) => CONFLICT_COPY_RE.test(name);
|
|
92
|
+
|
|
93
|
+
// Choose the symbols to surface for one file: exported public surface (ranked by reference
|
|
94
|
+
// frequency); for an entry-point script with no exports, its declared fns/classes in source order.
|
|
95
|
+
function pickForFile(f) {
|
|
96
|
+
const exAll = f.symbols.filter((s) => s.exported);
|
|
97
|
+
const ex = exAll.filter((s) => !isNoise(s.name));
|
|
98
|
+
if (ex.length) {
|
|
99
|
+
const list = [...ex].sort((a, b) => b.refs - a.refs || a.name.localeCompare(b.name));
|
|
100
|
+
return { list: list.slice(0, PER_FILE), pool: exAll.length };
|
|
101
|
+
}
|
|
102
|
+
const decl = f.symbols.filter((s) => (s.kind === 'fn' || s.kind === 'class') && !isNoise(s.name));
|
|
103
|
+
return { list: decl.slice(0, PER_FILE), pool: decl.length };
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// ---- file walk -------------------------------------------------------------
|
|
107
|
+
|
|
108
|
+
function walk(absRoot, out) {
|
|
109
|
+
let st;
|
|
110
|
+
try { st = fs.statSync(absRoot); } catch { return; }
|
|
111
|
+
if (st.isFile()) {
|
|
112
|
+
const base = path.basename(absRoot);
|
|
113
|
+
if (absRoot.endsWith('.js') && !isConflictCopy(base)) out.push(absRoot);
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
if (!st.isDirectory()) return;
|
|
117
|
+
for (const ent of fs.readdirSync(absRoot, { withFileTypes: true })) {
|
|
118
|
+
if (ent.isDirectory()) {
|
|
119
|
+
if (EXCLUDE_DIR.has(ent.name)) continue;
|
|
120
|
+
walk(path.join(absRoot, ent.name), out);
|
|
121
|
+
} else if (ent.isFile() && ent.name.endsWith('.js') && !isConflictCopy(ent.name)) {
|
|
122
|
+
out.push(path.join(absRoot, ent.name));
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// repo-relative POSIX path for an abs file under EITHER root (core package or instance repo).
|
|
128
|
+
const relOf = (abs) => {
|
|
129
|
+
for (const base of [CORE_ROOT, INSTANCE_ROOT]) {
|
|
130
|
+
const r = path.relative(base, abs);
|
|
131
|
+
if (r && !r.startsWith('..') && !path.isAbsolute(r)) return r.split(path.sep).join('/');
|
|
132
|
+
}
|
|
133
|
+
return path.relative(CORE_ROOT, abs).split(path.sep).join('/');
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
function collectFiles() {
|
|
137
|
+
const files = [];
|
|
138
|
+
for (const root of CORE_SCAN_ROOTS) walk(path.join(CORE_ROOT, root), files);
|
|
139
|
+
for (const root of INSTANCE_SCAN_ROOTS) walk(path.join(INSTANCE_ROOT, root), files);
|
|
140
|
+
for (const r of MODULE_ROOTS) walk(path.join(r, MODULE_SCAN_ROOT), files); // modules ship from both roots
|
|
141
|
+
// stable, de-duped BY repo-relative path (a shared checkout would otherwise list a module twice)
|
|
142
|
+
const seen = new Set();
|
|
143
|
+
const uniq = [];
|
|
144
|
+
for (const abs of [...new Set(files)].sort()) {
|
|
145
|
+
const r = relOf(abs);
|
|
146
|
+
if (seen.has(r)) continue;
|
|
147
|
+
seen.add(r);
|
|
148
|
+
uniq.push(abs);
|
|
149
|
+
}
|
|
150
|
+
return uniq;
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// ---- symbol extraction (col-0 declarations + exports) ----------------------
|
|
154
|
+
|
|
155
|
+
const RE_FUNC = /^(?:async\s+)?function\s+([A-Za-z_$][\w$]*)\s*\(([^)]*)\)?/;
|
|
156
|
+
const RE_CLASS = /^class\s+([A-Za-z_$][\w$]*)/;
|
|
157
|
+
// const NAME = (a,b) => | function(a,b) | async (a,b) => | require(...) | value | {…}
|
|
158
|
+
const RE_DECL = /^(?:const|let|var)\s+([A-Za-z_$][\w$]*)\s*=\s*(.*)$/;
|
|
159
|
+
|
|
160
|
+
function rhsKindAndSig(rhs) {
|
|
161
|
+
let m;
|
|
162
|
+
if ((m = rhs.match(/^async\s+function\s*\(([^)]*)\)?/)) || (m = rhs.match(/^function\s*\(([^)]*)\)?/))) {
|
|
163
|
+
return { kind: 'fn', sig: m[1] };
|
|
164
|
+
}
|
|
165
|
+
if ((m = rhs.match(/^async\s*\(([^)]*)\)?\s*=>/)) || (m = rhs.match(/^\(([^)]*)\)?\s*=>/))) {
|
|
166
|
+
return { kind: 'fn', sig: m[1] };
|
|
167
|
+
}
|
|
168
|
+
if ((m = rhs.match(/^async\s+([A-Za-z_$][\w$]*)\s*=>/)) || (m = rhs.match(/^([A-Za-z_$][\w$]*)\s*=>/))) {
|
|
169
|
+
return { kind: 'fn', sig: m[1] };
|
|
170
|
+
}
|
|
171
|
+
if (/^require\(/.test(rhs)) return { kind: 'import', sig: '' };
|
|
172
|
+
if (/^\{/.test(rhs)) return { kind: 'obj', sig: '' };
|
|
173
|
+
if (/^(?:new\s+)?[A-Za-z_$][\w$.]*\s*\(/.test(rhs)) return { kind: 'val', sig: '' };
|
|
174
|
+
return { kind: 'const', sig: '' };
|
|
175
|
+
}
|
|
176
|
+
|
|
177
|
+
function parseExports(src) {
|
|
178
|
+
const exported = new Set();
|
|
179
|
+
let m;
|
|
180
|
+
// module.exports.NAME = / exports.NAME =
|
|
181
|
+
const reDot = /(?:module\.)?exports\.([A-Za-z_$][\w$]*)\s*=/g;
|
|
182
|
+
while ((m = reDot.exec(src))) exported.add(m[1]);
|
|
183
|
+
// module.exports = { a, b: x, c } (also handles multi-line object)
|
|
184
|
+
const reObj = /module\.exports\s*=\s*\{([\s\S]*?)\}/g;
|
|
185
|
+
while ((m = reObj.exec(src))) {
|
|
186
|
+
for (const part of m[1].split(',')) {
|
|
187
|
+
const key = part.split(':')[0].trim().replace(/^\.\.\./, '').trim();
|
|
188
|
+
if (/^[A-Za-z_$][\w$]*$/.test(key)) exported.add(key);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
// module.exports = NAME
|
|
192
|
+
const reSingle = /module\.exports\s*=\s*([A-Za-z_$][\w$]*)\s*;/g;
|
|
193
|
+
while ((m = reSingle.exec(src))) exported.add(m[1]);
|
|
194
|
+
return exported;
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
function extractFile(abs) {
|
|
198
|
+
const src = fs.readFileSync(abs, 'utf8');
|
|
199
|
+
const lines = src.split('\n');
|
|
200
|
+
const exported = parseExports(src);
|
|
201
|
+
const symbols = [];
|
|
202
|
+
for (const raw of lines) {
|
|
203
|
+
// col-0 declarations only — commented-out / nested code is indented or comment-led
|
|
204
|
+
if (/^[\s/*]/.test(raw)) continue;
|
|
205
|
+
let m;
|
|
206
|
+
if ((m = raw.match(RE_FUNC))) {
|
|
207
|
+
symbols.push({ name: m[1], kind: 'fn', sig: (m[2] || '').trim() });
|
|
208
|
+
} else if ((m = raw.match(RE_CLASS))) {
|
|
209
|
+
symbols.push({ name: m[1], kind: 'class', sig: '' });
|
|
210
|
+
} else if ((m = raw.match(RE_DECL))) {
|
|
211
|
+
const { kind, sig } = rhsKindAndSig(m[2].trim());
|
|
212
|
+
if (kind === 'import') continue; // requires aren't navigation symbols
|
|
213
|
+
symbols.push({ name: m[1], kind, sig: (sig || '').trim() });
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// de-dupe by name (keep first), tag exported
|
|
217
|
+
const seen = new Set();
|
|
218
|
+
const uniq = [];
|
|
219
|
+
for (const s of symbols) {
|
|
220
|
+
if (seen.has(s.name)) continue;
|
|
221
|
+
seen.add(s.name);
|
|
222
|
+
uniq.push({ ...s, exported: exported.has(s.name) });
|
|
223
|
+
}
|
|
224
|
+
return uniq;
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
// ---- reference frequency (token tally across the whole corpus) -------------
|
|
228
|
+
|
|
229
|
+
function buildRefCounts(files) {
|
|
230
|
+
const counts = new Map();
|
|
231
|
+
const reId = /[A-Za-z_$][\w$]*/g;
|
|
232
|
+
for (const abs of files) {
|
|
233
|
+
const src = fs.readFileSync(abs, 'utf8');
|
|
234
|
+
let m;
|
|
235
|
+
while ((m = reId.exec(src))) {
|
|
236
|
+
const id = m[0];
|
|
237
|
+
counts.set(id, (counts.get(id) || 0) + 1);
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
return counts;
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
// ---- model -----------------------------------------------------------------
|
|
244
|
+
|
|
245
|
+
function buildModel() {
|
|
246
|
+
const files = collectFiles();
|
|
247
|
+
const refs = buildRefCounts(files);
|
|
248
|
+
const byFile = []; // {rel, symbols:[{name,kind,sig,exported,refs}]}
|
|
249
|
+
const allSyms = [];
|
|
250
|
+
for (const abs of files) {
|
|
251
|
+
const rel = relOf(abs); // root-aware: a module file may live under the instance repo post-split
|
|
252
|
+
const syms = extractFile(abs).map((s) => ({ ...s, refs: refs.get(s.name) || 0, file: rel }));
|
|
253
|
+
byFile.push({ rel, symbols: syms });
|
|
254
|
+
allSyms.push(...syms);
|
|
255
|
+
}
|
|
256
|
+
return { files, byFile, allSyms };
|
|
257
|
+
}
|
|
258
|
+
|
|
259
|
+
function fmtSig(s) {
|
|
260
|
+
if (s.kind === 'fn') {
|
|
261
|
+
let sig = s.sig || '';
|
|
262
|
+
if (sig.length > SIG_MAX) sig = sig.slice(0, SIG_MAX) + '…';
|
|
263
|
+
return `${s.name}(${sig})`;
|
|
264
|
+
}
|
|
265
|
+
if (s.kind === 'class') return `class ${s.name}`;
|
|
266
|
+
return s.name;
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// ---- rendering: docs/repo-map.md -------------------------------------------
|
|
270
|
+
|
|
271
|
+
function renderRepoMap(model) {
|
|
272
|
+
const L = [];
|
|
273
|
+
L.push('# Repo map — generated symbol skeleton');
|
|
274
|
+
L.push('');
|
|
275
|
+
L.push('> **AUTO-GENERATED — do not hand-edit.** Regenerate with `node scripts/gds/gen-repo-map.js` (runs on deploy, like `gen-diagrams.js`). Path B of the 2026-06-18 context-cliff plan — a portable-core altitude map ([ADR 0062](adr/0062-medusa-instance-model-decoupling.md) §9 · [ADR 0063](adr/0063-generated-repo-map-symbol-skeleton.md)). Complements the lexical recall layer ([ADR 0060](adr/0060-gds-retrieval-layer.md)), which indexes *prose*; this indexes *code*.');
|
|
276
|
+
L.push('>');
|
|
277
|
+
L.push(`> **Scope:** \`${SCAN_ROOTS.join('`, `')}\` — ${model.files.length} JS files, ${model.allSyms.length} top-level symbols. (Tests + \`node_modules\` + vendored libs excluded.) Symbols ranked by reference frequency across the scanned corpus.`);
|
|
278
|
+
L.push('');
|
|
279
|
+
|
|
280
|
+
// Global top-N: exported surface (cross-file reachable in CommonJS), minus generic noise.
|
|
281
|
+
const top = model.allSyms
|
|
282
|
+
.filter((s) => s.exported && !isNoise(s.name))
|
|
283
|
+
.sort((a, b) => b.refs - a.refs || a.name.localeCompare(b.name) || a.file.localeCompare(b.file))
|
|
284
|
+
.slice(0, TOP_GLOBAL);
|
|
285
|
+
L.push(`## Top ${TOP_GLOBAL} exported symbols by reference frequency`);
|
|
286
|
+
L.push('');
|
|
287
|
+
L.push('| symbol | kind | file | refs |');
|
|
288
|
+
L.push('|---|---|---|---|');
|
|
289
|
+
for (const s of top) L.push(`| \`${fmtSig(s)}\` | ${s.kind} | \`${s.file}\` | ${s.refs} |`);
|
|
290
|
+
L.push('');
|
|
291
|
+
|
|
292
|
+
// Per-directory exported signatures
|
|
293
|
+
L.push('## By directory — exported signatures');
|
|
294
|
+
L.push('');
|
|
295
|
+
const dirs = new Map();
|
|
296
|
+
for (const f of model.byFile) {
|
|
297
|
+
const dir = f.rel.includes('/') ? f.rel.slice(0, f.rel.lastIndexOf('/')) : '.';
|
|
298
|
+
if (!dirs.has(dir)) dirs.set(dir, []);
|
|
299
|
+
dirs.get(dir).push(f);
|
|
300
|
+
}
|
|
301
|
+
for (const dir of [...dirs.keys()].sort()) {
|
|
302
|
+
const fileEntries = dirs.get(dir).sort((a, b) => a.rel.localeCompare(b.rel));
|
|
303
|
+
const rendered = [];
|
|
304
|
+
for (const f of fileEntries) {
|
|
305
|
+
const { list, pool } = pickForFile(f);
|
|
306
|
+
if (!list.length) continue;
|
|
307
|
+
const base = f.rel.slice(f.rel.lastIndexOf('/') + 1);
|
|
308
|
+
const more = pool - list.length;
|
|
309
|
+
rendered.push(`- \`${base}\` — ${list.map((s) => '`' + fmtSig(s) + '`').join(', ')}${more > 0 ? ` _(+${more} more)_` : ''}`);
|
|
310
|
+
}
|
|
311
|
+
if (!rendered.length) continue;
|
|
312
|
+
L.push(`### \`${dir}/\``);
|
|
313
|
+
L.push('');
|
|
314
|
+
L.push(...rendered);
|
|
315
|
+
L.push('');
|
|
316
|
+
}
|
|
317
|
+
|
|
318
|
+
// task 2013 — the DOCUMENTATION map: a link-graph for the key navigational docs
|
|
319
|
+
// (bullet 193: "click architecture.md → see the docs it links to") + STALENESS
|
|
320
|
+
// FLAGS (docs whose internal links/anchors docs-entropy can't resolve). This is
|
|
321
|
+
// the anti-drift mechanism that replaces the manual "remember to update the
|
|
322
|
+
// detail files" session-end chores (bullets 223/224/226): the flag surfaces
|
|
323
|
+
// mechanically what needs a touch-up, so it isn't left to memory.
|
|
324
|
+
L.push(...renderDocMapLines());
|
|
325
|
+
|
|
326
|
+
return L.join('\n').replace(/\n+$/, '') + '\n';
|
|
327
|
+
}
|
|
328
|
+
|
|
329
|
+
// The curated set of top navigational docs whose outbound doc-links are worth
|
|
330
|
+
// graphing (the whole 399-file graph would be noise). An agent lands on one of
|
|
331
|
+
// these and can see, without opening it, which docs it points at.
|
|
332
|
+
const KEY_DOCS = [
|
|
333
|
+
'CLAUDE.md',
|
|
334
|
+
'docs/architecture.md',
|
|
335
|
+
'docs/project-context.md',
|
|
336
|
+
'docs/file-map.md',
|
|
337
|
+
'docs/branding-contract.md',
|
|
338
|
+
'docs/api-reference.md',
|
|
339
|
+
'docs/adr/README.md',
|
|
340
|
+
'docs/canonical-permissions.md',
|
|
341
|
+
];
|
|
342
|
+
|
|
343
|
+
// Resolve a markdown link href (relative to the doc it appears in) to a
|
|
344
|
+
// repo-relative .md path, or null if it isn't an internal .md target.
|
|
345
|
+
function resolveDocLink(fromRel, href) {
|
|
346
|
+
const noAnchor = String(href).split('#')[0];
|
|
347
|
+
if (!noAnchor || !/\.md$/i.test(noAnchor)) return null;
|
|
348
|
+
const fromDir = fromRel.includes('/') ? fromRel.slice(0, fromRel.lastIndexOf('/')) : '.';
|
|
349
|
+
const resolved = path.posix.normalize(path.posix.join(fromDir, noAnchor));
|
|
350
|
+
return resolved.startsWith('..') ? null : resolved;
|
|
351
|
+
}
|
|
352
|
+
|
|
353
|
+
function renderDocMapLines() {
|
|
354
|
+
const L = [];
|
|
355
|
+
let files;
|
|
356
|
+
try { files = docsEntropy.collectMarkdownFiles(); } catch { return L; }
|
|
357
|
+
const fileSet = new Set(files);
|
|
358
|
+
|
|
359
|
+
L.push('');
|
|
360
|
+
L.push('## Documentation map — link-graph + staleness (task 2013)');
|
|
361
|
+
L.push('');
|
|
362
|
+
L.push('> Generated from the same detectors as `docs-entropy.js`. The link-graph lets an agent see a key doc\'s outbound doc-links without opening it; the staleness flags surface docs whose internal links/anchors no longer resolve — the anti-drift signal that replaces the manual "remember to update the detail files" chore.');
|
|
363
|
+
L.push('');
|
|
364
|
+
|
|
365
|
+
// Link-graph for the curated key docs.
|
|
366
|
+
L.push('### Key-doc link-graph');
|
|
367
|
+
L.push('');
|
|
368
|
+
L.push('| doc | links to |');
|
|
369
|
+
L.push('|---|---|');
|
|
370
|
+
for (const doc of KEY_DOCS) {
|
|
371
|
+
if (!fileSet.has(doc)) continue;
|
|
372
|
+
let parsed;
|
|
373
|
+
try { parsed = docsEntropy.parseFile(path.join(INSTANCE_ROOT, doc)); } catch { parsed = null; }
|
|
374
|
+
if (!parsed) { try { parsed = docsEntropy.parseFile(path.join(CORE_ROOT, doc)); } catch { parsed = null; } }
|
|
375
|
+
const targets = new Set();
|
|
376
|
+
for (const lk of (parsed && parsed.links) || []) {
|
|
377
|
+
const t = resolveDocLink(doc, lk.href);
|
|
378
|
+
if (t && t !== doc && fileSet.has(t)) targets.add(t);
|
|
379
|
+
}
|
|
380
|
+
const list = [...targets].sort();
|
|
381
|
+
const shown = list.slice(0, 12).map((t) => `\`${t}\``).join(', ');
|
|
382
|
+
const more = list.length > 12 ? ` _(+${list.length - 12} more)_` : '';
|
|
383
|
+
L.push(`| \`${doc}\` | ${list.length ? shown + more : '—'} |`);
|
|
384
|
+
}
|
|
385
|
+
L.push('');
|
|
386
|
+
|
|
387
|
+
// Staleness flags: docs with unresolved internal links/anchors.
|
|
388
|
+
let findings = [];
|
|
389
|
+
try { findings = docsEntropy.scanStaleLinks(files) || []; } catch { findings = []; }
|
|
390
|
+
const byFile = new Map();
|
|
391
|
+
for (const f of findings) {
|
|
392
|
+
if (!byFile.has(f.file)) byFile.set(f.file, []);
|
|
393
|
+
byFile.get(f.file).push(f);
|
|
394
|
+
}
|
|
395
|
+
L.push('### Docs needing a touch-up (staleness flags)');
|
|
396
|
+
L.push('');
|
|
397
|
+
if (byFile.size === 0) {
|
|
398
|
+
L.push('_None — every tracked doc\'s internal links + anchors resolve._');
|
|
399
|
+
} else {
|
|
400
|
+
L.push(`${byFile.size} doc(s) carry an unresolved internal link or anchor (top 25 by count):`);
|
|
401
|
+
L.push('');
|
|
402
|
+
L.push('| doc | unresolved links |');
|
|
403
|
+
L.push('|---|---|');
|
|
404
|
+
const rows = [...byFile.entries()].sort((a, b) => b[1].length - a[1].length).slice(0, 25);
|
|
405
|
+
for (const [file, fs2] of rows) L.push(`| \`${file}\` | ${fs2.length} |`);
|
|
406
|
+
}
|
|
407
|
+
L.push('');
|
|
408
|
+
return L;
|
|
409
|
+
}
|
|
410
|
+
|
|
411
|
+
// ---- rendering: nested-doc generated block ---------------------------------
|
|
412
|
+
|
|
413
|
+
function renderNestedBlock(model, dir) {
|
|
414
|
+
const prefix = dir.endsWith('/') ? dir : dir + '/';
|
|
415
|
+
const here = model.byFile
|
|
416
|
+
.filter((f) => {
|
|
417
|
+
const d = f.rel.includes('/') ? f.rel.slice(0, f.rel.lastIndexOf('/')) : '.';
|
|
418
|
+
return d === dir; // non-recursive: files directly in this dir
|
|
419
|
+
})
|
|
420
|
+
.sort((a, b) => a.rel.localeCompare(b.rel));
|
|
421
|
+
const L = [];
|
|
422
|
+
L.push(BEGIN);
|
|
423
|
+
L.push(`**Symbol skeleton (generated from the code — do not hand-edit; refresh: \`node scripts/gds/gen-repo-map.js\`).** Exported signatures, most-referenced first. The interpretive notes above are hand-written; this factual list is regenerated on deploy so it can't drift ([ADR 0063](${path.relative(path.join(REPO_ROOT, dir), path.join(REPO_ROOT, 'docs/adr/0063-generated-repo-map-symbol-skeleton.md')).split(path.sep).join('/')})).`);
|
|
424
|
+
L.push('');
|
|
425
|
+
for (const f of here) {
|
|
426
|
+
const { list, pool } = pickForFile(f);
|
|
427
|
+
if (!list.length) continue;
|
|
428
|
+
const base = f.rel.slice(prefix.length);
|
|
429
|
+
const more = pool - list.length;
|
|
430
|
+
L.push(`- \`${base}\` — ${list.map((s) => '`' + fmtSig(s) + '`').join(', ')}${more > 0 ? ` _(+${more} more)_` : ''}`);
|
|
431
|
+
}
|
|
432
|
+
L.push(END);
|
|
433
|
+
return L.join('\n');
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
function injectBlock(existing, block) {
|
|
437
|
+
const b = existing.indexOf(BEGIN);
|
|
438
|
+
const e = existing.indexOf(END);
|
|
439
|
+
if (b !== -1 && e !== -1 && e > b) {
|
|
440
|
+
return existing.slice(0, b) + block + existing.slice(e + END.length);
|
|
441
|
+
}
|
|
442
|
+
// insert before "**See also.**" if present, else append
|
|
443
|
+
const anchor = existing.indexOf('**See also.**');
|
|
444
|
+
if (anchor !== -1) {
|
|
445
|
+
return existing.slice(0, anchor) + block + '\n\n' + existing.slice(anchor);
|
|
446
|
+
}
|
|
447
|
+
return existing.replace(/\n*$/, '') + '\n\n' + block + '\n';
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
// ---- main ------------------------------------------------------------------
|
|
451
|
+
|
|
452
|
+
function main() {
|
|
453
|
+
// Two artifact BUCKETS, gated separately since ADR 0110 (task 1926):
|
|
454
|
+
// • 'whole' — docs/repo-map.md, which is now GITIGNORED and regenerated at
|
|
455
|
+
// deploy / box-source-fetch (the gen-atlas.js model), so it carries no
|
|
456
|
+
// committed copy and two parallel branches can never collide on it.
|
|
457
|
+
// • 'block' — the generated symbol BLOCK inside each nested CLAUDE.md, which
|
|
458
|
+
// stays hand-written prose + a tracked block, so it MUST stay fresh in git.
|
|
459
|
+
// `--check` → both buckets (back-compat; a full local sanity check).
|
|
460
|
+
// `--check-block` → block bucket only (the HARD per-PR CI gate in fitness.js).
|
|
461
|
+
// `--check-whole` → whole-file bucket only (used by nothing hard; deploy owns it).
|
|
462
|
+
const checkAll = process.argv.includes('--check');
|
|
463
|
+
const checkWhole = process.argv.includes('--check-whole');
|
|
464
|
+
const checkBlock = process.argv.includes('--check-block');
|
|
465
|
+
const model = buildModel();
|
|
466
|
+
|
|
467
|
+
if (process.argv.includes('--json')) {
|
|
468
|
+
process.stdout.write(JSON.stringify(model, null, 2) + '\n');
|
|
469
|
+
return;
|
|
470
|
+
}
|
|
471
|
+
|
|
472
|
+
const writes = [];
|
|
473
|
+
// 1) docs/repo-map.md (whole-file; gitignored since ADR 0110 — a `write` here on a
|
|
474
|
+
// fresh checkout just means "absent, would be created", which is expected)
|
|
475
|
+
const mapPath = path.join(REPO_ROOT, 'docs', 'repo-map.md');
|
|
476
|
+
const mapNext = renderRepoMap(model);
|
|
477
|
+
const mapCur = fs.existsSync(mapPath) ? fs.readFileSync(mapPath, 'utf8') : '';
|
|
478
|
+
if (mapCur !== mapNext) writes.push({ full: mapPath, content: mapNext, rel: 'docs/repo-map.md', bucket: 'whole' });
|
|
479
|
+
|
|
480
|
+
// 2) nested CLAUDE.md generated blocks (tracked; the HARD-gated bucket)
|
|
481
|
+
for (const dir of NESTED_DIRS) {
|
|
482
|
+
const docPath = path.join(REPO_ROOT, dir, 'CLAUDE.md');
|
|
483
|
+
if (!fs.existsSync(docPath)) {
|
|
484
|
+
console.error(`gen-repo-map: WARN nested doc missing, skipping: ${dir}/CLAUDE.md`);
|
|
485
|
+
continue;
|
|
486
|
+
}
|
|
487
|
+
const cur = fs.readFileSync(docPath, 'utf8');
|
|
488
|
+
const next = injectBlock(cur, renderNestedBlock(model, dir));
|
|
489
|
+
if (cur !== next) writes.push({ full: docPath, content: next, rel: `${dir}/CLAUDE.md`, bucket: 'block' });
|
|
490
|
+
}
|
|
491
|
+
|
|
492
|
+
if (checkAll || checkWhole || checkBlock) {
|
|
493
|
+
const wantBlock = checkAll || checkBlock;
|
|
494
|
+
const wantWhole = checkAll || checkWhole;
|
|
495
|
+
const stale = writes.filter((w) => (w.bucket === 'block' && wantBlock) || (w.bucket === 'whole' && wantWhole));
|
|
496
|
+
if (stale.length) {
|
|
497
|
+
console.error(`gen-repo-map ${checkBlock ? '--check-block' : checkWhole ? '--check-whole' : '--check'}: STALE — would update ${stale.map((w) => w.rel).join(', ')}`);
|
|
498
|
+
console.error(' run: node scripts/gds/gen-repo-map.js (and commit any TRACKED files it changes)');
|
|
499
|
+
process.exit(2);
|
|
500
|
+
}
|
|
501
|
+
console.log(`gen-repo-map ${checkBlock ? '--check-block' : checkWhole ? '--check-whole' : '--check'}: up to date.`);
|
|
502
|
+
return;
|
|
503
|
+
}
|
|
504
|
+
|
|
505
|
+
if (!writes.length) {
|
|
506
|
+
console.log('gen-repo-map: repo map already current — no changes.');
|
|
507
|
+
return;
|
|
508
|
+
}
|
|
509
|
+
for (const w of writes) fs.writeFileSync(w.full, w.content);
|
|
510
|
+
console.log(`gen-repo-map: wrote ${writes.length} file(s): ${writes.map((w) => w.rel).join(', ')}`);
|
|
511
|
+
}
|
|
512
|
+
|
|
513
|
+
if (require.main === module) main();
|
|
514
|
+
|
|
515
|
+
// Exported so the git merge driver / ship self-heal (scripts/gds/git-merge-regen.js,
|
|
516
|
+
// task 1243) can regenerate a generated file's content from the MERGED working-tree
|
|
517
|
+
// code WITHOUT shelling out or re-parsing stdout. The require.main guard above keeps
|
|
518
|
+
// `require('./gen-repo-map')` side-effect-free (it no longer runs main()).
|
|
519
|
+
module.exports = { BEGIN, END, NESTED_DIRS, buildModel, renderRepoMap, renderNestedBlock, injectBlock };
|