@bongos/core 1.19.1073 → 1.19.1075
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 +404 -549
- package/.claude/skills/feedback/SKILL.md +2 -2
- package/bin/bongos.js +1 -3
- package/clients/bongos-client/README.md +1 -1
- package/clients/bongos-client/bongos-client.global.js +4 -60
- package/clients/bongos-client/index.cjs +4 -60
- package/clients/bongos-client/index.d.ts +5 -90
- package/clients/bongos-client/index.mjs +4 -60
- package/config/branding.neutral.json +1 -5
- package/config/modules.neutral.json +2 -3
- package/config/scheduled-routines.json +0 -2
- package/docs/adr/0145-free-hosted-project-tier-isolation-and-domain-separation.md +1 -0
- package/docs/adr/0285-a-shared-box-holds-about-twelve-projects-per-gb-and-memory-is-the-wall.md +1 -0
- package/docs/adr/0323-hosting-is-three-shapes-and-we-are-not-the-landlord.md +1 -1
- package/docs/adr/0327-a-cloud-host-runs-on-the-owners-account-and-the-key-is-borrowed.md +1 -1
- package/docs/adr/0341-the-page-is-the-unit-of-tweak-mode.md +2 -0
- package/docs/adr/0345-we-host-every-projects-hall-and-its-app-deploys-where-the-owner-chooses.md +94 -0
- package/docs/adr/README.md +1 -0
- package/docs/api/openapi.json +175 -1665
- package/docs/api-reference.md +9 -41
- package/docs/architecture.md +16 -1
- package/docs/branding-contract.md +0 -3
- package/docs/copy-inventory.md +454 -479
- package/docs/copy-registry.json +746 -978
- package/docs/file-map.md +5 -34
- package/docs/module-api-changelog.md +4 -0
- package/docs/modules-contract.md +13 -1
- package/docs/onboarding/diagrams/04-architecture.mmd +11 -22
- package/docs/onboarding/diagrams/README.md +3 -3
- package/docs/onboarding/diagrams/assertions.json +2 -22
- package/docs/onboarding/primer.md +9 -28
- package/docs/page-inventory.json +4 -1
- package/docs/page-readings.json +1032 -1077
- package/docs/recipes/render-pilot.md +29 -10
- package/migrations/core_257_module_store_registry.sql +87 -0
- package/migrations/core_258_drop_dev_box_tables.sql +55 -0
- package/modules/agents/module.json +1 -0
- package/modules/autonomy/module.json +1 -0
- package/modules/builder-settings/module.json +1 -0
- package/modules/builder-settings/render-prefs.js +4 -5
- package/modules/copy-desk/docx.js +78 -5
- package/modules/copy-desk/module.json +1 -0
- package/modules/copy-desk/routes/copy-desk.js +10 -10
- package/modules/copy-desk/tests/copy_docx.mjs +107 -1
- package/modules/copy-desk/tests/fixtures/word-docx.mjs +30 -0
- package/modules/discord/module.json +1 -0
- package/modules/discord/ship-broadcast.js +3 -3
- package/modules/economy/credits.js +2 -2
- package/modules/economy/module.json +1 -0
- package/modules/economy/routes/credits.js +1 -2
- package/modules/government/catalog.js +13 -17
- package/modules/government/migrations/government_019_retire_box_permissions.sql +33 -0
- package/modules/government/module.json +1 -0
- package/modules/government/protected-surfaces.json +3 -11
- package/modules/government/resolver.js +3 -46
- package/modules/government/routes/government.js +0 -2
- package/modules/government/session-scopes.js +43 -83
- package/modules/government/session-scopes.json +8 -18
- package/modules/grading/module.json +1 -0
- package/modules/hall-ui/module.json +1 -0
- package/modules/hall-ui/public/board-lib.js +2 -2
- package/modules/hall-ui/public/builders.js +29 -40
- package/modules/hall-ui/public/collab.html +1 -1
- package/modules/hall-ui/public/collab.js +1 -1
- package/modules/hall-ui/public/diagrams.html +3 -3
- package/modules/hall-ui/public/dom-utils.js +1 -1
- package/modules/hall-ui/public/gate.js +2 -2
- package/modules/hall-ui/public/gate.states.json +1 -1
- package/modules/hall-ui/public/hall-render.js +43 -79
- package/modules/hall-ui/public/index.html +5 -1
- package/modules/hall-ui/public/modules.js +1 -0
- package/modules/hall-ui/public/oversight.css +5 -5
- package/modules/hall-ui/public/palette.js +0 -11
- package/modules/hall-ui/public/primer.js +1 -1
- package/modules/hall-ui/public/sessions.html +1 -1
- package/modules/hall-ui/public/settings-sessions.js +1 -1
- package/modules/hall-ui/public/settings.css +0 -1
- package/modules/hall-ui/public/settings.html +4 -33
- package/modules/hall-ui/public/settings.js +3 -33
- package/modules/hall-ui/public/settings.states.json +2 -2
- package/modules/hall-ui/public/studio.html +1 -1
- package/modules/hall-ui/public/style.css +10 -13
- package/modules/hall-ui/public/task.html +4 -1
- package/modules/hall-ui/public/task.js +36 -1
- package/modules/hall-ui/public/tweak-editor-lib.js +18 -1
- package/modules/hall-ui/public/tweak-editor.css +16 -0
- package/modules/hall-ui/public/tweak-editor.html +26 -3
- package/modules/hall-ui/public/tweak-editor.js +32 -1
- package/modules/hall-ui/public/work.js +1 -1
- package/modules/hall-ui/records/tweak-editor.md +1 -0
- package/modules/ideas/module.json +1 -0
- package/modules/ideas/projection.js +1 -1
- package/modules/lifecycle/db-claim-reads.js +1 -58
- package/modules/lifecycle/db-ship.js +4 -9
- package/modules/lifecycle/db.js +0 -4
- package/modules/lifecycle/github-push.js +12 -14
- package/modules/lifecycle/kickoff-checklist.js +0 -4
- package/modules/lifecycle/lifecycle.js +0 -8
- package/modules/lifecycle/module.json +1 -0
- package/modules/lifecycle/publish-reconciler.js +10 -10
- package/modules/lifecycle/routes/tasks.js +13 -15
- package/modules/lifecycle/ship-card.js +1 -1
- package/modules/lifecycle/task-visuals.js +2 -2
- package/modules/memory/module.json +1 -0
- package/modules/memory/routes/memory.js +2 -2
- package/modules/npm-release/module.json +1 -0
- package/modules/onboarding/module.json +1 -0
- package/modules/onboarding/onboarding-state.js +17 -36
- package/modules/onboarding/routes/access-requests.js +3 -3
- package/modules/platform-identity/module.json +1 -0
- package/modules/platform-identity/platform-identity.js +13 -5
- package/modules/platform-identity/routes/sso.js +5 -4
- package/modules/platform-identity/tests/platform-identity.mjs +17 -3
- package/modules/provisioning/capacity.js +1 -1
- package/modules/provisioning/module.json +1 -0
- package/modules/provisioning/provisioning.js +6 -5
- package/modules/provisioning/routes/provisioning.js +4 -4
- package/modules/provisioning/starter-bundles.js +5 -25
- package/modules/public-landing/module.json +1 -0
- package/modules/public-landing/public/assets/cosmos.css +1 -1
- package/modules/public-landing/public/contact.html +1 -1
- package/modules/public-landing/public/privacy.html +1 -1
- package/modules/public-landing/public/projects.html +101 -32
- package/modules/public-landing/public/projects.probes.json +2 -2
- package/modules/public-landing/public/projects.states.json +4 -3
- package/modules/public-landing/public/terms.html +1 -1
- package/modules/security/module.json +1 -0
- package/modules/sessions/db.js +1 -1
- package/modules/sessions/module.json +1 -0
- package/modules/specialities/module.json +1 -0
- package/modules/status-ui/module.json +1 -0
- package/modules/ui-design/module.json +1 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/release-notes.json +84 -0
- package/scripts/gds/artifact-format.js +203 -0
- package/scripts/gds/artifact-staleness.js +2 -2
- package/scripts/gds/audit-authorship.sh +1 -13
- package/scripts/gds/backfill-task-rewards.js +5 -5
- package/scripts/gds/claim.js +0 -15
- package/scripts/gds/claude-materialize.js +2 -2
- package/scripts/gds/cli-lib.js +15 -15
- package/scripts/gds/codemod-rename-src-gds.js +1 -1
- package/scripts/gds/context-pack.js +5 -7
- package/scripts/gds/diagram-facts.js +12 -23
- package/scripts/gds/do-api.js +13 -80
- package/scripts/gds/doc-cli-guard.js +2 -0
- package/scripts/gds/doctor.js +4 -4
- package/scripts/gds/feedback-latest.js +139 -9
- package/scripts/gds/fitness-checks-identity.js +2 -7
- package/scripts/gds/fitness-checks-packaging.js +4 -4
- package/scripts/gds/fitness-checks-write-validation.js +4 -0
- package/scripts/gds/fitness-ratchets.js +5 -5
- package/scripts/gds/fitness.js +10 -10
- package/scripts/gds/gen-api-client.js +4 -4
- package/scripts/gds/gen-api-docs.js +1 -1
- package/scripts/gds/gen-diagrams.js +49 -71
- package/scripts/gds/gen-repo-map.js +13 -14
- package/scripts/gds/gen-session-index.js +8 -8
- package/scripts/gds/http-api-client.js +12 -19
- package/scripts/gds/init.js +1 -1
- package/scripts/gds/leak-scan-allowlist.js +1 -1
- package/scripts/gds/lint-infra-exec.js +1 -1
- package/scripts/gds/local-preview-lib.js +8 -39
- package/scripts/gds/local-preview.js +2 -15
- package/scripts/gds/migration-namespace.js +3 -3
- package/scripts/gds/module-artifact.js +212 -0
- package/scripts/gds/module.js +95 -6
- package/scripts/gds/package-core.js +5 -116
- package/scripts/gds/plain-cards.js +1 -1
- package/scripts/gds/provision-config.js +2 -2
- package/scripts/gds/provision-net.js +2 -3
- package/scripts/gds/provision.js +9 -9
- package/scripts/gds/publish-manifest.js +1 -2
- package/scripts/gds/push-path-brief.js +10 -10
- package/scripts/gds/regen-instance-docs.js +1 -1
- package/scripts/gds/rename-history-check.js +1 -1
- package/scripts/gds/run-unit-tests.js +2 -16
- package/scripts/gds/sandbox-stage.js +39 -341
- package/scripts/gds/session-digest-build.js +2 -2
- package/scripts/gds/ship-deploy-target.js +13 -13
- package/scripts/gds/ship-flow.js +7 -7
- package/scripts/gds/ship-land.js +9 -10
- package/scripts/gds/ship-merge.js +4 -4
- package/scripts/gds/ship-preflight-steps.js +4 -4
- package/scripts/gds/ship-regen.js +15 -49
- package/scripts/gds/ship.js +13 -33
- package/scripts/gds/skill-preflight.js +9 -8
- package/scripts/gds/start.js +0 -15
- package/scripts/hall-preview/README.md +5 -5
- package/scripts/hall-preview/server.js +6 -6
- package/scripts/render-diagrams.sh +1 -1
- package/src/bongos/api-errors.js +1 -1
- package/src/bongos/api-prefix.js +4 -4
- package/src/bongos/auth-github.js +2 -3
- package/src/bongos/auth.js +51 -126
- package/src/bongos/db-kernel.js +2 -3
- package/src/bongos/db.js +5 -28
- package/src/bongos/module-scope-map.js +14 -29
- package/src/bongos/module-store.js +141 -0
- package/src/bongos/platform-visibility-gate.js +1 -1
- package/src/bongos/route-rank-check.js +3 -16
- package/src/bongos/routes/auth.js +0 -116
- package/src/bongos/routes/builders.js +5 -15
- package/src/bongos/routes/instance.js +8 -14
- package/src/bongos/routes/me.js +7 -23
- package/src/bongos/routes/modules.js +83 -0
- package/src/bongos/routes/security.js +3 -3
- package/src/bongos/routes.js +7 -2
- package/src/bongos/serve-internal.js +5 -6
- package/src/bongos-downloads.js +1 -6
- package/src/branding.js +2 -2
- package/src/build-info.js +4 -6
- package/src/instance-config.js +2 -2
- package/src/module-api.js +13 -6
- package/src/module-loader/catalog.js +3 -0
- package/src/module-loader/loader.js +4 -4
- package/src/module-loader/manifest-schema.js +16 -8
- package/src/module-seams.js +2 -3
- package/src/modules.js +42 -14
- package/tests/agents_spend_guard.mjs +1 -1
- package/tests/api_alias_caller_ratchet.mjs +1 -1
- package/tests/api_alias_exceptions.mjs +1 -1
- package/tests/api_client.mjs +1 -16
- package/tests/api_path_404.mjs +1 -1
- package/tests/auth_page_gate.mjs +10 -10
- package/tests/backfill_task_rewards.mjs +1 -1
- package/tests/canonical_profile_url.mjs +1 -3
- package/tests/claim_action.mjs +4 -1
- package/tests/claim_from_task_and_home.mjs +127 -0
- package/tests/{box_ship_permissions.mjs → cli_allowlist_permissions.mjs} +5 -5
- package/tests/cli_sessions.mjs +1 -1
- package/tests/consumer_layout_boot.mjs +2 -0
- package/tests/context_pack.mjs +13 -13
- package/tests/copy_desk_page_docx.mjs +33 -2
- package/tests/copy_inventory.mjs +7 -7
- package/tests/core_upgrade_runner.mjs +6 -6
- package/tests/credit_grant.mjs +2 -2
- package/tests/criterion_suggest.mjs +1 -1
- package/tests/deploy_divergence_line.mjs +11 -11
- package/tests/design_tokens_sync.mjs +3 -2
- package/tests/diagram_facts_offset.mjs +1 -1
- package/tests/do_api.mjs +106 -0
- package/tests/feedback_latest.mjs +122 -0
- package/tests/fitness.mjs +44 -42
- package/tests/fitness_ratchets.mjs +2 -2
- package/tests/gate_approvals.mjs +0 -1
- package/tests/github_push_land_proof.mjs +1 -1
- package/tests/go_live.mjs +3 -3
- package/tests/goal_advisory.mjs +3 -3
- package/tests/goal_suggest.mjs +3 -3
- package/tests/government_abuse_matrix.mjs +21 -19
- package/tests/government_ownership_scope.mjs +33 -35
- package/tests/government_parity.mjs +2 -2
- package/tests/government_protected_surfaces.mjs +56 -37
- package/tests/government_require_permission.mjs +3 -3
- package/tests/government_seed.mjs +37 -4
- package/tests/government_session_scope.mjs +92 -366
- package/tests/hall_audit.mjs +1 -1
- package/tests/hall_error_envelope.mjs +4 -0
- package/tests/hall_landing_boot.mjs +4 -1
- package/tests/hall_palette.mjs +1 -16
- package/tests/hall_record_world.mjs +6 -0
- package/tests/hall_tweak_editor.mjs +52 -1
- package/tests/helpers.mjs +1 -1
- package/tests/host_topology_skips.mjs +3 -4
- package/tests/html_comment_nesting.mjs +137 -0
- package/tests/infra_exec_paths.mjs +9 -10
- package/tests/init.mjs +4 -5
- package/tests/instance_manifest.mjs +18 -25
- package/tests/kickoff_checklist.mjs +1 -1
- package/tests/lib_sh_resolution.mjs +0 -221
- package/tests/local_preview.mjs +0 -12
- package/tests/migration_namespace.mjs +6 -6
- package/tests/module-scope-map.mjs +9 -9
- package/tests/module_api.mjs +2 -2
- package/tests/module_catalog.mjs +1 -1
- package/tests/module_cli.mjs +20 -20
- package/tests/module_contributions.mjs +6 -6
- package/tests/module_loader.mjs +6 -6
- package/tests/module_manifest.mjs +26 -17
- package/tests/module_route_rank.mjs +2 -2
- package/tests/module_store_publish.mjs +307 -0
- package/tests/module_store_publish_route.mjs +121 -0
- package/tests/module_store_registry_migration.mjs +70 -0
- package/tests/modules.mjs +56 -26
- package/tests/modules_route_wiring.mjs +1 -1
- package/tests/onboarding_route_signals.mjs +21 -31
- package/tests/onboarding_state.mjs +35 -49
- package/tests/paste_token_session_store.mjs +1 -1
- package/tests/permission_path.mjs +0 -3
- package/tests/platform_boot.mjs +1 -2
- package/tests/platform_visibility_gate.mjs +1 -1
- package/tests/profile_route.mjs +1 -6
- package/tests/project_modules_ui.mjs +17 -17
- package/tests/projects_hub.mjs +5 -5
- package/tests/projects_hub_app_step.mjs +138 -0
- package/tests/projects_hub_module_picker.mjs +77 -76
- package/tests/projects_hub_pre_uat.mjs +4 -5
- package/tests/provision.mjs +7 -7
- package/tests/provisioning_capacity.mjs +1 -1
- package/tests/provisioning_recommendations.mjs +2 -1
- package/tests/provisioning_starter_bundles.mjs +0 -22
- package/tests/publish_branch_route.mjs +11 -19
- package/tests/publish_manifest.mjs +2 -3
- package/tests/publish_reconciler.mjs +8 -8
- package/tests/push_path_brief.mjs +10 -9
- package/tests/rank_tier_single_source.mjs +1 -13
- package/tests/regrade_eligibility.mjs +1 -1
- package/tests/rename_history_restraint.mjs +1 -1
- package/tests/repo_map.mjs +12 -13
- package/tests/runner_drift.mjs +3 -21
- package/tests/sandbox_stage.mjs +57 -390
- package/tests/seam_wiring_guard.mjs +11 -11
- package/tests/search_isolation.mjs +3 -3
- package/tests/session_records.mjs +1 -1
- package/tests/session_rename_fallback.mjs +1 -22
- package/tests/session_start_freshness.mjs +3 -3
- package/tests/session_token_hash_db.mjs +1 -1
- package/tests/ship_card.mjs +1 -1
- package/tests/ship_ci_deploy.mjs +17 -17
- package/tests/ship_error_shape.mjs +1 -1
- package/tests/ship_premerge.mjs +1 -1
- package/tests/ship_resume.mjs +1 -1
- package/tests/skill_preflight.mjs +2 -2
- package/tests/skip_is_not_pass.mjs +1 -1
- package/tests/task_visual_slots.mjs +31 -0
- package/tests/terms_acceptance.mjs +2 -2
- package/tests/upgrade.mjs +4 -4
- package/tests/watch_sealed_floor.mjs +0 -1
- package/tests/wizard_draft_resume.mjs +2 -2
- package/tests/wizard_intent_resume.mjs +21 -10
- package/tests/wizard_preselect_why.mjs +18 -18
- package/docs/onboarding/browser-terminal-guide.md +0 -73
- package/docs/recipes/managed-settings-remote-control.md +0 -416
- package/modules/dev-box/CLAUDE.md +0 -15
- package/modules/dev-box/box-access.js +0 -623
- package/modules/dev-box/box-credential.js +0 -94
- package/modules/dev-box/box-onboard.js +0 -486
- package/modules/dev-box/boxes.js +0 -1038
- package/modules/dev-box/db.js +0 -39
- package/modules/dev-box/module.json +0 -19
- package/modules/dev-box/routes/box.js +0 -1223
- package/scripts/gds/box-auth-check.js +0 -160
- package/scripts/gds/box-infra.js +0 -321
- package/scripts/gds/box-sync.js +0 -216
- package/scripts/gds/box.js +0 -1332
- package/scripts/gds/cf-tunnel.js +0 -558
- package/scripts/gds/smoke-box.sh +0 -150
- package/scripts/gds/tree-preflight.js +0 -241
- package/src/bongos/app-pair.js +0 -172
- package/tests/app_pair.mjs +0 -168
- package/tests/box_access.mjs +0 -578
- package/tests/box_auth_check.mjs +0 -114
- package/tests/box_code_staleness.mjs +0 -129
- package/tests/box_connect_e2e.mjs +0 -196
- package/tests/box_cost.mjs +0 -70
- package/tests/box_credential.mjs +0 -125
- package/tests/box_dns_repoint.mjs +0 -153
- package/tests/box_env.mjs +0 -64
- package/tests/box_host_keys.mjs +0 -126
- package/tests/box_infra_resolve.mjs +0 -246
- package/tests/box_onboard.mjs +0 -317
- package/tests/box_scope_session.mjs +0 -119
- package/tests/box_sweep_docs.mjs +0 -119
- package/tests/box_sync.mjs +0 -55
- package/tests/box_sync_scope_report.mjs +0 -126
- package/tests/box_task_scope.mjs +0 -169
- package/tests/box_task_scope_pause.mjs +0 -66
- package/tests/box_terminal_ssrf.mjs +0 -96
- package/tests/boxes.mjs +0 -1585
- package/tests/cf_ruleset_preflight.mjs +0 -142
- package/tests/cf_tunnel.mjs +0 -496
- package/tests/docs_scrubber_damage.mjs +0 -111
- package/tests/module_scope_active_claims.mjs +0 -94
- package/tests/ship_api_client_pathspec.mjs +0 -100
- package/tests/tree_preflight.mjs +0 -243
|
@@ -57,8 +57,7 @@ const PUBLISH = [
|
|
|
57
57
|
'modules/lifecycle/db.js',
|
|
58
58
|
'modules/grading/grader.js',
|
|
59
59
|
'modules/hall-ui/public/work.js',
|
|
60
|
-
'modules/
|
|
61
|
-
'modules/provisioning/provisioning.js', // instance-hosting control plane — CORE like its sibling dev-box (task 2135)
|
|
60
|
+
'modules/provisioning/provisioning.js', // instance-hosting control plane — CORE (task 2135)
|
|
62
61
|
// served-at-runtime surfaces a standalone must carry (task 2078) — their absence
|
|
63
62
|
// from the packaged core 404'd the hall UI + /docs on demo.cloudbongos.com
|
|
64
63
|
'clients/bongos-client/bongos-client.global.js', // /lib/bongos-client.js (window.BongosClient)
|
|
@@ -116,7 +115,7 @@ const EXCLUDE = [
|
|
|
116
115
|
// instance identity + history
|
|
117
116
|
'config/branding.json',
|
|
118
117
|
'config/modules.json',
|
|
119
|
-
'config/
|
|
118
|
+
'config/hierarchy.json',
|
|
120
119
|
'CODEOWNERS',
|
|
121
120
|
'docs/project-context.md',
|
|
122
121
|
'docs/lore/founding-myth.md',
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
// Unit tests for the server-owned publish reconciler (task 1134) — the durable
|
|
4
4
|
// cure for the "strands at confirmed" class. A server-mediated publish (ADR 0055)
|
|
5
5
|
// is async; ship.js stops polling after ~9 min, so the confirmed→shipped flip had
|
|
6
|
-
// no driver once the
|
|
6
|
+
// no driver once the client exited. This module sweeps confirmed tasks on a timer and
|
|
7
7
|
// runs the EXACT shipTask + postShipBroadcast the publish-status route runs.
|
|
8
8
|
//
|
|
9
9
|
// runSweep is pure w.r.t. injected deps (db / githubPush / emit / loggers)
|
|
@@ -1366,7 +1366,7 @@ test('1002606 the aged stale strand now ALSO emits task.strand-flagged', async (
|
|
|
1366
1366
|
|
|
1367
1367
|
// ---------------------------------------------------------------------------
|
|
1368
1368
|
// task 1002645 — the reconciler was blind to laptop/wave ships. The sweep derives
|
|
1369
|
-
// claude/<worktree_name>
|
|
1369
|
+
// claude/<worktree_name> first; a wave ship pushes
|
|
1370
1370
|
// worktree-<worktree_name>, so getPublishStatus saw pr_state:'none' and the whole
|
|
1371
1371
|
// PR path (mergeIfGreen nudge — the ONLY merger where native auto-merge is
|
|
1372
1372
|
// repo-disallowed — conflict heal, land proof) never engaged. PRs 34/35/36 all
|
|
@@ -1378,7 +1378,7 @@ test('1002645 THE PIN: a worktree-named branch (laptop wave ship) lands UNATTEND
|
|
|
1378
1378
|
const deps = mkDeps({
|
|
1379
1379
|
rows: [{ task_id: 2645, builder_id: 95, worktree_name: 'task-2645', published_head_sha: ON_MAIN }],
|
|
1380
1380
|
statusByBranch: {
|
|
1381
|
-
'claude/task-2645': NONE, // the derived
|
|
1381
|
+
'claude/task-2645': NONE, // the derived claude/ branch has no PR
|
|
1382
1382
|
'worktree-task-2645': LANDED_NO_WORKFLOW, // the REAL branch: merged, pin-bump repo
|
|
1383
1383
|
},
|
|
1384
1384
|
taskPrByTask: { 2645: { branch: 'worktree-task-2645', pr_number: 36, pr_state: 'closed', merged: true } },
|
|
@@ -1418,14 +1418,14 @@ test('1002645 a legacy laptop strand (no recorded tip) heals retroactively via t
|
|
|
1418
1418
|
assert.deepEqual(deps._calls.ship, [{ taskId: 2616, builderId: 95 }]);
|
|
1419
1419
|
});
|
|
1420
1420
|
|
|
1421
|
-
test('1002645 the fallback does NOT fire when the derived branch already has a PR (
|
|
1421
|
+
test('1002645 the fallback does NOT fire when the derived branch already has a PR (derived-branch path unchanged)', async () => {
|
|
1422
1422
|
const deps = mkDeps({
|
|
1423
|
-
rows: [{ task_id: 900, builder_id: 1, worktree_name: 'wt-
|
|
1424
|
-
statusByBranch: { 'claude/wt-
|
|
1423
|
+
rows: [{ task_id: 900, builder_id: 1, worktree_name: 'wt-derived' }],
|
|
1424
|
+
statusByBranch: { 'claude/wt-derived': PENDING },
|
|
1425
1425
|
taskPrByTask: { 900: new Error('search must not run') },
|
|
1426
1426
|
});
|
|
1427
1427
|
await reconciler.runSweep(deps);
|
|
1428
|
-
assert.equal(deps._calls.search.length, 0, 'a
|
|
1428
|
+
assert.equal(deps._calls.search.length, 0, 'a ship whose derived branch has a PR keeps that path — no extra API call');
|
|
1429
1429
|
});
|
|
1430
1430
|
|
|
1431
1431
|
test('1002645 a PR-search failure is swallowed — the sweep continues to the next task and retries next sweep', async () => {
|
|
@@ -1481,7 +1481,7 @@ test('1002723 THE PIN: a PR on the BARE worktree branch (task-<id>, no prefix) l
|
|
|
1481
1481
|
});
|
|
1482
1482
|
const r = await reconciler.runSweep(deps);
|
|
1483
1483
|
assert.equal(r.reconciled, 1, 'the merged-PR-on-bare-branch shape must land with no manual flip');
|
|
1484
|
-
assert.ok(deps._calls.status.includes('claude/task-77'), '
|
|
1484
|
+
assert.ok(deps._calls.status.includes('claude/task-77'), 'the derived claude/<worktree_name> branch is tried first');
|
|
1485
1485
|
assert.ok(deps._calls.status.includes('task-77'), 'then the bare worktree branch');
|
|
1486
1486
|
assert.deepEqual(deps._calls.ship, [{ taskId: 77, builderId: 3 }]);
|
|
1487
1487
|
});
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
// tests/push_path_brief.mjs
|
|
2
2
|
//
|
|
3
|
-
// Task 1003259 / idea 1000838 —
|
|
4
|
-
// failing, asked the owner to mint a PAT and store it on the
|
|
5
|
-
// the SessionStart line that states the credential model
|
|
6
|
-
// gets made again. These tests pin BOTH halves: the line
|
|
7
|
-
// path with the load-bearing phrases intact, and it is SILENT
|
|
8
|
-
// silence is half the design (a line firing on every healthy laptop
|
|
3
|
+
// Task 1003259 / idea 1000838 — an agent on a checkout with no GitHub push credential, unable
|
|
4
|
+
// to see WHY its git probes were failing, asked the owner to mint a PAT and store it on the
|
|
5
|
+
// machine. push-path-brief.js is the SessionStart line that states the credential model
|
|
6
|
+
// natively so that request never gets made again. These tests pin BOTH halves: the line
|
|
7
|
+
// fires on the server-publish path with the load-bearing phrases intact, and it is SILENT
|
|
8
|
+
// everywhere else — the silence is half the design (a line firing on every healthy laptop
|
|
9
|
+
// becomes wallpaper).
|
|
9
10
|
//
|
|
10
11
|
// DB-free + network-free: briefLine is pure, and the CLI cases force the path with
|
|
11
12
|
// OTB_PUSH_VIA_SERVER so pushVia() never spawns gh. Run: node tests/push_path_brief.mjs
|
|
@@ -31,14 +32,14 @@ t('server path gets the brief, with every load-bearing phrase', () => {
|
|
|
31
32
|
const l = brief.briefLine('server');
|
|
32
33
|
assert.ok(typeof l === 'string' && l.length > 0, 'expected a line on the server path');
|
|
33
34
|
// Each phrase is one of the three facts the 2026-08-24 incident showed an agent
|
|
34
|
-
// cannot infer from inside a
|
|
35
|
+
// cannot infer from inside such a checkout. Losing any of them re-opens the gap.
|
|
35
36
|
for (const must of [
|
|
36
37
|
'NO GitHub push credential',
|
|
37
38
|
'BY DESIGN',
|
|
38
39
|
'/builder-ship',
|
|
39
40
|
'NEVER ask the owner for a PAT',
|
|
40
41
|
'publish-status',
|
|
41
|
-
// task 1003988: a
|
|
42
|
+
// task 1003988: a session that cannot see which test failed re-pushes blind.
|
|
42
43
|
'merge_driver.failing_tests',
|
|
43
44
|
'checks_unreadable',
|
|
44
45
|
]) {
|
|
@@ -58,7 +59,7 @@ t('undetermined path stays silent (fail-open, exact vocabulary only)', () => {
|
|
|
58
59
|
});
|
|
59
60
|
|
|
60
61
|
t('the line is the exported static constant — nothing is interpolated', () => {
|
|
61
|
-
// Trust boundary: this string is injected into every
|
|
62
|
+
// Trust boundary: this string is injected into every server-publish session's context. Pinning
|
|
62
63
|
// it to the constant proves no builder-authored text can ever ride along.
|
|
63
64
|
assert.equal(brief.briefLine('server'), brief.BRIEF);
|
|
64
65
|
});
|
|
@@ -12,8 +12,7 @@
|
|
|
12
12
|
// modules/discord/discord-channels.js): dependency-free substrate
|
|
13
13
|
// (permission-path-check runs in a bare git hook), source-parsed literals
|
|
14
14
|
// (src/bongos/db.js — gate-review.js + diagram-facts.js regex its text),
|
|
15
|
-
// standalone CLIs (sequence),
|
|
16
|
-
// module template (boxes.js), zero-dep catalog + its text-parsing auditor
|
|
15
|
+
// standalone CLIs (sequence), zero-dep catalog + its text-parsing auditor
|
|
17
16
|
// (route-rank-check), and the hall browser statics.
|
|
18
17
|
// 3. NO NEW parallel map can land: a repo scan flags any rank→number map or
|
|
19
18
|
// rank-ladder array literal outside the allowlist below, both directions —
|
|
@@ -38,7 +37,6 @@ const lifecycleDb = require(path.join(ROOT, 'modules', 'lifecycle', 'db.js'));
|
|
|
38
37
|
const ppc = require(path.join(ROOT, 'src', 'bongos', 'permission-path-check.js'));
|
|
39
38
|
const rrc = require(path.join(ROOT, 'src', 'bongos', 'route-rank-check.js'));
|
|
40
39
|
const sequence = require(path.join(ROOT, 'scripts', 'gds', 'sequence.js'));
|
|
41
|
-
const boxes = require(path.join(ROOT, 'modules', 'dev-box', 'boxes.js'));
|
|
42
40
|
const catalog = require(path.join(ROOT, 'modules', 'government', 'catalog.js'));
|
|
43
41
|
|
|
44
42
|
const LADDER = kernel.LIVE_RANK_LADDER;
|
|
@@ -81,15 +79,6 @@ test('1-based local copies match: permission-path-check, sequence CLI', () => {
|
|
|
81
79
|
assert.deepEqual(sequence.RANK_TIER, TIER, 'sequence.js CLI copy drifted');
|
|
82
80
|
});
|
|
83
81
|
|
|
84
|
-
test('0-based local copies match: dev-box boxes.js', () => {
|
|
85
|
-
for (const [name, map] of [['boxes', boxes.RANK_ORDER]]) {
|
|
86
|
-
assert.deepEqual(Object.keys(map).sort(), [...RANK_KEYS].sort(), `${name} keys drifted`);
|
|
87
|
-
for (const r of RANK_KEYS) {
|
|
88
|
-
assert.equal(map[r], TIER[r] - 1, `${name}.RANK_ORDER.${r} must be tier-1 (0-based)`);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
});
|
|
92
|
-
|
|
93
82
|
test('ladder mirrors match: governance catalog, route-rank-check', () => {
|
|
94
83
|
assert.deepEqual([...catalog.RANK_ORDER], [...LADDER]);
|
|
95
84
|
assert.deepEqual([...rrc.PERMISSION_RANK_ORDER], [...LADDER]);
|
|
@@ -192,7 +181,6 @@ const MAP_ALLOWLIST = new Set([
|
|
|
192
181
|
'src/bongos/db.js',
|
|
193
182
|
'src/bongos/permission-path-check.js',
|
|
194
183
|
'scripts/gds/sequence.js',
|
|
195
|
-
'modules/dev-box/boxes.js',
|
|
196
184
|
'modules/hall-ui/public/builders.js',
|
|
197
185
|
// task 1003206 carved the hall page scripts up. builders.js KEPT its map (the
|
|
198
186
|
// renderers read it through the injected ctx), while goals-page.js's travelled
|
|
@@ -202,7 +202,7 @@ test('buildGradePayload confidence defaults to null when signals omit it', () =>
|
|
|
202
202
|
//
|
|
203
203
|
// The 'confirmed' answer hardcoded "run /merge-mode", which lands by pushing main
|
|
204
204
|
// via push-main.js (SEC #863 / ADR 0043) and needs an authenticated gh plus a main
|
|
205
|
-
// checkout. A server-mediated builder (pushVia()==='server' —
|
|
205
|
+
// checkout. A server-mediated builder (pushVia()==='server' — a checkout with no GitHub push credential) has
|
|
206
206
|
// neither, so the advice was unreachable by construction. It cost a real builder
|
|
207
207
|
// 163 minutes on 2026-08-21. strandNextStep already had the right wording for both
|
|
208
208
|
// modes; these pin that the two modes now diverge and that neither regresses.
|
|
@@ -123,7 +123,7 @@ test('the alias mount passes while present and FAILS when dropped', () => {
|
|
|
123
123
|
assert.equal(check.checkAliasMounts({ mounts: ['/api/bongos/v1', '/api/bongos', '/api/gds'], required }).ok, true);
|
|
124
124
|
|
|
125
125
|
const r = check.checkAliasMounts({ mounts: ['/api/bongos/v1', '/api/bongos'], required });
|
|
126
|
-
assert.equal(r.ok, false, 'shipped
|
|
126
|
+
assert.equal(r.ok, false, 'shipped binaries and live instances call the alias and cannot be force-updated');
|
|
127
127
|
assert.deepEqual(r.missing, ['/api/gds']);
|
|
128
128
|
});
|
|
129
129
|
|
package/tests/repo_map.mjs
CHANGED
|
@@ -87,22 +87,21 @@ test('extractor parses functions, classes, arrow consts, and module.exports', ()
|
|
|
87
87
|
// exercise the pure extractor against the real auth.js + a known class file
|
|
88
88
|
const r = run(['--json']);
|
|
89
89
|
const model = JSON.parse(r.stdout);
|
|
90
|
-
//
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
assert.ok(cfTunnel && cfTunnel.kind === 'class', 'class declarations are detected');
|
|
90
|
+
// DoApi is a plain `class X extends Y` declaration in a control-plane client.
|
|
91
|
+
const doApi = model.allSyms.find((s) => s.name === 'DoApi' && s.file === 'scripts/gds/do-api.js');
|
|
92
|
+
assert.ok(doApi && doApi.kind === 'class', 'class declarations are detected');
|
|
94
93
|
const apiCall = model.allSyms.find((s) => s.name === 'apiCall' && s.file === 'scripts/gds/cli-lib.js');
|
|
95
94
|
assert.ok(apiCall && apiCall.exported && apiCall.kind === 'fn', 'exported arrow/fn const detected with export flag');
|
|
96
95
|
});
|
|
97
96
|
|
|
98
|
-
test('--whole-only never writes a TRACKED nested block (the sparse-
|
|
99
|
-
// A
|
|
100
|
-
//
|
|
101
|
-
//
|
|
102
|
-
//
|
|
103
|
-
//
|
|
104
|
-
//
|
|
105
|
-
//
|
|
97
|
+
test('--whole-only never writes a TRACKED nested block (the sparse-checkout deadlock guard, task 1002962)', () => {
|
|
98
|
+
// A SPARSE checkout holds only part of the module tree. The block ordering is
|
|
99
|
+
// `b.refs - a.refs || name` and `refs` counts references across the VISIBLE
|
|
100
|
+
// corpus, so a checkout with 7 of 20 modules emits a legitimately different block.
|
|
101
|
+
// A fetch script used to write it, dirtying tracked files, and the NEXT `git pull`
|
|
102
|
+
// aborted on "local changes would be overwritten" — a silent permanent sync
|
|
103
|
+
// deadlock (one checkout sat 257 commits behind for three days). A sparse checkout
|
|
104
|
+
// CONSUMES these blocks; only a full checkout may write them.
|
|
106
105
|
//
|
|
107
106
|
// Asserted on CONTENT, not on the log line: dirty a tracked block, run --whole-only,
|
|
108
107
|
// and require the block to come back byte-identical. A regression that re-enabled the
|
|
@@ -117,7 +116,7 @@ test('--whole-only never writes a TRACKED nested block (the sparse-box deadlock
|
|
|
117
116
|
assert.equal(
|
|
118
117
|
readFileSync(tracked, 'utf8'),
|
|
119
118
|
drifted,
|
|
120
|
-
'--whole-only rewrote a tracked nested block — this is the deadlock that stranded a
|
|
119
|
+
'--whole-only rewrote a tracked nested block — this is the deadlock that stranded a checkout 257 commits behind',
|
|
121
120
|
);
|
|
122
121
|
assert.ok(!r.stdout.includes('CLAUDE.md'), `--whole-only must not report a nested-doc write; got: ${r.stdout.trim()}`);
|
|
123
122
|
} finally {
|
package/tests/runner_drift.mjs
CHANGED
|
@@ -77,9 +77,9 @@ t('assessRunnerUnit: a drop-in that ADDS an ExecStart without clearing leaves th
|
|
|
77
77
|
t('runnerScriptPath: node + a relative script resolves against WorkingDirectory; a wrapper resolves to null', () => {
|
|
78
78
|
assert.equal(runnerScriptPath({ workingDirectory: INSTANCE, execStart: '/usr/bin/node node_modules/@bongos/core/scripts/gds/provision.js run-intents --apply' }),
|
|
79
79
|
`${INSTANCE}/node_modules/@bongos/core/scripts/gds/provision.js`);
|
|
80
|
-
assert.equal(runnerScriptPath({ workingDirectory: '/w', execStart: '/usr/bin/env node /abs/core/scripts/gds/
|
|
81
|
-
assert.equal(runnerScriptPath({ workingDirectory: '/w', execStart: '-/usr/bin/node scripts/gds/
|
|
82
|
-
assert.equal(runnerScriptPath({ workingDirectory: '/w', execStart: '/usr/bin/env NODE_ENV=production node --max-old-space-size=512 scripts/gds/
|
|
80
|
+
assert.equal(runnerScriptPath({ workingDirectory: '/w', execStart: '/usr/bin/env node /abs/core/scripts/gds/provision.js run-intents' }), '/abs/core/scripts/gds/provision.js');
|
|
81
|
+
assert.equal(runnerScriptPath({ workingDirectory: '/w', execStart: '-/usr/bin/node scripts/gds/provision.js' }), '/w/scripts/gds/provision.js', 'systemd exec prefixes are stripped');
|
|
82
|
+
assert.equal(runnerScriptPath({ workingDirectory: '/w', execStart: '/usr/bin/env NODE_ENV=production node --max-old-space-size=512 scripts/gds/provision.js' }), '/w/scripts/gds/provision.js', 'env assignments and node flags are skipped');
|
|
83
83
|
assert.equal(runnerScriptPath({ workingDirectory: '/w', execStart: '/usr/bin/env bash infra/core-node.sh scripts/gds/provision.js' }), null,
|
|
84
84
|
'a shell wrapper decides at runtime which core it loads — the gate must not guess');
|
|
85
85
|
});
|
|
@@ -130,24 +130,6 @@ t('runnerBanner: names the runner core + path, and flags a differing instance co
|
|
|
130
130
|
assert.equal(runnerBanner({ runnerVersion: null, runnerRoot: '/r', instanceVersion: null, instanceRoot: '/i' }), 'runner core ? from /r (no installed core at /i)');
|
|
131
131
|
});
|
|
132
132
|
|
|
133
|
-
// box.js run-intents is the other runner the incident class covers — it opens with the same line.
|
|
134
|
-
const { cmdRunIntents: boxRunIntents } = await import('../scripts/gds/box.js');
|
|
135
|
-
{
|
|
136
|
-
const lines = [];
|
|
137
|
-
const origLog = console.log;
|
|
138
|
-
const origRoot = process.env.BONGOS_INSTANCE_ROOT;
|
|
139
|
-
process.env.BONGOS_INSTANCE_ROOT = '/no/such/instance';
|
|
140
|
-
console.log = (l) => lines.push(String(l));
|
|
141
|
-
try { await boxRunIntents({ query: async () => ({ rows: [] }) }, {}, null, { apply: false }); }
|
|
142
|
-
finally {
|
|
143
|
-
console.log = origLog;
|
|
144
|
-
if (origRoot === undefined) delete process.env.BONGOS_INSTANCE_ROOT; else process.env.BONGOS_INSTANCE_ROOT = origRoot;
|
|
145
|
-
}
|
|
146
|
-
t('box.js run-intents opens with the runner core version line', () => {
|
|
147
|
-
assert.match(lines[0], /^runner core \d+\.\d+\.\d+ from .+ \(no installed core at \/no\/such\/instance\)$/);
|
|
148
|
-
});
|
|
149
|
-
}
|
|
150
|
-
|
|
151
133
|
const { runnerDriftRows } = await import('../scripts/gds/doctor.js');
|
|
152
134
|
|
|
153
135
|
t('doctor maps each verdict to a row: ok → ok, drift → FAIL with the fix, unresolved → warn', () => {
|