@bongos/core 1.21.175 → 1.21.176
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 +3551 -1516
- package/.claude/skills/ask-for-help/SKILL.md +4 -4
- package/.claude/skills/backlog-review/SKILL.md +1 -1
- package/.claude/skills/blocker-review/SKILL.md +2 -2
- package/.claude/skills/blocker-solve/SKILL.md +4 -4
- package/.claude/skills/bongos-feedback/SKILL.md +1 -1
- package/.claude/skills/bug-triage/SKILL.md +8 -8
- package/.claude/skills/builder-backup/SKILL.md +3 -3
- package/.claude/skills/builder-claim/SKILL.md +5 -5
- package/.claude/skills/builder-cost/SKILL.md +5 -5
- package/.claude/skills/builder-end/SKILL.md +6 -6
- package/.claude/skills/builder-exit/SKILL.md +2 -2
- package/.claude/skills/builder-key/SKILL.md +6 -6
- package/.claude/skills/builder-reauth/SKILL.md +4 -4
- package/.claude/skills/builder-redteam/SKILL.md +3 -3
- package/.claude/skills/builder-release/SKILL.md +3 -3
- package/.claude/skills/builder-sequence/SKILL.md +8 -8
- package/.claude/skills/builder-setup/SKILL.md +4 -4
- package/.claude/skills/builder-ship/SKILL.md +7 -7
- package/.claude/skills/builder-stage/SKILL.md +8 -8
- package/.claude/skills/builder-start/SKILL.md +4 -4
- package/.claude/skills/collab-review/SKILL.md +5 -5
- package/.claude/skills/design/SKILL.md +6 -4
- package/.claude/skills/design-sync/SKILL.md +3 -3
- package/.claude/skills/figma-design-sync/SKILL.md +4 -4
- package/.claude/skills/fix-task/SKILL.md +8 -8
- package/.claude/skills/goal-close/SKILL.md +9 -9
- package/.claude/skills/goal-create/SKILL.md +18 -18
- package/.claude/skills/grade-recover/SKILL.md +8 -8
- package/.claude/skills/grade-sweep/SKILL.md +15 -15
- package/.claude/skills/idea-triage/SKILL.md +15 -15
- package/.claude/skills/merge-mode/SKILL.md +14 -14
- package/.claude/skills/new-project/SKILL.md +5 -5
- package/.claude/skills/owner-review/SKILL.md +1 -1
- package/.claude/skills/planning-session/SKILL.md +14 -14
- package/.claude/skills/priority-session/SKILL.md +6 -6
- package/.claude/skills/read-session-export/SKILL.md +3 -3
- package/.claude/skills/recall/SKILL.md +7 -7
- package/.claude/skills/scan-before-install/SKILL.md +3 -3
- package/.claude/skills/session-handoff/SKILL.md +1 -1
- package/.claude/skills/ship-check/SKILL.md +3 -3
- package/.claude/skills/status/SKILL.md +3 -3
- package/.claude/skills/strand-fix/SKILL.md +6 -6
- package/.claude/skills/worktree-clean/SKILL.md +4 -4
- package/.gitattributes +12 -32
- package/GOVERNMENT.md +1 -1
- package/README.md +8 -8
- package/bin/bongos.js +23 -23
- package/clients/bongos-client/README.md +2 -2
- package/clients/bongos-client/bongos-client.global.js +22 -4
- package/clients/bongos-client/index.cjs +22 -4
- package/clients/bongos-client/index.d.ts +33 -4
- package/clients/bongos-client/index.mjs +21 -3
- package/config/branding.neutral.json +1 -1
- package/config/design-tokens.schema.json +1 -1
- package/config/modules.neutral.json +1 -3
- package/docs/adr/0029-status-page-outage-resilience.md +6 -6
- package/docs/adr/0227-a-task-network-map-is-refused-the-goal-graph-is-the-map.md +1 -1
- package/docs/adr/0294-cli-sessions-do-not-expire.md +1 -1
- package/docs/adr/0383-sessions-end-after-ten-idle-days.md +35 -0
- package/docs/adr/0384-the-raise-page-is-a-hub-module-builders-edit-in-place.md +31 -0
- package/docs/adr/README.md +2 -0
- package/docs/api/openapi.json +606 -44
- package/docs/api-reference.md +25 -12
- package/docs/architecture.md +8 -7
- package/docs/canonical-permissions.md +3 -3
- package/docs/copy-inventory.md +1370 -1411
- package/docs/copy-registry.json +2136 -2536
- package/docs/design/demonolith-plan.md +6 -6
- package/docs/design/modular-architecture/00-research-report.md +1 -1
- package/docs/design/project-startup-direction.md +2 -2
- package/docs/design/projects-hub-direction-v2.md +1 -1
- package/docs/design/reviews/hall-v2/README.md +2 -2
- package/docs/design/vanilla-hall-ui-redesign-scope.md +1 -1
- package/docs/file-map.md +89 -88
- package/docs/handoff-template.md +4 -4
- package/docs/module-api-changelog.md +5 -3
- package/docs/modules-contract.md +8 -7
- package/docs/onboarding/diagrams/01-task-lifecycle.mmd +1 -1
- package/docs/onboarding/diagrams/02-rank-ladder.mmd +1 -1
- package/docs/onboarding/diagrams/03-drachmae-karma.mmd +1 -1
- package/docs/onboarding/diagrams/04-architecture.mmd +1 -1
- package/docs/onboarding/diagrams/05-versioning.mmd +1 -1
- package/docs/onboarding/diagrams/README.md +2 -2
- package/docs/onboarding/diagrams/assertions.json +2 -2
- package/docs/onboarding/slash-commands.md +2 -2
- package/docs/packs/artist.md +4 -4
- package/docs/packs/engineer.md +11 -10
- package/docs/packs/ideator.md +7 -7
- package/docs/page-inventory.json +20 -1
- package/docs/page-readings.json +4387 -4603
- package/docs/recipes/README.md +1 -1
- package/docs/recipes/audit-replay.md +4 -4
- package/docs/recipes/autobongos-windows-host.md +6 -6
- package/docs/recipes/bongos-cli-release.md +2 -2
- package/docs/recipes/claude-design-loop.md +7 -7
- package/docs/recipes/core-release-pipeline.md +19 -19
- package/docs/recipes/failed-ship-recovery-proof.md +2 -2
- package/docs/recipes/figma-design-loop.md +6 -6
- package/docs/recipes/gds-db-backup.md +9 -9
- package/docs/recipes/instance-deploy.md +3 -3
- package/docs/recipes/instance-first-run.md +1 -1
- package/docs/recipes/multi-builder-merge.md +2 -2
- package/docs/recipes/ops-gotchas.md +10 -9
- package/docs/recipes/packaging-the-core.md +6 -6
- package/docs/recipes/parallel-goal-waves.md +4 -4
- package/docs/recipes/private-npm-distribution.md +9 -9
- package/docs/recipes/redteam-patrol.md +5 -5
- package/docs/recipes/render-pilot.md +2 -2
- package/docs/recipes/reranking-a-goals-board.md +2 -2
- package/docs/recipes/search-index-ingestion.md +5 -5
- package/docs/recipes/self-host.md +1 -1
- package/docs/recipes/ship-and-regrade.md +4 -4
- package/docs/recipes/staging-environment.md +1 -1
- package/docs/recipes/standalone-live-docs.md +1 -1
- package/docs/recipes/ui-look-before-you-ship.md +2 -2
- package/docs/recipes/upgrading-the-core.md +11 -11
- package/docs/recipes/windows-builders.md +18 -18
- package/docs/research/llm-model-agnostic-and-cheaper-grader.md +6 -6
- package/docs/research/task-network-map-readability.md +3 -3
- package/migrations/core_278_builder_tester_tag.sql +18 -0
- package/migrations/core_279_bongos_shipper_new_scripts_path.sql +13 -0
- package/modules/agents/lib/answer-hold.js +1 -1
- package/modules/agents/lib/gate.js +1 -1
- package/modules/agents/lib/validate.js +1 -1
- package/modules/autonomy/gauge.js +1 -1
- package/modules/autonomy/governor-docket.js +2 -2
- package/modules/autonomy/pollers/routine-timers.js +3 -3
- package/modules/autonomy/routes/autonomy.js +3 -3
- package/modules/builder-settings/interaction-prefs.js +1 -1
- package/modules/builder-settings/render-prefs.js +1 -1
- package/modules/builder-settings/routes/settings.js +1 -1
- package/modules/builder-settings/skill-prefs.js +2 -2
- package/modules/builder-settings/wandering-prefs.js +2 -2
- package/modules/copy-desk/module.json +2 -2
- package/modules/copy-desk/page-data.js +5 -5
- package/modules/copy-desk/page-decisions.js +13 -1
- package/modules/copy-desk/proposals.js +4 -4
- package/modules/copy-desk/registry.js +2 -2
- package/modules/copy-desk/routes/copy-desk-release.js +119 -0
- package/modules/copy-desk/routes/copy-desk.js +3 -12
- package/modules/copy-desk/skills/tweak/SKILL.md +12 -12
- package/modules/copy-desk/tests/copy_flags.mjs +1 -1
- package/modules/copy-desk/tests/copy_no_cms.mjs +7 -3
- package/modules/copy-desk/tests/copy_proposals.mjs +2 -2
- package/modules/copy-desk/tests/copy_queue.mjs +1 -1
- package/modules/design-styles/skills/README.md +4 -4
- package/modules/design-styles/skills/imagegen-frontend-mobile/SKILL.md +1 -1
- package/modules/design-styles/skills/imagegen-frontend-web/SKILL.md +1 -1
- package/modules/discord/bug-attachments.js +1 -1
- package/modules/discord/ship-broadcast.js +1 -1
- package/modules/economy/achievements.js +49 -7
- package/modules/economy/cost-classify.js +6 -6
- package/modules/economy/cost-report.js +1 -1
- package/modules/economy/cost.js +1 -1
- package/modules/economy/credits.js +2 -1
- package/modules/economy/idea-size.js +2 -2
- package/modules/economy/reward.js +2 -0
- package/modules/economy/routes/cost.js +1 -1
- package/modules/economy/streak.js +43 -4
- package/modules/government/asks.js +1 -1
- package/modules/government/board.js +19 -2
- package/modules/government/catalog.js +3 -0
- package/modules/government/migrations/government_033_idea_vote.sql +46 -0
- package/modules/government/protected-surfaces.json +48 -47
- package/modules/government/recommendations.js +6 -2
- package/modules/government/routes/government.js +1 -1
- package/modules/grading/generated-provenance.js +13 -5
- package/modules/grading/grade-engine.js +1 -1
- package/modules/grading/grader-rubric.json +1 -1
- package/modules/grading/grader-score.js +1 -1
- package/modules/grading/grader-workers/index.js +1 -1
- package/modules/grading/grader.js +1 -1
- package/modules/grading/routes/grade.js +1 -1
- package/modules/hall-ui/public/atlas.html +5 -7
- package/modules/hall-ui/public/atlas.js +1 -1
- package/modules/hall-ui/public/atlas.states.json +1 -1
- package/modules/hall-ui/public/blockers.css +9 -0
- package/modules/hall-ui/public/blockers.html +4 -4
- package/modules/hall-ui/public/blockers.js +29 -30
- package/modules/hall-ui/public/board-room.css +5 -17
- package/modules/hall-ui/public/board-room.html +5 -6
- package/modules/hall-ui/public/board-room.js +41 -23
- package/modules/hall-ui/public/board-room.states.json +1 -1
- package/modules/hall-ui/public/brand-apply.js +1 -1
- package/modules/hall-ui/public/brand-holes.js +1 -1
- package/modules/hall-ui/public/builders.js +40 -86
- package/modules/hall-ui/public/city-decide.js +18 -4
- package/modules/hall-ui/public/city.html +1 -1
- package/modules/hall-ui/public/collab.html +1 -1
- package/modules/hall-ui/public/commands.html +6 -9
- package/modules/hall-ui/public/copy-desk.html +1 -1
- package/modules/hall-ui/public/copy-desk.js +2 -2
- package/modules/hall-ui/public/craft-mode.js +4 -0
- package/modules/hall-ui/public/deploy.html +6 -2
- package/modules/hall-ui/public/deploy.js +21 -13
- package/modules/hall-ui/public/diagrams.css +1 -1
- package/modules/hall-ui/public/diagrams.html +5 -8
- package/modules/hall-ui/public/diagrams.states.json +1 -1
- package/modules/hall-ui/public/drachmae.html +3 -7
- package/modules/hall-ui/public/fleet.html +3 -2
- package/modules/hall-ui/public/fleet.js +0 -4
- package/modules/hall-ui/public/gate.html +7 -7
- package/modules/hall-ui/public/gate.js +58 -77
- package/modules/hall-ui/public/goal-map.html +1 -1
- package/modules/hall-ui/public/goals-page.js +5 -5
- package/modules/hall-ui/public/goals-render.js +10 -11
- package/modules/hall-ui/public/goals.css +10 -0
- package/modules/hall-ui/public/goals.html +14 -7
- package/modules/hall-ui/public/government.html +3 -5
- package/modules/hall-ui/public/government.js +1 -5
- package/modules/hall-ui/public/hall-render.js +117 -57
- package/modules/hall-ui/public/hall-widgets.js +11 -11
- package/modules/hall-ui/public/idea.html +1 -1
- package/modules/hall-ui/public/ideas.html +3 -1
- package/modules/hall-ui/public/ideas.js +1 -0
- package/modules/hall-ui/public/index.html +12 -6
- package/modules/hall-ui/public/index.states.json +1 -1
- package/modules/hall-ui/public/mine-lens.js +1 -1
- package/modules/hall-ui/public/modules.html +7 -10
- package/modules/hall-ui/public/modules.js +0 -2
- package/modules/hall-ui/public/my-agents.html +1 -1
- package/modules/hall-ui/public/palette.js +5 -5
- package/modules/hall-ui/public/primer.html +4 -9
- package/modules/hall-ui/public/profile-connections.js +10 -2
- package/modules/hall-ui/public/profile-roles.js +3 -10
- package/modules/hall-ui/public/profile.html +12 -10
- package/modules/hall-ui/public/profile.js +13 -17
- package/modules/hall-ui/public/project-settings.html +3 -4
- package/modules/hall-ui/public/project-settings.js +0 -3
- package/modules/hall-ui/public/ranks.html +5 -11
- package/modules/hall-ui/public/ranks.js +6 -8
- package/modules/hall-ui/public/roadmap.css +0 -2
- package/modules/hall-ui/public/roadmap.html +1 -1
- package/modules/hall-ui/public/roadmap.js +16 -51
- package/modules/hall-ui/public/roster.html +1 -1
- package/modules/hall-ui/public/sessions.html +6 -8
- package/modules/hall-ui/public/sessions.js +7 -7
- package/modules/hall-ui/public/settings.html +1 -1
- package/modules/hall-ui/public/shell-trail.js +1 -1
- package/modules/hall-ui/public/shell.js +17 -17
- package/modules/hall-ui/public/street-deck.css +2 -1
- package/modules/hall-ui/public/street-deck.js +10 -2
- package/modules/hall-ui/public/street-desk.js +16 -5
- package/modules/hall-ui/public/street.html +1 -1
- package/modules/hall-ui/public/studio-lib.js +4 -0
- package/modules/hall-ui/public/studio.css +2 -0
- package/modules/hall-ui/public/studio.html +1 -1
- package/modules/hall-ui/public/studio.js +27 -1
- package/modules/hall-ui/public/style.css +43 -26
- package/modules/hall-ui/public/task-detail.js +10 -7
- package/modules/hall-ui/public/task.css +2 -0
- package/modules/hall-ui/public/task.html +3 -1
- package/modules/hall-ui/public/task.js +23 -7
- package/modules/hall-ui/public/thinking.html +1 -1
- package/modules/hall-ui/public/tweak-editor.html +1 -1
- package/modules/hall-ui/public/vote-control.js +208 -0
- package/modules/hall-ui/public/watch.html +3 -5
- package/modules/hall-ui/public/watch.js +5 -4
- package/modules/hall-ui/public/welcome-boot.css +130 -0
- package/modules/hall-ui/public/welcome-boot.js +334 -0
- package/modules/hall-ui/public/welcome-day.webp +0 -0
- package/modules/hall-ui/public/welcome-night.webp +0 -0
- package/modules/hall-ui/public/work-summary.js +1 -1
- package/modules/hall-ui/public/work.css +1 -0
- package/modules/hall-ui/public/work.html +3 -1
- package/modules/hall-ui/public/work.js +2 -1
- package/modules/hall-ui/records/accomplishments.md +16 -0
- package/modules/hall-ui/records/hall-ask-card.md +9 -0
- package/modules/hall-ui/records/karma-vote-control.md +13 -0
- package/modules/hall-ui/records/oversight-family.md +1 -1
- package/modules/hall-ui/records/profile-connections.md +2 -0
- package/modules/hall-ui/records/profile-roles.md +1 -1
- package/modules/hall-ui/records/reading-rooms.md +1 -1
- package/modules/hall-ui/records/welcome-tower.md +50 -0
- package/modules/ideas/migrations/ideas_011_idea_votes.sql +31 -0
- package/modules/ideas/projection.js +1 -1
- package/modules/ideas/routes/blockers.js +3 -3
- package/modules/ideas/routes/inbox.js +29 -1
- package/modules/ideas/routes/ratify-goal.js +1 -1
- package/modules/ideas/routing.js +1 -1
- package/modules/ideas/templates.js +1 -1
- package/modules/ideas/trail-descent.js +1 -1
- package/modules/ideas/trail-size.js +1 -1
- package/modules/ideas/votes.js +93 -0
- package/modules/lifecycle/abandon-leftovers.js +1 -1
- package/modules/lifecycle/cascade.js +1 -1
- package/modules/lifecycle/conflict-resolve.js +13 -21
- package/modules/lifecycle/criterion-ref.js +1 -1
- package/modules/lifecycle/db-analytics.js +57 -4
- package/modules/lifecycle/db-deps-criteria.js +1 -1
- package/modules/lifecycle/db-ship.js +2 -2
- package/modules/lifecycle/db-tasks.js +2 -2
- package/modules/lifecycle/db-versions.js +1 -1
- package/modules/lifecycle/db.js +2 -0
- package/modules/lifecycle/dead-deps.js +3 -3
- package/modules/lifecycle/dependency-advisory.js +3 -3
- package/modules/lifecycle/goal-category.js +1 -1
- package/modules/lifecycle/goal-forest.js +1 -1
- package/modules/lifecycle/goal-task-relevance-advisory.js +1 -1
- package/modules/lifecycle/kickoff-checklist.js +1 -1
- package/modules/lifecycle/kickoff-seed.js +1 -1
- package/modules/lifecycle/lifecycle.js +2 -0
- package/modules/lifecycle/merge-reach.js +29 -15
- package/modules/lifecycle/missing-dep-classify.js +3 -3
- package/modules/lifecycle/module.json +2 -1
- package/modules/lifecycle/page-tweak-approve.js +85 -1
- package/modules/lifecycle/page-tweak-hold.js +1 -1
- package/modules/lifecycle/publish-reconciler.js +1 -2
- package/modules/lifecycle/rot.js +1 -1
- package/modules/lifecycle/routes/artist-gate.js +1 -1
- package/modules/lifecycle/routes/gate-approvals.js +22 -1
- package/modules/lifecycle/routes/goals.js +1 -1
- package/modules/lifecycle/routes/task-route-helpers.js +1 -1
- package/modules/lifecycle/routes/task-votes.js +54 -0
- package/modules/lifecycle/routes/task-write-routes.js +1 -1
- package/modules/lifecycle/routes/tasks.js +2 -2
- package/modules/lifecycle/routes/versions.js +2 -2
- package/modules/lifecycle/ship-card.js +4 -4
- package/modules/lifecycle/ship-preflight.js +1 -1
- package/modules/lifecycle/task-classifier.js +1 -1
- package/modules/lifecycle/task-status.js +1 -1
- package/modules/lifecycle/task-visual-db.js +1 -1
- package/modules/memory/learnings.js +1 -1
- package/modules/memory/pollers/search-index.js +2 -2
- package/modules/memory/routes/learnings.js +1 -1
- package/modules/memory/routes/memory.js +1 -1
- package/modules/memory/search.js +2 -2
- package/modules/npm-release/release.js +1 -1
- package/modules/onboarding/howto-moments.js +1 -1
- package/modules/onboarding/newcomer-restock.js +3 -3
- package/modules/onboarding/onboarding.js +1 -1
- package/modules/pixel-art/skills/otb-tile-generate/SKILL.md +1 -1
- package/modules/platform-identity/origin-containment.js +1 -1
- package/modules/platform-identity/publish-gate.js +1 -1
- package/modules/platform-identity/tests/platform-identity.mjs +1 -1
- package/modules/provisioning/capacity.js +1 -1
- package/modules/provisioning/core-upgrade.js +15 -9
- package/modules/provisioning/credential-preflight.js +3 -3
- package/modules/provisioning/disconnect.js +1 -1
- package/modules/provisioning/dns-resolves.js +1 -1
- package/modules/provisioning/module.json +1 -1
- package/modules/provisioning/onboard-plan.js +1 -1
- package/modules/provisioning/paid-shape-gate.js +2 -2
- package/modules/provisioning/planet-physics.js +11 -2
- package/modules/provisioning/pollers/liveness-sweep.js +1 -1
- package/modules/provisioning/pollers/runner-drift-notify.js +5 -5
- package/modules/provisioning/provisioning.js +2 -2
- package/modules/provisioning/render-lookup.js +1 -1
- package/modules/provisioning/render-standup.js +3 -3
- package/modules/provisioning/repo-private.js +1 -1
- package/modules/provisioning/routes/callback-page.js +1 -1
- package/modules/provisioning/routes/core-upgrade.js +23 -3
- package/modules/provisioning/routes/provisioning.js +2 -2
- package/modules/provisioning/routes/render-standup.js +1 -1
- package/modules/provisioning/routes/repo-private.js +1 -1
- package/modules/provisioning/soft-limits.js +1 -1
- package/modules/provisioning/starter-bundles.js +4 -2
- package/modules/provisioning/tests/provisioning.mjs +1 -1
- package/modules/public-landing/public/account.html +4 -6
- package/modules/public-landing/public/assets/cosmos.css +13 -6
- package/modules/public-landing/public/connections.html +4 -6
- package/modules/public-landing/public/contact.html +4 -6
- package/modules/public-landing/public/guild.html +4 -6
- package/modules/public-landing/public/index.html +11 -9
- package/modules/public-landing/public/invitations.html +4 -6
- package/modules/public-landing/public/privacy.html +4 -6
- package/modules/public-landing/public/projects.html +168 -46
- package/modules/public-landing/public/terms.html +4 -6
- package/modules/raise/content/copy.json +40 -0
- package/modules/raise/content/nda.html +39 -0
- package/modules/raise/content/settings.json +49 -0
- package/modules/raise/db.js +95 -0
- package/modules/raise/migrations/raise_001_tables.sql +71 -0
- package/modules/raise/module.json +28 -0
- package/modules/raise/page.js +194 -0
- package/modules/raise/public/edit.js +152 -0
- package/modules/raise/public/favicon.svg +1 -0
- package/modules/raise/public/logo-ink.svg +1 -0
- package/modules/raise/public/logo-night.svg +1 -0
- package/modules/raise/public/mode.js +8 -0
- package/modules/raise/public/raise.css +234 -0
- package/modules/raise/public/raise.js +91 -0
- package/modules/raise/raise.js +174 -0
- package/modules/raise/routes/raise.js +152 -0
- package/modules/raise/views/gate.html +39 -0
- package/modules/raise/views/nda.html +21 -0
- package/modules/raise/views/page.html +133 -0
- package/modules/raise/web.js +72 -0
- package/modules/render-deploy/deploys.js +1 -1
- package/modules/render-deploy/render.js +2 -2
- package/modules/security/secret-scrub.js +3 -3
- package/modules/security/security.js +1 -1
- package/modules/security/tests/artifact_scan.mjs +1 -1
- package/modules/security/tests/mirror.mjs +1 -1
- package/modules/security/tests/scan_store.mjs +1 -1
- package/modules/sessions/db.js +2 -2
- package/modules/sessions/pulse.js +2 -2
- package/modules/sessions/routes/sessions.js +1 -1
- package/modules/specialities/specialities.js +1 -1
- package/modules/status-ui/public/README.md +3 -4
- package/modules/status-ui/public/index.html +5 -31
- package/modules/status-ui/public/status.js +6 -174
- package/modules/status-ui/public/style.css +4 -133
- package/modules/ui-design/docs/design-contract.md +3 -3
- package/modules/ui-design/kit/README.md +1 -1
- package/modules/ui-design/kit/serve.js +13 -4
- package/modules/ui-design/scripts/design-sync.js +1 -1
- package/modules/ui-design/scripts/figma-design-sync.js +1 -1
- package/modules/ui-design/scripts/validate-design.js +1 -1
- package/package-lock.json +27 -11
- package/package.json +2 -3
- package/release-notes.json +172 -0
- package/scripts/bongos/CLAUDE.md +15 -0
- package/scripts/bongos/abandon.js +137 -0
- package/scripts/bongos/accessibility-replay.js +195 -0
- package/scripts/bongos/address-park-sweep.sh +91 -0
- package/scripts/bongos/adopt-detect.js +123 -0
- package/scripts/bongos/adopt-import.js +111 -0
- package/scripts/bongos/adopt-preflight.js +187 -0
- package/scripts/bongos/adr-namespace.js +273 -0
- package/scripts/bongos/agent-invoke.js +689 -0
- package/scripts/bongos/agents-sync.js +502 -0
- package/scripts/bongos/api-alias-caller-scan.js +256 -0
- package/scripts/bongos/api-artifacts.js +91 -0
- package/scripts/bongos/api.js +86 -0
- package/scripts/bongos/api.ps1 +26 -0
- package/scripts/bongos/architect-audit.js +294 -0
- package/scripts/bongos/artifact-audit.js +326 -0
- package/scripts/bongos/artifact-format.js +203 -0
- package/scripts/bongos/artifact-staleness.js +267 -0
- package/scripts/bongos/ask.js +231 -0
- package/scripts/bongos/audit-authorship.sh +329 -0
- package/scripts/bongos/audit-deps.js +189 -0
- package/scripts/bongos/audit-gate.js +121 -0
- package/scripts/bongos/audit-rank-roles.js +172 -0
- package/scripts/bongos/audit-replay.sh +205 -0
- package/scripts/bongos/autobongos-digest.js +123 -0
- package/scripts/bongos/autobongos-grade-cap.js +187 -0
- package/scripts/bongos/autobongos-loop.js +210 -0
- package/scripts/bongos/autobongos-run.js +1361 -0
- package/scripts/bongos/autobongos-service.cmd +50 -0
- package/scripts/bongos/autobongos-service.ps1 +270 -0
- package/scripts/bongos/autobongos-tweak-lane.js +262 -0
- package/scripts/bongos/autobongos-verify.js +618 -0
- package/scripts/bongos/autonomy-gate.js +135 -0
- package/scripts/bongos/autonomy-gauge-statusline.js +124 -0
- package/scripts/bongos/autonomy-gauge.js +84 -0
- package/scripts/bongos/backfill-cost.js +176 -0
- package/scripts/bongos/backfill-disciplines.js +144 -0
- package/scripts/bongos/backfill-session-earnings.js +123 -0
- package/scripts/bongos/backfill-session-types.js +87 -0
- package/scripts/bongos/backfill-sessions.js +411 -0
- package/scripts/bongos/backfill-subagent-rewards.js +485 -0
- package/scripts/bongos/backfill-task-rewards.js +413 -0
- package/scripts/bongos/backlog-review.js +399 -0
- package/scripts/bongos/backup-dropin-sweep.sh +95 -0
- package/scripts/bongos/backup.js +116 -0
- package/scripts/bongos/baseline-staleness.js +217 -0
- package/scripts/bongos/bfg-principal-token.js +65 -0
- package/scripts/bongos/bug-attachment-audit.js +149 -0
- package/scripts/bongos/bug-attachment-recover.js +198 -0
- package/scripts/bongos/bug-triage.js +292 -0
- package/scripts/bongos/build-bongos.js +94 -0
- package/scripts/bongos/bump-version.js +221 -0
- package/scripts/bongos/capture.js +481 -0
- package/scripts/bongos/category-advisory-guard.js +206 -0
- package/scripts/bongos/ci-grade.js +82 -0
- package/scripts/bongos/claim-recall.js +112 -0
- package/scripts/bongos/claim.js +789 -0
- package/scripts/bongos/classify-discipline.js +153 -0
- package/scripts/bongos/claude-materialize.js +1200 -0
- package/scripts/bongos/claude-md-template.js +142 -0
- package/scripts/bongos/cleanup-orphans.js +74 -0
- package/scripts/bongos/cli-lib.js +1226 -0
- package/scripts/bongos/client-baseurl-guard.js +116 -0
- package/scripts/bongos/codemod-rename-scripts-gds.js +381 -0
- package/scripts/bongos/codemod-rename-src-gds.js +145 -0
- package/scripts/bongos/conductor-dispatch.js +535 -0
- package/scripts/bongos/context-pack.js +326 -0
- package/scripts/bongos/control-manifest.js +199 -0
- package/scripts/bongos/copy-apply.js +758 -0
- package/scripts/bongos/copy-inventory.js +571 -0
- package/scripts/bongos/core-origin-follow.js +185 -0
- package/scripts/bongos/core-pin-sync.js +260 -0
- package/scripts/bongos/coreB-carve-proof.sh +725 -0
- package/scripts/bongos/cost-report.js +63 -0
- package/scripts/bongos/cost.js +47 -0
- package/scripts/bongos/credential-presence.js +296 -0
- package/scripts/bongos/cutover-codemod.js +240 -0
- package/scripts/bongos/db-backup-nightly.sh +232 -0
- package/scripts/bongos/db-backup-offsite.sh +267 -0
- package/scripts/bongos/demote.js +45 -0
- package/scripts/bongos/deploy-divergence.js +454 -0
- package/scripts/bongos/deploy-main-audit-gate.sh +97 -0
- package/scripts/bongos/design-sync.js +12 -0
- package/scripts/bongos/dev-box-guard.js +166 -0
- package/scripts/bongos/dev-lib.js +722 -0
- package/scripts/bongos/dev.js +645 -0
- package/scripts/bongos/device-flow-help.js +72 -0
- package/scripts/bongos/diagnose-achievements.js +118 -0
- package/scripts/bongos/diagram-facts.js +355 -0
- package/scripts/bongos/discord-channels.js +77 -0
- package/scripts/bongos/do-api.js +109 -0
- package/scripts/bongos/doc-cli-guard.js +274 -0
- package/scripts/bongos/doc-comment-coverage.js +139 -0
- package/scripts/bongos/doc-control-claims.js +170 -0
- package/scripts/bongos/docs-entropy.js +453 -0
- package/scripts/bongos/doctor.js +493 -0
- package/scripts/bongos/enroll-control-plane.js +101 -0
- package/scripts/bongos/exec-path-guard.js +564 -0
- package/scripts/bongos/feedback-send.js +249 -0
- package/scripts/bongos/fetch-art-key.js +106 -0
- package/scripts/bongos/fetch-sound-prefs.js +126 -0
- package/scripts/bongos/figma-design-sync.js +11 -0
- package/scripts/bongos/find-untested.js +371 -0
- package/scripts/bongos/fitness-checks-error-envelope.js +134 -0
- package/scripts/bongos/fitness-checks-identity.js +343 -0
- package/scripts/bongos/fitness-checks-packaging.js +132 -0
- package/scripts/bongos/fitness-checks-route-pins.js +76 -0
- package/scripts/bongos/fitness-checks-vocabulary.js +392 -0
- package/scripts/bongos/fitness-checks-write-validation.js +157 -0
- package/scripts/bongos/fitness-lib.js +127 -0
- package/scripts/bongos/fitness-migration-contraction.js +50 -0
- package/scripts/bongos/fitness-ratchets.js +594 -0
- package/scripts/bongos/fitness.js +1498 -0
- package/scripts/bongos/forwarder.js +80 -0
- package/scripts/bongos/gate-review.js +330 -0
- package/scripts/bongos/gating.js +348 -0
- package/scripts/{gds → bongos}/gds-db-backup.service +6 -6
- package/scripts/{gds → bongos}/gds-db-backup.timer +4 -4
- package/scripts/{gds → bongos}/gds-db-offsite.service +4 -4
- package/scripts/{gds → bongos}/gds-db-offsite.timer +4 -4
- package/scripts/bongos/gds-literal-scan.js +196 -0
- package/scripts/bongos/gen-api-client.js +576 -0
- package/scripts/bongos/gen-api-docs.js +1111 -0
- package/scripts/bongos/gen-atlas.js +366 -0
- package/scripts/bongos/gen-diagrams.js +608 -0
- package/scripts/bongos/gen-file-map.js +337 -0
- package/scripts/bongos/gen-freshness.js +32 -0
- package/scripts/bongos/gen-interaction-posture.js +122 -0
- package/scripts/bongos/gen-repo-map.js +540 -0
- package/scripts/bongos/gen-role-responsibilities.js +134 -0
- package/scripts/bongos/gen-session-index.js +243 -0
- package/scripts/bongos/gen-sounds.js +176 -0
- package/scripts/bongos/git-merge-regen.js +254 -0
- package/scripts/bongos/go-live.js +1071 -0
- package/scripts/bongos/goal-names.js +102 -0
- package/scripts/bongos/goal.js +272 -0
- package/scripts/bongos/government-walk.js +1477 -0
- package/scripts/bongos/grade-correlation-audit.js +310 -0
- package/scripts/bongos/grade-replay.js +237 -0
- package/scripts/bongos/grade-smoke.js +205 -0
- package/scripts/bongos/home-isolation-guard.js +126 -0
- package/scripts/bongos/hooks/pre-push.js +211 -0
- package/scripts/bongos/howto.js +145 -0
- package/scripts/bongos/http-api-client.js +81 -0
- package/scripts/bongos/identity-strip.js +75 -0
- package/scripts/bongos/init.js +1159 -0
- package/scripts/bongos/install-git-hooks.js +200 -0
- package/scripts/bongos/instance-apex.js +38 -0
- package/scripts/bongos/intent-retry.js +52 -0
- package/scripts/bongos/key-card.js +222 -0
- package/scripts/bongos/key-status.js +126 -0
- package/scripts/bongos/land-watch.js +201 -0
- package/scripts/bongos/leak-scan-allowlist.js +293 -0
- package/scripts/bongos/learning-capture.js +145 -0
- package/scripts/bongos/lib.sh +74 -0
- package/scripts/bongos/linkify-refs.js +655 -0
- package/scripts/bongos/lint-infra-exec.js +70 -0
- package/scripts/bongos/lint-migrations.js +102 -0
- package/scripts/bongos/lint-workflow-exec.js +63 -0
- package/scripts/bongos/local-preview-lib.js +128 -0
- package/scripts/bongos/local-preview.js +82 -0
- package/scripts/bongos/login.js +360 -0
- package/scripts/bongos/main-audit.js +625 -0
- package/scripts/bongos/me.js +97 -0
- package/scripts/bongos/memory-map.js +176 -0
- package/scripts/bongos/merge-lock.js +71 -0
- package/scripts/bongos/migration-namespace.js +313 -0
- package/scripts/bongos/mirror-lineage-check.js +343 -0
- package/scripts/bongos/mirror-redact.js +350 -0
- package/scripts/bongos/module-artifact.js +289 -0
- package/scripts/bongos/module-assess-docs.js +238 -0
- package/scripts/bongos/module-assess-installs.js +228 -0
- package/scripts/bongos/module-assess-score.js +111 -0
- package/scripts/bongos/module-assess-security.js +252 -0
- package/scripts/bongos/module-assess-tests.js +278 -0
- package/scripts/bongos/module-assess-version.js +92 -0
- package/scripts/bongos/module-error-report.js +148 -0
- package/scripts/{gds → bongos}/module-test-runner/README.md +3 -3
- package/scripts/{gds → bongos}/module-test-runner/module-tests.yml +2 -2
- package/scripts/bongos/module-test-runner.js +414 -0
- package/scripts/bongos/module.js +1376 -0
- package/scripts/bongos/move-escalation.js +141 -0
- package/scripts/{gds → bongos}/newcomer-floor.config.json +1 -1
- package/scripts/bongos/newcomer-floor.js +421 -0
- package/scripts/{gds → bongos}/newcomer-floor.templates.json +13 -13
- package/scripts/bongos/newcomer-floor.test.js +235 -0
- package/scripts/bongos/next-number.js +163 -0
- package/scripts/bongos/oauth-secret.js +202 -0
- package/scripts/bongos/onboard.js +267 -0
- package/scripts/bongos/onboarding-analyze.js +226 -0
- package/scripts/bongos/onboarding-config.js +179 -0
- package/scripts/bongos/onboarding-ship.js +92 -0
- package/scripts/bongos/pack-env-prefix.js +73 -0
- package/scripts/bongos/package-core.js +1200 -0
- package/scripts/bongos/page-inventory.js +348 -0
- package/scripts/bongos/page-reader.js +722 -0
- package/scripts/bongos/paste-token.js +212 -0
- package/scripts/bongos/plain-cards.js +351 -0
- package/scripts/bongos/portability-smoke-art.sh +85 -0
- package/scripts/bongos/portability-smoke-memory.sh +176 -0
- package/scripts/bongos/preflight.js +214 -0
- package/scripts/bongos/probe-cache.js +246 -0
- package/scripts/bongos/prove-strict-versioning.js +284 -0
- package/scripts/bongos/provision-auto-upgrade.js +162 -0
- package/scripts/bongos/provision-byo-host.js +68 -0
- package/scripts/bongos/provision-capacity.js +79 -0
- package/scripts/bongos/provision-caps.js +63 -0
- package/scripts/bongos/provision-config.js +233 -0
- package/scripts/bongos/provision-core-upgrade.js +1166 -0
- package/scripts/bongos/provision-disconnect.js +88 -0
- package/scripts/bongos/provision-github-setup.js +168 -0
- package/scripts/bongos/provision-net.js +357 -0
- package/scripts/bongos/provision-pin-key.js +176 -0
- package/scripts/bongos/provision-pin-replay.js +126 -0
- package/scripts/bongos/provision-process.js +170 -0
- package/scripts/bongos/provision-render.js +201 -0
- package/scripts/bongos/provision-repo-auth.js +164 -0
- package/scripts/bongos/provision-repo-private.js +98 -0
- package/scripts/bongos/provision-repo.js +1337 -0
- package/scripts/bongos/provision-teardown.js +106 -0
- package/scripts/bongos/provision-units.js +469 -0
- package/scripts/bongos/provision.js +1479 -0
- package/scripts/bongos/publish-credential-check.js +66 -0
- package/scripts/bongos/publish-integration-gate.js +142 -0
- package/scripts/bongos/publish-manifest.js +440 -0
- package/scripts/bongos/publish-watch.js +268 -0
- package/scripts/bongos/pulse.js +336 -0
- package/scripts/bongos/push-main.js +56 -0
- package/scripts/bongos/push-path-brief.js +100 -0
- package/scripts/bongos/read-session-export.js +359 -0
- package/scripts/bongos/reauth.js +155 -0
- package/scripts/bongos/recall.js +183 -0
- package/scripts/bongos/redteam-patrol.js +437 -0
- package/scripts/bongos/regen-instance-docs.js +47 -0
- package/scripts/bongos/release-core.js +80 -0
- package/scripts/bongos/release-notes.js +271 -0
- package/scripts/bongos/release.js +139 -0
- package/scripts/bongos/rename-goals.js +109 -0
- package/scripts/bongos/rename-history-check.js +369 -0
- package/scripts/bongos/rename-ledger-prose.js +482 -0
- package/scripts/bongos/render-api.js +197 -0
- package/scripts/bongos/render-check.js +206 -0
- package/scripts/bongos/render-ideas.js +226 -0
- package/scripts/bongos/render-payload.js +85 -0
- package/scripts/bongos/repo-metrics.js +363 -0
- package/scripts/bongos/review-sheet.js +108 -0
- package/scripts/bongos/role-pack-guard.js +142 -0
- package/scripts/bongos/route-shadow-guard.js +175 -0
- package/scripts/bongos/routine-schedule.js +283 -0
- package/scripts/bongos/run-routine.js +257 -0
- package/scripts/bongos/run-unit-tests.js +654 -0
- package/scripts/bongos/runner-drift.js +151 -0
- package/scripts/bongos/sandbox-stage.js +459 -0
- package/scripts/bongos/scope-map-guard.js +300 -0
- package/scripts/bongos/scope-roster-guard.js +118 -0
- package/scripts/bongos/seam-wiring-guard.js +275 -0
- package/scripts/bongos/search-ingest-db.js +288 -0
- package/scripts/bongos/search-ingest-md.js +269 -0
- package/scripts/bongos/seed-adopt-tasks.js +75 -0
- package/scripts/bongos/seed-api-contract-goal-tasks.js +141 -0
- package/scripts/bongos/seed-board-room-tasks.js +196 -0
- package/scripts/bongos/seed-bongos-app-tasks.js +294 -0
- package/scripts/bongos/seed-bongos-coreB-tranche1-tasks.js +81 -0
- package/scripts/bongos/seed-bongos-coreB-tranche2-tasks.js +100 -0
- package/scripts/bongos/seed-bongos-goal-hierarchy-tasks.js +307 -0
- package/scripts/bongos/seed-bongos-module-system-tasks.js +346 -0
- package/scripts/bongos/seed-bongos-tasks.js +214 -0
- package/scripts/bongos/seed-bongos-v1-idea-routing-tasks.js +152 -0
- package/scripts/bongos/seed-bongos-v1-seo-tasks.js +104 -0
- package/scripts/bongos/seed-bv1-community-tasks.js +131 -0
- package/scripts/bongos/seed-bv1-privacy-invites-tasks.js +133 -0
- package/scripts/bongos/seed-bv1-profile-page-tasks.js +161 -0
- package/scripts/bongos/seed-bv1-profiles-tasks.js +135 -0
- package/scripts/bongos/seed-bv1-r01-delta-tasks.js +154 -0
- package/scripts/bongos/seed-bv2-ideator-surface-tasks.js +390 -0
- package/scripts/bongos/seed-bv2-tweak-mode-tasks.js +277 -0
- package/scripts/bongos/seed-gds-v4-tasks.js +624 -0
- package/scripts/bongos/seed-governance-tasks.js +340 -0
- package/scripts/bongos/seed-medusa-tasks.js +440 -0
- package/scripts/bongos/seed-module-upstreaming.js +219 -0
- package/scripts/bongos/seed-productization-tasks.js +235 -0
- package/scripts/bongos/seed-project-admin-console-tasks.js +88 -0
- package/scripts/bongos/seed-provisioning-tasks.js +83 -0
- package/scripts/bongos/seed-staging.sh +117 -0
- package/scripts/bongos/seed-strict-versioning-tasks.js +275 -0
- package/scripts/bongos/seed-v2-world-tasks.js +283 -0
- package/scripts/bongos/seed-verify-criteria.js +124 -0
- package/scripts/bongos/sequence.js +597 -0
- package/scripts/bongos/session-cost.js +430 -0
- package/scripts/bongos/session-digest-build.js +293 -0
- package/scripts/bongos/session-digest.js +200 -0
- package/scripts/bongos/session-eval.js +631 -0
- package/scripts/bongos/session-transcript-build.js +155 -0
- package/scripts/bongos/session-transcript-upload.js +29 -0
- package/scripts/bongos/session.js +404 -0
- package/scripts/bongos/setup.js +646 -0
- package/scripts/bongos/ship-check.js +89 -0
- package/scripts/bongos/ship-deploy-target.js +393 -0
- package/scripts/bongos/ship-escalation.js +167 -0
- package/scripts/bongos/ship-finish.js +420 -0
- package/scripts/bongos/ship-flow.js +1217 -0
- package/scripts/bongos/ship-git.js +100 -0
- package/scripts/bongos/ship-grade-steps.js +547 -0
- package/scripts/bongos/ship-grade.js +426 -0
- package/scripts/bongos/ship-honesty.js +314 -0
- package/scripts/bongos/ship-io.js +139 -0
- package/scripts/bongos/ship-land.js +1130 -0
- package/scripts/bongos/ship-memory-sync.js +249 -0
- package/scripts/bongos/ship-merge-gate.js +225 -0
- package/scripts/bongos/ship-merge.js +466 -0
- package/scripts/bongos/ship-mode-ask.js +138 -0
- package/scripts/bongos/ship-mode-manual.js +54 -0
- package/scripts/bongos/ship-preflight-steps.js +399 -0
- package/scripts/bongos/ship-regen.js +292 -0
- package/scripts/bongos/ship-resume.js +201 -0
- package/scripts/bongos/ship-session-upload.js +313 -0
- package/scripts/bongos/ship-state.js +110 -0
- package/scripts/bongos/ship-surprise.js +84 -0
- package/scripts/bongos/ship-visual.js +75 -0
- package/scripts/bongos/ship.js +382 -0
- package/scripts/bongos/shipping-mode.js +71 -0
- package/scripts/bongos/skill-lint.js +250 -0
- package/scripts/bongos/skill-preflight.js +361 -0
- package/scripts/bongos/smoke-batch-claim.sh +238 -0
- package/scripts/bongos/smoke-batch-release.sh +316 -0
- package/scripts/bongos/smoke-claim-consistency.sh +222 -0
- package/scripts/bongos/smoke-dependencies.sh +143 -0
- package/scripts/bongos/smoke-gds.js +256 -0
- package/scripts/bongos/smoke-write.sh +275 -0
- package/scripts/bongos/source-text-test-scan.js +106 -0
- package/scripts/bongos/spark.js +294 -0
- package/scripts/bongos/stale-worktrees.js +212 -0
- package/scripts/bongos/start-goals.js +102 -0
- package/scripts/bongos/start.js +1090 -0
- package/scripts/bongos/status.js +545 -0
- package/scripts/bongos/strand-watch.js +315 -0
- package/scripts/bongos/stranded-rows.js +200 -0
- package/scripts/bongos/stray-unit-sweep.sh +71 -0
- package/scripts/bongos/surface.js +101 -0
- package/scripts/bongos/task.js +273 -0
- package/scripts/bongos/test-path-guard.js +99 -0
- package/scripts/bongos/triage.js +742 -0
- package/scripts/bongos/turn-end-sound.js +74 -0
- package/scripts/bongos/tweak-halt.js +70 -0
- package/scripts/bongos/tweak-renders.js +200 -0
- package/scripts/bongos/uat.js +120 -0
- package/scripts/bongos/ui-kit-transform.js +43 -0
- package/scripts/bongos/update-channel.js +512 -0
- package/scripts/bongos/update-sweep.js +829 -0
- package/scripts/bongos/upgrade-artist-gate.js +46 -0
- package/scripts/bongos/upgrade-commit-identity.js +32 -0
- package/scripts/bongos/upgrade-migrate.js +224 -0
- package/scripts/bongos/upgrade-operator.js +73 -0
- package/scripts/bongos/upgrade-outcome.js +174 -0
- package/scripts/bongos/upgrade.js +1499 -0
- package/scripts/bongos/validate-design.js +12 -0
- package/scripts/bongos/version-close.js +621 -0
- package/scripts/bongos/version-literal-guard.js +140 -0
- package/scripts/bongos/version-select.js +79 -0
- package/scripts/bongos/visual-review-nudge.js +39 -0
- package/scripts/bongos/wedge-remedy.js +174 -0
- package/scripts/bongos/worktree-claim-guard.js +130 -0
- package/scripts/bongos/worktree.js +449 -0
- package/scripts/discord/post.js +1 -1
- package/scripts/gds/README.md +9 -0
- package/scripts/gds/abandon.js +6 -136
- package/scripts/gds/accessibility-replay.js +5 -194
- package/scripts/gds/address-park-sweep.sh +7 -90
- package/scripts/gds/adopt-detect.js +5 -121
- package/scripts/gds/adopt-import.js +5 -109
- package/scripts/gds/adopt-preflight.js +5 -185
- package/scripts/gds/adr-namespace.js +5 -271
- package/scripts/gds/agent-invoke.js +5 -687
- package/scripts/gds/agents-sync.js +5 -500
- package/scripts/gds/api-alias-caller-scan.js +5 -255
- package/scripts/gds/api-artifacts.js +6 -0
- package/scripts/gds/api.js +6 -85
- package/scripts/gds/api.ps1 +8 -26
- package/scripts/gds/architect-audit.js +6 -293
- package/scripts/gds/artifact-audit.js +5 -324
- package/scripts/gds/artifact-format.js +6 -203
- package/scripts/gds/artifact-staleness.js +5 -265
- package/scripts/gds/ask.js +5 -229
- package/scripts/gds/audit-authorship.sh +7 -328
- package/scripts/gds/audit-deps.js +6 -188
- package/scripts/gds/audit-gate.js +5 -119
- package/scripts/gds/audit-rank-roles.js +6 -171
- package/scripts/gds/audit-replay.sh +7 -204
- package/scripts/gds/autobongos-digest.js +5 -121
- package/scripts/gds/autobongos-grade-cap.js +5 -186
- package/scripts/gds/autobongos-loop.js +5 -208
- package/scripts/gds/autobongos-run.js +5 -1359
- package/scripts/gds/autobongos-service.cmd +8 -49
- package/scripts/gds/autobongos-service.ps1 +8 -270
- package/scripts/gds/autobongos-tweak-lane.js +5 -261
- package/scripts/gds/autobongos-verify.js +5 -616
- package/scripts/gds/autonomy-gate.js +5 -133
- package/scripts/gds/autonomy-gauge-statusline.js +5 -122
- package/scripts/gds/autonomy-gauge.js +5 -82
- package/scripts/gds/backfill-cost.js +6 -175
- package/scripts/gds/backfill-disciplines.js +5 -142
- package/scripts/gds/backfill-session-earnings.js +5 -121
- package/scripts/gds/backfill-session-types.js +5 -85
- package/scripts/gds/backfill-sessions.js +5 -409
- package/scripts/gds/backfill-subagent-rewards.js +5 -483
- package/scripts/gds/backfill-task-rewards.js +5 -411
- package/scripts/gds/backlog-review.js +6 -398
- package/scripts/gds/backup-dropin-sweep.sh +7 -94
- package/scripts/gds/backup.js +6 -115
- package/scripts/gds/baseline-staleness.js +5 -215
- package/scripts/gds/bfg-principal-token.js +6 -64
- package/scripts/gds/bug-attachment-audit.js +5 -147
- package/scripts/gds/bug-attachment-recover.js +5 -196
- package/scripts/gds/bug-triage.js +6 -291
- package/scripts/gds/build-bongos.js +5 -92
- package/scripts/gds/bump-version.js +5 -219
- package/scripts/gds/capture.js +6 -480
- package/scripts/gds/category-advisory-guard.js +5 -205
- package/scripts/gds/ci-grade.js +6 -81
- package/scripts/gds/claim-recall.js +6 -111
- package/scripts/gds/claim.js +6 -788
- package/scripts/gds/classify-discipline.js +6 -152
- package/scripts/gds/claude-materialize.js +5 -1198
- package/scripts/gds/claude-md-template.js +5 -140
- package/scripts/gds/cleanup-orphans.js +6 -73
- package/scripts/gds/cli-lib.js +6 -1204
- package/scripts/gds/client-baseurl-guard.js +5 -114
- package/scripts/gds/codemod-rename-src-gds.js +6 -144
- package/scripts/gds/conductor-dispatch.js +6 -534
- package/scripts/gds/context-pack.js +6 -325
- package/scripts/gds/control-manifest.js +5 -197
- package/scripts/gds/copy-apply.js +5 -756
- package/scripts/gds/copy-inventory.js +5 -569
- package/scripts/gds/core-origin-follow.js +5 -184
- package/scripts/gds/core-pin-sync.js +5 -258
- package/scripts/gds/coreB-carve-proof.sh +7 -724
- package/scripts/gds/cost-report.js +6 -62
- package/scripts/gds/cost.js +6 -46
- package/scripts/gds/credential-presence.js +5 -294
- package/scripts/gds/cutover-codemod.js +5 -239
- package/scripts/gds/db-backup-nightly.sh +7 -231
- package/scripts/gds/db-backup-offsite.sh +7 -266
- package/scripts/gds/demote.js +6 -44
- package/scripts/gds/deploy-divergence.js +6 -445
- package/scripts/gds/deploy-main-audit-gate.sh +7 -96
- package/scripts/gds/design-sync.js +5 -10
- package/scripts/gds/dev-box-guard.js +5 -164
- package/scripts/gds/dev-lib.js +5 -721
- package/scripts/gds/dev.js +5 -643
- package/scripts/gds/device-flow-help.js +5 -70
- package/scripts/gds/diagnose-achievements.js +5 -116
- package/scripts/gds/diagram-facts.js +6 -355
- package/scripts/gds/discord-channels.js +5 -75
- package/scripts/gds/do-api.js +6 -109
- package/scripts/gds/doc-cli-guard.js +5 -266
- package/scripts/gds/doc-comment-coverage.js +5 -137
- package/scripts/gds/doc-control-claims.js +5 -166
- package/scripts/gds/docs-entropy.js +5 -443
- package/scripts/gds/doctor.js +6 -492
- package/scripts/gds/enroll-control-plane.js +5 -99
- package/scripts/gds/exec-path-guard.js +5 -562
- package/scripts/gds/feedback-send.js +5 -247
- package/scripts/gds/fetch-art-key.js +5 -104
- package/scripts/gds/fetch-sound-prefs.js +5 -124
- package/scripts/gds/figma-design-sync.js +5 -9
- package/scripts/gds/find-untested.js +5 -369
- package/scripts/gds/fitness-checks-error-envelope.js +5 -133
- package/scripts/gds/fitness-checks-identity.js +5 -342
- package/scripts/gds/fitness-checks-packaging.js +5 -131
- package/scripts/gds/fitness-checks-route-pins.js +5 -75
- package/scripts/gds/fitness-checks-vocabulary.js +5 -391
- package/scripts/gds/fitness-checks-write-validation.js +5 -156
- package/scripts/gds/fitness-lib.js +5 -126
- package/scripts/gds/fitness-migration-contraction.js +5 -49
- package/scripts/gds/fitness-ratchets.js +5 -563
- package/scripts/gds/fitness.js +5 -1493
- package/scripts/gds/gate-review.js +5 -328
- package/scripts/gds/gating.js +5 -346
- package/scripts/gds/gds-literal-scan.js +5 -194
- package/scripts/gds/gen-api-client.js +5 -555
- package/scripts/gds/gen-api-docs.js +5 -1100
- package/scripts/gds/gen-atlas.js +5 -364
- package/scripts/gds/gen-diagrams.js +6 -607
- package/scripts/gds/gen-file-map.js +5 -335
- package/scripts/gds/gen-freshness.js +5 -31
- package/scripts/gds/gen-interaction-posture.js +5 -120
- package/scripts/gds/gen-repo-map.js +5 -538
- package/scripts/gds/gen-role-responsibilities.js +5 -133
- package/scripts/gds/gen-session-index.js +5 -241
- package/scripts/gds/gen-sounds.js +5 -174
- package/scripts/gds/git-merge-regen.js +6 -291
- package/scripts/gds/go-live.js +5 -1069
- package/scripts/gds/goal-names.js +5 -100
- package/scripts/gds/goal.js +6 -271
- package/scripts/gds/government-walk.js +5 -1475
- package/scripts/gds/grade-correlation-audit.js +5 -308
- package/scripts/gds/grade-replay.js +5 -235
- package/scripts/gds/grade-smoke.js +6 -204
- package/scripts/gds/home-isolation-guard.js +5 -125
- package/scripts/gds/hooks/pre-push.js +5 -209
- package/scripts/gds/howto.js +5 -143
- package/scripts/gds/http-api-client.js +6 -81
- package/scripts/gds/identity-strip.js +5 -74
- package/scripts/gds/init.js +5 -1157
- package/scripts/gds/install-git-hooks.js +5 -198
- package/scripts/gds/instance-apex.js +5 -37
- package/scripts/gds/intent-retry.js +5 -51
- package/scripts/gds/key-card.js +6 -221
- package/scripts/gds/key-status.js +5 -124
- package/scripts/gds/land-watch.js +5 -199
- package/scripts/gds/leak-scan-allowlist.js +5 -291
- package/scripts/gds/learning-capture.js +6 -144
- package/scripts/gds/lib.sh +7 -73
- package/scripts/gds/linkify-refs.js +6 -654
- package/scripts/gds/lint-infra-exec.js +5 -68
- package/scripts/gds/lint-migrations.js +5 -100
- package/scripts/gds/lint-workflow-exec.js +5 -61
- package/scripts/gds/local-preview-lib.js +6 -128
- package/scripts/gds/local-preview.js +6 -81
- package/scripts/gds/login.js +5 -358
- package/scripts/gds/main-audit.js +5 -623
- package/scripts/gds/me.js +6 -96
- package/scripts/gds/memory-map.js +5 -174
- package/scripts/gds/merge-lock.js +6 -70
- package/scripts/gds/migration-namespace.js +5 -311
- package/scripts/gds/mirror-lineage-check.js +5 -341
- package/scripts/gds/mirror-redact.js +5 -348
- package/scripts/gds/module-artifact.js +6 -289
- package/scripts/gds/module-assess-docs.js +6 -237
- package/scripts/gds/module-assess-installs.js +6 -227
- package/scripts/gds/module-assess-score.js +6 -110
- package/scripts/gds/module-assess-security.js +6 -251
- package/scripts/gds/module-assess-tests.js +6 -277
- package/scripts/gds/module-assess-version.js +6 -91
- package/scripts/gds/module-error-report.js +5 -146
- package/scripts/gds/module-test-runner.js +6 -413
- package/scripts/gds/module.js +5 -1374
- package/scripts/gds/move-escalation.js +5 -140
- package/scripts/gds/newcomer-floor.js +6 -420
- package/scripts/gds/newcomer-floor.test.js +6 -234
- package/scripts/gds/next-number.js +6 -162
- package/scripts/gds/oauth-secret.js +5 -200
- package/scripts/gds/onboard.js +5 -265
- package/scripts/gds/onboarding-analyze.js +6 -225
- package/scripts/gds/onboarding-config.js +6 -179
- package/scripts/gds/onboarding-ship.js +6 -91
- package/scripts/gds/pack-env-prefix.js +5 -72
- package/scripts/gds/package-core.js +5 -1102
- package/scripts/gds/page-inventory.js +5 -346
- package/scripts/gds/page-reader.js +5 -720
- package/scripts/gds/paste-token.js +6 -211
- package/scripts/gds/plain-cards.js +5 -350
- package/scripts/gds/portability-smoke-art.sh +7 -84
- package/scripts/gds/portability-smoke-memory.sh +7 -175
- package/scripts/gds/preflight.js +5 -212
- package/scripts/gds/probe-cache.js +5 -244
- package/scripts/gds/prove-strict-versioning.js +6 -283
- package/scripts/gds/provision-auto-upgrade.js +5 -161
- package/scripts/gds/provision-byo-host.js +5 -67
- package/scripts/gds/provision-capacity.js +5 -78
- package/scripts/gds/provision-caps.js +5 -62
- package/scripts/gds/provision-config.js +5 -232
- package/scripts/gds/provision-core-upgrade.js +5 -1165
- package/scripts/gds/provision-disconnect.js +5 -87
- package/scripts/gds/provision-github-setup.js +5 -167
- package/scripts/gds/provision-net.js +5 -356
- package/scripts/gds/provision-pin-key.js +5 -175
- package/scripts/gds/provision-pin-replay.js +5 -125
- package/scripts/gds/provision-process.js +5 -169
- package/scripts/gds/provision-render.js +5 -200
- package/scripts/gds/provision-repo-auth.js +5 -163
- package/scripts/gds/provision-repo-private.js +5 -97
- package/scripts/gds/provision-repo.js +5 -1336
- package/scripts/gds/provision-teardown.js +5 -105
- package/scripts/gds/provision-units.js +5 -468
- package/scripts/gds/provision.js +5 -1477
- package/scripts/gds/publish-credential-check.js +6 -65
- package/scripts/gds/publish-integration-gate.js +5 -140
- package/scripts/gds/publish-manifest.js +5 -437
- package/scripts/gds/publish-watch.js +5 -266
- package/scripts/gds/pulse.js +6 -335
- package/scripts/gds/push-main.js +5 -54
- package/scripts/gds/push-path-brief.js +5 -98
- package/scripts/gds/read-session-export.js +5 -357
- package/scripts/gds/reauth.js +6 -154
- package/scripts/gds/recall.js +6 -182
- package/scripts/gds/redteam-patrol.js +5 -435
- package/scripts/gds/regen-instance-docs.js +5 -45
- package/scripts/gds/release-core.js +5 -78
- package/scripts/gds/release-notes.js +5 -270
- package/scripts/gds/release.js +6 -138
- package/scripts/gds/rename-goals.js +5 -107
- package/scripts/gds/rename-history-check.js +5 -367
- package/scripts/gds/rename-ledger-prose.js +5 -480
- package/scripts/gds/render-api.js +5 -196
- package/scripts/gds/render-check.js +5 -204
- package/scripts/gds/render-ideas.js +6 -225
- package/scripts/gds/render-payload.js +5 -84
- package/scripts/gds/repo-metrics.js +6 -362
- package/scripts/gds/review-sheet.js +5 -106
- package/scripts/gds/role-pack-guard.js +5 -141
- package/scripts/gds/route-shadow-guard.js +5 -173
- package/scripts/gds/routine-schedule.js +5 -281
- package/scripts/gds/run-routine.js +5 -255
- package/scripts/gds/run-unit-tests.js +6 -659
- package/scripts/gds/runner-drift.js +5 -149
- package/scripts/gds/sandbox-stage.js +6 -458
- package/scripts/gds/scope-map-guard.js +5 -299
- package/scripts/gds/scope-roster-guard.js +5 -117
- package/scripts/gds/seam-wiring-guard.js +5 -274
- package/scripts/gds/search-ingest-db.js +6 -287
- package/scripts/gds/search-ingest-md.js +6 -268
- package/scripts/gds/seed-adopt-tasks.js +6 -74
- package/scripts/gds/seed-api-contract-goal-tasks.js +6 -140
- package/scripts/gds/seed-board-room-tasks.js +6 -196
- package/scripts/gds/seed-bongos-app-tasks.js +6 -293
- package/scripts/gds/seed-bongos-coreB-tranche1-tasks.js +6 -80
- package/scripts/gds/seed-bongos-coreB-tranche2-tasks.js +6 -99
- package/scripts/gds/seed-bongos-goal-hierarchy-tasks.js +6 -306
- package/scripts/gds/seed-bongos-module-system-tasks.js +6 -345
- package/scripts/gds/seed-bongos-tasks.js +6 -213
- package/scripts/gds/seed-bongos-v1-idea-routing-tasks.js +6 -152
- package/scripts/gds/seed-bongos-v1-seo-tasks.js +6 -104
- package/scripts/gds/seed-bv1-community-tasks.js +6 -131
- package/scripts/gds/seed-bv1-privacy-invites-tasks.js +6 -133
- package/scripts/gds/seed-bv1-profile-page-tasks.js +6 -161
- package/scripts/gds/seed-bv1-profiles-tasks.js +6 -135
- package/scripts/gds/seed-bv1-r01-delta-tasks.js +6 -154
- package/scripts/gds/seed-bv2-ideator-surface-tasks.js +6 -390
- package/scripts/gds/seed-bv2-tweak-mode-tasks.js +6 -277
- package/scripts/gds/seed-gds-v4-tasks.js +6 -623
- package/scripts/gds/seed-governance-tasks.js +6 -339
- package/scripts/gds/seed-medusa-tasks.js +6 -439
- package/scripts/gds/seed-module-upstreaming.js +5 -217
- package/scripts/gds/seed-productization-tasks.js +6 -234
- package/scripts/gds/seed-project-admin-console-tasks.js +6 -88
- package/scripts/gds/seed-provisioning-tasks.js +6 -82
- package/scripts/gds/seed-staging.sh +7 -116
- package/scripts/gds/seed-strict-versioning-tasks.js +6 -274
- package/scripts/gds/seed-v2-world-tasks.js +6 -282
- package/scripts/gds/seed-verify-criteria.js +6 -124
- package/scripts/gds/sequence.js +6 -596
- package/scripts/gds/session-cost.js +6 -429
- package/scripts/gds/session-digest-build.js +6 -293
- package/scripts/gds/session-digest.js +6 -199
- package/scripts/gds/session-eval.js +6 -630
- package/scripts/gds/session-transcript-build.js +6 -155
- package/scripts/gds/session-transcript-upload.js +6 -29
- package/scripts/gds/session.js +6 -403
- package/scripts/gds/setup.js +6 -645
- package/scripts/gds/ship-check.js +5 -85
- package/scripts/gds/ship-deploy-target.js +5 -392
- package/scripts/gds/ship-escalation.js +5 -166
- package/scripts/gds/ship-finish.js +5 -419
- package/scripts/gds/ship-flow.js +5 -1216
- package/scripts/gds/ship-git.js +5 -99
- package/scripts/gds/ship-grade-steps.js +5 -546
- package/scripts/gds/ship-grade.js +5 -425
- package/scripts/gds/ship-honesty.js +5 -312
- package/scripts/gds/ship-io.js +5 -138
- package/scripts/gds/ship-land.js +5 -1129
- package/scripts/gds/ship-memory-sync.js +5 -248
- package/scripts/gds/ship-merge-gate.js +5 -224
- package/scripts/gds/ship-merge.js +5 -465
- package/scripts/gds/ship-mode-ask.js +5 -137
- package/scripts/gds/ship-mode-manual.js +5 -53
- package/scripts/gds/ship-preflight-steps.js +5 -398
- package/scripts/gds/ship-regen.js +5 -313
- package/scripts/gds/ship-resume.js +5 -200
- package/scripts/gds/ship-session-upload.js +5 -312
- package/scripts/gds/ship-state.js +5 -109
- package/scripts/gds/ship-surprise.js +5 -83
- package/scripts/gds/ship-visual.js +5 -74
- package/scripts/gds/ship.js +5 -380
- package/scripts/gds/shipping-mode.js +5 -69
- package/scripts/gds/skill-lint.js +5 -248
- package/scripts/gds/skill-preflight.js +5 -359
- package/scripts/gds/smoke-batch-claim.sh +7 -237
- package/scripts/gds/smoke-batch-release.sh +7 -315
- package/scripts/gds/smoke-claim-consistency.sh +7 -221
- package/scripts/gds/smoke-dependencies.sh +7 -142
- package/scripts/gds/smoke-gds.js +6 -255
- package/scripts/gds/smoke-write.sh +7 -274
- package/scripts/gds/source-text-test-scan.js +7 -0
- package/scripts/gds/spark.js +6 -293
- package/scripts/gds/stale-worktrees.js +5 -210
- package/scripts/gds/start-goals.js +5 -101
- package/scripts/gds/start.js +6 -1089
- package/scripts/gds/status.js +6 -544
- package/scripts/gds/strand-watch.js +5 -313
- package/scripts/gds/stranded-rows.js +5 -198
- package/scripts/gds/stray-unit-sweep.sh +7 -70
- package/scripts/gds/surface.js +5 -100
- package/scripts/gds/task.js +6 -272
- package/scripts/gds/test-path-guard.js +5 -97
- package/scripts/gds/triage.js +6 -741
- package/scripts/gds/turn-end-sound.js +5 -72
- package/scripts/gds/tweak-halt.js +5 -68
- package/scripts/gds/tweak-renders.js +5 -198
- package/scripts/gds/uat.js +6 -119
- package/scripts/gds/ui-kit-transform.js +5 -41
- package/scripts/gds/update-channel.js +5 -510
- package/scripts/gds/update-sweep.js +5 -827
- package/scripts/gds/upgrade-artist-gate.js +5 -45
- package/scripts/gds/upgrade-commit-identity.js +5 -31
- package/scripts/gds/upgrade-migrate.js +5 -223
- package/scripts/gds/upgrade-operator.js +6 -73
- package/scripts/gds/upgrade-outcome.js +5 -173
- package/scripts/gds/upgrade.js +5 -1497
- package/scripts/gds/validate-design.js +5 -10
- package/scripts/gds/version-close.js +6 -620
- package/scripts/gds/version-literal-guard.js +5 -138
- package/scripts/gds/version-select.js +5 -77
- package/scripts/gds/visual-review-nudge.js +5 -38
- package/scripts/gds/wedge-remedy.js +5 -173
- package/scripts/gds/worktree-claim-guard.js +5 -129
- package/scripts/gds/worktree.js +6 -448
- package/scripts/hall-preview/refresh-fixtures.js +1 -1
- package/scripts/hall-preview/server.js +2 -2
- package/scripts/migrate.sh +3 -3
- package/scripts/public-mirror-export.js +3 -3
- package/scripts/setup-builder.js +7 -7
- package/src/bongos/api-errors.js +1 -0
- package/src/bongos/api-prefix.js +1 -1
- package/src/bongos/auth-github.js +19 -3
- package/src/bongos/auth-idp.js +7 -0
- package/src/bongos/claim-attribution.js +2 -2
- package/src/bongos/core-moves.js +1 -1
- package/src/bongos/core-update.js +3 -3
- package/src/bongos/craft-mode.js +2 -2
- package/src/bongos/db-kernel.js +15 -3
- package/src/bongos/db.js +30 -4
- package/src/bongos/github-repos.js +1 -1
- package/src/bongos/llm-cache.js +1 -1
- package/src/bongos/llm-pricing.js +1 -1
- package/src/bongos/metrics.js +1 -1
- package/src/bongos/middleware/rate-limit.js +2 -2
- package/src/bongos/module-listing.js +93 -1
- package/src/bongos/module-scope-map.js +90 -85
- package/src/bongos/module-store.js +1 -1
- package/src/bongos/module-submissions.js +1 -1
- package/src/bongos/optimizer.js +1 -1
- package/src/bongos/package-registry.js +1 -1
- package/src/bongos/path-match.js +1 -1
- package/src/bongos/permission-path-check.js +3 -3
- package/src/bongos/platform-visibility-gate.js +3 -5
- package/src/bongos/prelaunch-gate.js +7 -6
- package/src/bongos/route-rank-check.js +2 -2
- package/src/bongos/routes/auth.js +15 -2
- package/src/bongos/routes/backup.js +1 -1
- package/src/bongos/routes/builders.js +29 -1
- package/src/bongos/routes/me.js +49 -18
- package/src/bongos/routes/modules.js +29 -9
- package/src/bongos/routes/public.js +3 -72
- package/src/bongos/schema-lag.js +1 -1
- package/src/bongos/sensitive-surfaces.js +1 -1
- package/src/bongos/serve-internal.js +65 -16
- package/src/bongos/software-update.js +2 -2
- package/src/bongos/upgrade-hold.js +3 -3
- package/src/hall-look.js +6 -5
- package/src/module-api.js +3 -3
- package/src/module-loader/catalog.js +1 -1
- package/src/module-loader/error-tally.js +3 -3
- package/src/module-loader/manifest-schema.js +3 -3
- package/src/platform-server.js +10 -0
- package/src/role-responsibilities.js +1 -1
- package/src/stale-timer.js +2 -2
- package/tests/accessibility_replay.mjs +1 -1
- package/tests/activity_rollup_order_db.mjs +1 -1
- package/tests/activity_snapshots_db.mjs +1 -1
- package/tests/adopt_detect.mjs +1 -1
- package/tests/adopt_import.mjs +1 -1
- package/tests/adopt_preflight.mjs +1 -1
- package/tests/adr_0089_scope.mjs +10 -7
- package/tests/adr_0162_citation.mjs +1 -1
- package/tests/adr_0162_gate_citation.mjs +1 -1
- package/tests/agent_invoke.mjs +1 -1
- package/tests/agent_invoke_live.mjs +3 -3
- package/tests/agents_cron_trigger.mjs +2 -2
- package/tests/agents_roster.mjs +1 -1
- package/tests/agents_sync.mjs +4 -4
- package/tests/allow_rule_guard.mjs +20 -20
- package/tests/api_alias_caller_ratchet.mjs +9 -10
- package/tests/api_alias_exceptions.mjs +7 -6
- package/tests/api_artifacts.mjs +214 -0
- package/tests/api_cli_flags.mjs +3 -3
- package/tests/api_client.mjs +56 -54
- package/tests/api_docs.mjs +30 -9
- package/tests/api_error_envelope_buildcheck.mjs +1 -1
- package/tests/api_msys_path_repair.mjs +2 -2
- package/tests/architect.mjs +1 -1
- package/tests/art_stage.mjs +2 -2
- package/tests/artifact_audit.mjs +2 -2
- package/tests/artifact_staleness.mjs +9 -9
- package/tests/atlas.mjs +1 -1
- package/tests/audit_deps.mjs +1 -1
- package/tests/audit_gate.mjs +1 -1
- package/tests/auth_flow_slice1.mjs +3 -3
- package/tests/auth_inactive_builder.mjs +43 -5
- package/tests/auth_session_expiry_db.mjs +16 -4
- package/tests/auth_session_ttl.mjs +23 -0
- package/tests/authorship_audit.mjs +2 -2
- package/tests/autobongos_cadence.mjs +1 -1
- package/tests/autobongos_fence.mjs +1 -1
- package/tests/autobongos_grade_cap.mjs +2 -2
- package/tests/autobongos_heartbeat_head.mjs +1 -1
- package/tests/autobongos_host_access.mjs +3 -3
- package/tests/autobongos_loop.mjs +17 -17
- package/tests/autobongos_service_ps1.mjs +3 -3
- package/tests/autobongos_tweak_lane.mjs +2 -2
- package/tests/autobongos_verify.mjs +2 -2
- package/tests/autonomous_fit_protected_paths.mjs +3 -3
- package/tests/autonomy_config_idle.mjs +1 -1
- package/tests/autonomy_digest.mjs +1 -1
- package/tests/autonomy_gate.mjs +1 -1
- package/tests/autonomy_gauge.mjs +2 -2
- package/tests/autonomy_runner_identity.mjs +1 -1
- package/tests/backfill_sessions.mjs +8 -8
- package/tests/backfill_subagent_rewards.mjs +1 -1
- package/tests/backfill_task_rewards.mjs +2 -2
- package/tests/backlog_review.mjs +3 -3
- package/tests/baseline_staleness.mjs +2 -2
- package/tests/bfg.mjs +11 -5
- package/tests/bfg_write.mjs +20 -11
- package/tests/blockers_hall.mjs +14 -4
- package/tests/blockers_page_ui.mjs +56 -12
- package/tests/bongos_dispatch.mjs +5 -5
- package/tests/bongos_login.mjs +2 -2
- package/tests/bug_attachment_audit.mjs +1 -1
- package/tests/bug_attachment_recover.mjs +2 -2
- package/tests/bug_triage.mjs +3 -3
- package/tests/build_info.mjs +1 -1
- package/tests/builder_tester_tag.mjs +184 -0
- package/tests/bump_version.mjs +3 -3
- package/tests/canonical_profile_url.mjs +1 -1
- package/tests/capture_error_format.mjs +1 -1
- package/tests/capture_goal_routing.mjs +2 -2
- package/tests/category_advisory_guard.mjs +3 -3
- package/tests/claim_error_surface.mjs +2 -2
- package/tests/claim_from_task_and_home.mjs +1 -1
- package/tests/claim_gate_open_blocker.mjs +7 -4
- package/tests/claim_gate_rebase.mjs +12 -8
- package/tests/claim_recall.mjs +4 -4
- package/tests/claim_resolve_worktree_lock.mjs +1 -1
- package/tests/claude_materialize.mjs +58 -58
- package/tests/clawback_confirmed_backlog.mjs +8 -5
- package/tests/cli_allowlist_permissions.mjs +11 -11
- package/tests/cli_dispatcher.mjs +2 -2
- package/tests/cli_err_code.mjs +6 -6
- package/tests/cli_exit_no_abort.mjs +7 -7
- package/tests/cli_lib_formatters.mjs +2 -2
- package/tests/cli_sessions.mjs +5 -5
- package/tests/cli_surface.mjs +15 -15
- package/tests/cli_token_reissue.mjs +2 -2
- package/tests/client_baseurl_guard.mjs +1 -1
- package/tests/client_bundle_route.mjs +35 -4
- package/tests/cloud_bongos_pack.mjs +1 -1
- package/tests/community_leaderboard_db.mjs +1 -1
- package/tests/conductor.mjs +18 -18
- package/tests/conflict_resolve.mjs +14 -16
- package/tests/consumer_layout_boot.mjs +12 -12
- package/tests/context_pack.mjs +6 -6
- package/tests/control_manifest.mjs +4 -4
- package/tests/copy_desk_page_reads.mjs +1 -1
- package/tests/copy_desk_page_release.mjs +192 -0
- package/tests/copy_inventory.mjs +2 -2
- package/tests/core_auto_upgrade.mjs +1 -1
- package/tests/core_move_notice.mjs +2 -2
- package/tests/core_origin_follow.mjs +7 -7
- package/tests/core_pin_sync.mjs +3 -3
- package/tests/core_upgrade_door.mjs +2 -2
- package/tests/core_upgrade_owner_door.mjs +34 -1
- package/tests/core_upgrade_runner.mjs +19 -19
- package/tests/credential_presence.mjs +2 -2
- package/tests/credit_grant.mjs +3 -3
- package/tests/credit_log_single_writer.mjs +5 -5
- package/tests/criterion_ref_status.mjs +2 -2
- package/tests/cross_discipline_priority_direction.mjs +3 -3
- package/tests/cutover_codemod.mjs +2 -4
- package/tests/db_backup_nightly.mjs +1 -1
- package/tests/db_backup_offsite.mjs +1 -1
- package/tests/db_ownership_handover.mjs +2 -2
- package/tests/dead_deps.mjs +3 -3
- package/tests/dependency_advisory.mjs +1 -1
- package/tests/deploy_audit_gate.mjs +4 -4
- package/tests/deploy_divergence_line.mjs +36 -16
- package/tests/deploy_page_projects.mjs +35 -4
- package/tests/dev_lib.mjs +2 -2
- package/tests/dev_windows.mjs +2 -2
- package/tests/diagram_facts_offset.mjs +1 -1
- package/tests/diagram_repo_slug.mjs +1 -1
- package/tests/diff_derived_signals.mjs +2 -2
- package/tests/dns_preflight.mjs +2 -2
- package/tests/do_api.mjs +3 -3
- package/tests/doc_cli_guard.mjs +28 -28
- package/tests/doc_comment_coverage.mjs +1 -1
- package/tests/doc_control_claims.mjs +11 -11
- package/tests/docs_entropy.mjs +2 -2
- package/tests/docs_openapi_route.mjs +8 -6
- package/tests/doctor_hooks.mjs +1 -1
- package/tests/edit_hints.mjs +3 -2
- package/tests/effective_visibility_predicate.mjs +3 -3
- package/tests/env_knobs_neutral_prefix.mjs +13 -13
- package/tests/exec_path_guard.mjs +4 -4
- package/tests/executed_closure.mjs +18 -12
- package/tests/file_map.mjs +1 -1
- package/tests/find_untested.mjs +13 -13
- package/tests/first_admin_bootstrap.mjs +1 -1
- package/tests/fitness.mjs +16 -16
- package/tests/fitness_gds_ratchet.mjs +2 -2
- package/tests/fitness_installed_core.mjs +3 -3
- package/tests/fitness_no_raw_nul.mjs +1 -1
- package/tests/fitness_ratchets.mjs +3 -3
- package/tests/fitness_scope_roster.mjs +2 -2
- package/tests/fitness_two_root.mjs +8 -8
- package/tests/fixtures/accessibility-replay.json +5 -5
- package/tests/fixtures/grade-replay/recorded-panel-grades.json +1 -1
- package/tests/fixtures/ideator-prefold/README.md +1 -1
- package/tests/fixtures/page-ledger.mjs +22 -0
- package/tests/fixtures/session-506-digest.json +5 -5
- package/tests/gate_approvals.mjs +50 -0
- package/tests/gate_review.mjs +8 -8
- package/tests/gating_review_retired.mjs +2 -2
- package/tests/gen_freshness.mjs +3 -3
- package/tests/git_guard.mjs +3 -3
- package/tests/git_merge_regen.mjs +41 -65
- package/tests/github_one_trip.mjs +4 -4
- package/tests/github_pick_up.mjs +2 -2
- package/tests/github_push_merge_driver.mjs +1 -1
- package/tests/go_live.mjs +3 -2
- package/tests/goal_category.mjs +1 -1
- package/tests/goal_cli.mjs +2 -2
- package/tests/goal_create_spec_entry.mjs +1 -1
- package/tests/goal_invite_consent.mjs +3 -1
- package/tests/goal_move.mjs +1 -1
- package/tests/goal_names.mjs +2 -2
- package/tests/goal_working_area.mjs +1 -1
- package/tests/government_agent_asks.mjs +7 -7
- package/tests/government_board_room_copy.mjs +6 -1
- package/tests/government_board_view.mjs +39 -0
- package/tests/government_board_vote_ui.mjs +39 -1
- package/tests/government_config.mjs +2 -2
- package/tests/government_live_proof_shape.mjs +1 -1
- package/tests/government_protected_surfaces.mjs +54 -53
- package/tests/government_require_permission.mjs +9 -1
- package/tests/government_vanilla_boot.mjs +1 -1
- package/tests/government_vocabulary.mjs +2 -2
- package/tests/government_walk.mjs +2 -2
- package/tests/grade_body_limit.mjs +6 -4
- package/tests/grade_correlation_audit.mjs +3 -3
- package/tests/grade_diff_hash.mjs +1 -1
- package/tests/grade_engine_replay.mjs +2 -2
- package/tests/grade_server_authoritative.mjs +1 -1
- package/tests/grade_unavailable_display.mjs +1 -1
- package/tests/grader.mjs +8 -24
- package/tests/grader_generated_provenance.mjs +14 -14
- package/tests/grader_no_artifact.mjs +1 -1
- package/tests/grader_prompt_fencing.mjs +1 -1
- package/tests/grader_quality_window_overflow.mjs +1 -1
- package/tests/grader_reader_lens.mjs +3 -3
- package/tests/grader_regrade_delta.mjs +1 -1
- package/tests/grader_unbacked_score.mjs +2 -2
- package/tests/hall_acclaim_vote_control.mjs +113 -0
- package/tests/hall_asset_cache.mjs +127 -0
- package/tests/hall_audit.mjs +63 -0
- package/tests/hall_board_world.mjs +20 -0
- package/tests/hall_city_card_words.mjs +61 -0
- package/tests/hall_client_request_shape.mjs +5 -1
- package/tests/hall_home_ships_bounded.mjs +160 -0
- package/tests/hall_landing_boot.mjs +15 -2
- package/tests/hall_nav.mjs +33 -0
- package/tests/hall_onboarding_bongos_setup.mjs +1 -1
- package/tests/hall_oversight_world.mjs +44 -4
- package/tests/hall_palette.mjs +12 -9
- package/tests/hall_preview_security.mjs +1 -1
- package/tests/hall_profile_world.mjs +17 -0
- package/tests/hall_reading_world.mjs +16 -1
- package/tests/hall_roster_world.mjs +2 -1
- package/tests/hall_studio_world.mjs +4 -1
- package/tests/hall_work_history_id.mjs +39 -0
- package/tests/held_tweak_reporting.mjs +4 -4
- package/tests/helpers.mjs +3 -3
- package/tests/home_bounded_reads.mjs +1 -1
- package/tests/home_isolation_guard.mjs +1 -1
- package/tests/hook_core_resolve.mjs +7 -7
- package/tests/hook_user_agents.mjs +1 -1
- package/tests/hooks_drain.mjs +2 -2
- package/tests/host_topology_skips.mjs +1 -1
- package/tests/howto_guide.mjs +1 -1
- package/tests/howto_moments.mjs +3 -3
- package/tests/hub_account_page.mjs +1 -1
- package/tests/idea_capture_grades.mjs +2 -2
- package/tests/idea_develop_spark.mjs +1 -1
- package/tests/idea_filed_via.mjs +2 -2
- package/tests/idea_ideate_full.mjs +1 -1
- package/tests/idea_spark_mark.mjs +1 -1
- package/tests/idea_spark_queue.mjs +1 -1
- package/tests/idea_triage.mjs +1 -1
- package/tests/idea_triage_grade.mjs +3 -3
- package/tests/idea_vote_permission.mjs +113 -0
- package/tests/idea_votes_fold_db.mjs +123 -0
- package/tests/infra_exec_paths.mjs +12 -12
- package/tests/init.mjs +2 -2
- package/tests/instance_db_migrated_on_code_move.mjs +5 -5
- package/tests/instance_feedback.mjs +9 -9
- package/tests/instance_mismatch_guard.mjs +2 -2
- package/tests/integration_parked_ratchet.mjs +24 -2
- package/tests/intent_retry.mjs +1 -1
- package/tests/interaction_posture.mjs +3 -3
- package/tests/invite_expiry_db.mjs +1 -1
- package/tests/joinability_invite_only.mjs +1 -1
- package/tests/karma_vote_lists.mjs +270 -0
- package/tests/key-card.mjs +2 -2
- package/tests/key-status.mjs +2 -2
- package/tests/knip_ratchet_ambient.mjs +2 -2
- package/tests/known_failing_ratchet.mjs +1 -1
- package/tests/land_watch.mjs +2 -2
- package/tests/landing_legal_pages.mjs +1 -1
- package/tests/landing_page.mjs +2 -2
- package/tests/leaderboard_roles.mjs +4 -1
- package/tests/leak_scan_allowlist.mjs +8 -8
- package/tests/leak_scan_fail_closed.mjs +1 -1
- package/tests/lib_sh_resolution.mjs +9 -9
- package/tests/lifecycle-card.mjs +7 -7
- package/tests/linkify_check.mjs +2 -2
- package/tests/linkify_refs.mjs +1 -1
- package/tests/llm-cache-route.mjs +1 -1
- package/tests/local_preview.mjs +2 -2
- package/tests/main_audit.mjs +3 -3
- package/tests/main_audit_attestation.mjs +1 -1
- package/tests/main_audit_db_roster.mjs +2 -2
- package/tests/main_worktree_busy_reason.mjs +3 -3
- package/tests/markdown_line_endings.mjs +2 -2
- package/tests/me_streak_leaderboard_queries.mjs +193 -0
- package/tests/membership_kind_lockstep.mjs +1 -1
- package/tests/memory_isolation.mjs +16 -8
- package/tests/memory_map.mjs +2 -2
- package/tests/memory_pull.mjs +33 -25
- package/tests/merge_driver_register.mjs +3 -3
- package/tests/migration_allocation.mjs +2 -2
- package/tests/migration_namespace.mjs +1 -1
- package/tests/migrations_forward_safe.mjs +1 -1
- package/tests/mingle.mjs +1 -1
- package/tests/mirror_lineage_fulltree.mjs +3 -3
- package/tests/mirror_lineage_proof.mjs +2 -2
- package/tests/mirror_redact.mjs +4 -4
- package/tests/missing_dep_classify.mjs +3 -3
- package/tests/module-scope-map.mjs +22 -22
- package/tests/module_api_lazy.mjs +1 -1
- package/tests/module_assess_docs.mjs +2 -2
- package/tests/module_assess_installs.mjs +3 -3
- package/tests/module_assess_price_parity.mjs +5 -5
- package/tests/module_assess_score.mjs +5 -5
- package/tests/module_assess_security.mjs +4 -4
- package/tests/module_assess_tests.mjs +3 -3
- package/tests/module_assessments_migration.mjs +1 -1
- package/tests/module_catalog.mjs +2 -2
- package/tests/module_cli.mjs +3 -3
- package/tests/module_entitlements.mjs +1 -1
- package/tests/module_error_counts.mjs +1 -1
- package/tests/module_install.mjs +4 -4
- package/tests/module_loader.mjs +3 -1
- package/tests/module_owned_tests.mjs +1 -1
- package/tests/module_release_channels.mjs +1 -1
- package/tests/module_store_howto.mjs +3 -3
- package/tests/module_store_listing.mjs +139 -2
- package/tests/module_store_publish.mjs +4 -4
- package/tests/module_store_publish_route.mjs +1 -1
- package/tests/module_store_reassess.mjs +1 -1
- package/tests/module_store_registry_migration.mjs +1 -1
- package/tests/module_test_runner.mjs +3 -3
- package/tests/module_update.mjs +4 -4
- package/tests/module_upgrade_updates.mjs +1 -1
- package/tests/move_escalation.mjs +2 -2
- package/tests/nav_permission_atoms.mjs +3 -2
- package/tests/needs_rebase.mjs +7 -3
- package/tests/newcomer_floor.mjs +1 -1
- package/tests/newcomer_generator.mjs +48 -0
- package/tests/next_number.mjs +1 -1
- package/tests/no_artifact_escalation.mjs +3 -3
- package/tests/npm_release_where.mjs +1 -1
- package/tests/oauth_secret.mjs +2 -2
- package/tests/onboard.mjs +6 -6
- package/tests/onboarding_gate.mjs +2 -2
- package/tests/opt_in_skill_modules.mjs +3 -3
- package/tests/own_scope_guard.mjs +1 -1
- package/tests/own_session_revoke.mjs +4 -1
- package/tests/package_core.mjs +10 -11
- package/tests/page_inventory.mjs +5 -5
- package/tests/page_reader.mjs +7 -7
- package/tests/page_tweak_hold.mjs +6 -6
- package/tests/parallel-load.mjs +1 -1
- package/tests/paste_token_api_base.mjs +1 -1
- package/tests/paste_token_session_store.mjs +2 -2
- package/tests/pending_invite_purge_db.mjs +1 -1
- package/tests/permission_path.mjs +1 -1
- package/tests/pin_replay.mjs +1 -1
- package/tests/pin_write_key.mjs +7 -7
- package/tests/plain_cards.mjs +15 -15
- package/tests/pr_assign.mjs +1 -1
- package/tests/pre_push_hook.mjs +3 -3
- package/tests/preflight_checks.mjs +2 -2
- package/tests/prelaunch_gate.mjs +1 -1
- package/tests/privacy_matrix.mjs +1 -1
- package/tests/probe_cache.mjs +6 -6
- package/tests/profile_connections_ui.mjs +4 -3
- package/tests/profile_fields.mjs +11 -1
- package/tests/profile_privacy_owner_view.mjs +1 -1
- package/tests/profile_role_headline.mjs +10 -9
- package/tests/project_admin_console_model.mjs +1 -1
- package/tests/projects_hub.mjs +1 -1
- package/tests/projects_hub_cloud_hop.mjs +1 -1
- package/tests/promote_goal_id.mjs +6 -6
- package/tests/promotion_sweep.mjs +1 -1
- package/tests/provision.mjs +24 -24
- package/tests/provision_account_identity.mjs +2 -2
- package/tests/provision_byo_host.mjs +1 -1
- package/tests/provision_caddy_wiring.mjs +2 -2
- package/tests/provision_disconnect.mjs +2 -2
- package/tests/provision_dns_first.mjs +1 -1
- package/tests/provision_render.mjs +9 -9
- package/tests/provision_repo_private.mjs +3 -3
- package/tests/provision_resource_caps.mjs +5 -5
- package/tests/provision_restart.mjs +3 -3
- package/tests/provision_settings_apply.mjs +7 -7
- package/tests/provision_teardown_address.mjs +2 -2
- package/tests/provisioning_capacity.mjs +5 -5
- package/tests/provisioning_credential_preflight.mjs +1 -1
- package/tests/provisioning_disconnect.mjs +1 -1
- package/tests/provisioning_error_note_scope.mjs +4 -4
- package/tests/provisioning_paid_shape_gate.mjs +2 -2
- package/tests/provisioning_planet_physics.mjs +16 -0
- package/tests/provisioning_runner_drift_notice.mjs +2 -2
- package/tests/provisioning_settings_env.mjs +1 -1
- package/tests/pruned_lockfile_integrity.mjs +1 -1
- package/tests/public_mirror_export.mjs +1 -1
- package/tests/publish_integration_gate.mjs +2 -2
- package/tests/publish_manifest.mjs +6 -6
- package/tests/publish_watch.mjs +1 -1
- package/tests/push_path_brief.mjs +2 -2
- package/tests/raise.mjs +248 -0
- package/tests/rank_roles_audit.mjs +1 -1
- package/tests/rank_tier_single_source.mjs +2 -2
- package/tests/rate_limit_public.mjs +1 -1
- package/tests/read_default_meter.mjs +2 -2
- package/tests/read_session_export.mjs +1 -1
- package/tests/rebase_gate_set_aside.mjs +1 -1
- package/tests/recall_cli.mjs +1 -1
- package/tests/recall_corpus_health.mjs +3 -2
- package/tests/recall_hints.mjs +1 -1
- package/tests/recruiter_sliver_boundary.mjs +1 -1
- package/tests/redteam_patrol.mjs +2 -2
- package/tests/regrade_actual_minutes.mjs +2 -2
- package/tests/regrade_eligibility.mjs +2 -2
- package/tests/release_core.mjs +2 -2
- package/tests/release_notes.mjs +4 -4
- package/tests/rename_history_restraint.mjs +3 -3
- package/tests/rename_ledger_prose.mjs +6 -6
- package/tests/render_api.mjs +1 -1
- package/tests/render_check.mjs +4 -4
- package/tests/render_deploy.mjs +1 -1
- package/tests/repo_info_binding.mjs +1 -1
- package/tests/repo_map.mjs +5 -5
- package/tests/reward_mode_cost_plus_only.mjs +7 -3
- package/tests/reward_mode_surfacing.mjs +1 -1
- package/tests/role_responsibilities.mjs +1 -1
- package/tests/route_permission_check.mjs +1 -1
- package/tests/route_shadow_guard.mjs +1 -1
- package/tests/route_validation.mjs +1 -1
- package/tests/routine_capture_kind.mjs +6 -6
- package/tests/routine_schedule.mjs +9 -9
- package/tests/run_routine.mjs +5 -5
- package/tests/run_routine_two_root.mjs +5 -5
- package/tests/runner_drift.mjs +17 -17
- package/tests/sandbox_stage.mjs +5 -5
- package/tests/scope_map_guard.mjs +7 -7
- package/tests/scouting_owner_access_and_reach.mjs +1 -1
- package/tests/scripts_gds_forwarders.mjs +224 -0
- package/tests/scrubber_corpus.mjs +2 -2
- package/tests/seam_wiring_guard.mjs +1 -1
- package/tests/search_ingest.mjs +2 -2
- package/tests/search_ingest_db.mjs +1 -1
- package/tests/search_ingest_nul.mjs +6 -6
- package/tests/seed_verify_criteria.mjs +3 -3
- package/tests/sequence.mjs +3 -3
- package/tests/served_paths_shipped.mjs +3 -3
- package/tests/session_506_regression.mjs +1 -1
- package/tests/session_accessibility.mjs +1 -1
- package/tests/session_caps.mjs +1 -1
- package/tests/session_cost.mjs +1 -1
- package/tests/session_digest.mjs +2 -2
- package/tests/session_eval.mjs +6 -6
- package/tests/session_index.mjs +1 -1
- package/tests/session_records.mjs +4 -4
- package/tests/session_rename_fallback.mjs +2 -2
- package/tests/session_reward_on_land.mjs +7 -149
- package/tests/session_reward_on_land_db.mjs +191 -0
- package/tests/session_reward_reconcile.mjs +6 -88
- package/tests/session_reward_reconcile_db.mjs +132 -0
- package/tests/session_transcript.mjs +1 -1
- package/tests/sessions_kit_pager.mjs +2 -1
- package/tests/setup_device_flow_fallback.mjs +2 -2
- package/tests/setup_smoke.mjs +12 -5
- package/tests/setup_status_facts.mjs +54 -12
- package/tests/ship_autolinkify.mjs +2 -2
- package/tests/ship_automerge_injection.mjs +1 -1
- package/tests/ship_base_flag.mjs +1 -1
- package/tests/ship_broadcast_routing.mjs +1 -1
- package/tests/ship_broadcast_server.mjs +2 -2
- package/tests/ship_builder_model.mjs +1 -1
- package/tests/ship_cannot_lie.mjs +9 -9
- package/tests/ship_card.mjs +2 -2
- package/tests/ship_ci_deploy.mjs +7 -7
- package/tests/ship_error_shape.mjs +1 -1
- package/tests/ship_land_ci_not_started.mjs +3 -3
- package/tests/ship_land_conflict.mjs +3 -3
- package/tests/ship_land_proof.mjs +3 -3
- package/tests/ship_land_red_pr.mjs +5 -5
- package/tests/ship_merge_gate.mjs +14 -14
- package/tests/ship_mode.mjs +1 -1
- package/tests/ship_mode_first_ship.mjs +4 -4
- package/tests/ship_mode_hands_off.mjs +8 -8
- package/tests/ship_post_land_verify.mjs +1 -1
- package/tests/ship_preflight.mjs +19 -19
- package/tests/ship_premerge.mjs +1 -1
- package/tests/ship_publish_error.mjs +2 -2
- package/tests/ship_push_diagnosis.mjs +1 -1
- package/tests/ship_regen_copy_inventory.mjs +3 -3
- package/tests/ship_resume.mjs +4 -4
- package/tests/ship_smoke_gate.mjs +1 -1
- package/tests/ship_upload_skip.mjs +1 -1
- package/tests/ship_upstream_deletion.mjs +1 -1
- package/tests/ship_vendored_instance.mjs +8 -8
- package/tests/ship_visual_regrade.mjs +3 -3
- package/tests/ship_zero_commit.mjs +1 -1
- package/tests/skill_docs_unavailable_regrade.mjs +3 -3
- package/tests/skill_friction_kind.mjs +1 -1
- package/tests/skill_grade_recover.mjs +1 -1
- package/tests/skill_grader_health.mjs +1 -1
- package/tests/skill_lint.mjs +1 -1
- package/tests/skill_menu_ruling.mjs +1 -1
- package/tests/skill_preflight.mjs +7 -7
- package/tests/skip_is_not_pass.mjs +22 -1
- package/tests/smoke_dependencies_witness.mjs +2 -2
- package/tests/smoke_preflight.mjs +1 -1
- package/tests/smoke_target.mjs +2 -2
- package/tests/smoke_write_contract.mjs +2 -2
- package/tests/sound_player.mjs +8 -8
- package/tests/source_text_test_ratchet.mjs +97 -0
- package/tests/speciality_corpus_scope.mjs +1 -1
- package/tests/speciality_session_skills.mjs +1 -1
- package/tests/sso_checkin_legacy_field_gone.mjs +4 -2
- package/tests/stale_timer.mjs +3 -3
- package/tests/stale_worktrees.mjs +1 -1
- package/tests/start_env_guard.mjs +1 -1
- package/tests/start_goal_first.mjs +3 -3
- package/tests/start_inbox_count.mjs +1 -1
- package/tests/start_rebase_warning.mjs +1 -1
- package/tests/status_default_version.mjs +3 -3
- package/tests/status_mirror_sync.mjs +1 -1
- package/tests/status_page_no_dead_uptime.mjs +80 -0
- package/tests/stop_refcheck.mjs +1 -1
- package/tests/strand_watch.mjs +1 -1
- package/tests/stranded_rows.mjs +1 -1
- package/tests/stuck_detector.mjs +14 -14
- package/tests/sweep_app_account.mjs +3 -3
- package/tests/task_cli.mjs +2 -2
- package/tests/task_detail_ui.mjs +11 -1
- package/tests/task_discipline_required.mjs +2 -2
- package/tests/task_list_paging.mjs +1 -1
- package/tests/task_visual_slots.mjs +2 -2
- package/tests/terms_acceptance.mjs +1 -1
- package/tests/terms_grandfather_db.mjs +1 -1
- package/tests/test_path_guard.mjs +1 -1
- package/tests/triage_development.mjs +1 -1
- package/tests/tweak_batch_apply.mjs +2 -2
- package/tests/tweak_land_heal.mjs +3 -3
- package/tests/tweak_unattended.mjs +3 -3
- package/tests/ui_design_skills.mjs +2 -2
- package/tests/unit_report_status.mjs +2 -2
- package/tests/unit_runner_serial.mjs +2 -2
- package/tests/unit_runner_teardown_abort.mjs +1 -1
- package/tests/update_channel.mjs +2 -2
- package/tests/update_channel_db.mjs +4 -4
- package/tests/update_subscription_engine.mjs +26 -26
- package/tests/update_sweep_home.mjs +14 -14
- package/tests/upgrade.mjs +11 -11
- package/tests/upgrade_artist_gate.mjs +4 -4
- package/tests/upgrade_commit_identity.mjs +2 -2
- package/tests/upgrade_migrate.mjs +7 -7
- package/tests/upgrade_operator.mjs +2 -2
- package/tests/upgrade_outcome.mjs +2 -2
- package/tests/upgrade_persist_pin.mjs +5 -5
- package/tests/upkeep_home.mjs +1 -1
- package/tests/version_close.mjs +2 -2
- package/tests/version_close_cli.mjs +2 -2
- package/tests/version_close_route.mjs +1 -1
- package/tests/version_literals.mjs +23 -23
- package/tests/visual_review.mjs +5 -5
- package/tests/wedge_remedy.mjs +5 -5
- package/tests/welcome_boot.mjs +116 -0
- package/tests/welcome_boot_browser.mjs +271 -0
- package/tests/wizard_born_first_board.mjs +3 -3
- package/tests/wizard_demo.mjs +1 -1
- package/tests/wizard_one_page.mjs +4 -3
- package/tests/wizard_physics.mjs +3 -1
- package/tests/wizard_physics_more.mjs +42 -3
- package/tests/work_title_wrap.mjs +1 -1
- package/tests/workflow_exec_paths.mjs +6 -6
- package/tests/worktree_claim_guard.mjs +1 -1
- package/tests/worktree_helper.mjs +2 -2
- package/tests/write_validation_gaps.mjs +3 -3
- package/scripts/gds/api.sh +0 -6
- package/scripts/gds/audit-exports.js +0 -128
- package/scripts/gds/resolve-skill-model.js +0 -57
- package/scripts/gds/security-baseline-check.sh +0 -180
- package/scripts/gds/spike-task-map.js +0 -899
- package/scripts/status-probe.mjs +0 -213
- package/src/bongos/uptime-poller.js +0 -93
- package/tests/government_fold_bench.mjs +0 -50
- package/tests/spike_task_map.mjs +0 -422
- package/tests/status-probe.mjs +0 -89
- /package/{scripts/gds → modules/raise}/CLAUDE.md +0 -0
- /package/scripts/{gds → bongos}/cloudbongos-token-isolation.conf +0 -0
- /package/scripts/{gds → bongos}/discipline-modes.json +0 -0
- /package/scripts/{gds → bongos}/retired-core-skills.json +0 -0
package/scripts/gds/claim.js
CHANGED
|
@@ -1,789 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
//
|
|
3
|
-
//
|
|
4
|
-
//
|
|
5
|
-
//
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
// builder knows the parallel-safety boundary they're working within.
|
|
9
|
-
|
|
10
|
-
const { execSync } = require('node:child_process');
|
|
11
|
-
const path = require('node:path');
|
|
12
|
-
const { cliClient, requireSession, fmtTouches, printOnboardingNudge, rewardPolicy, costPlusOnlyNote, detectWorktreeName, cliExit } = require('./cli-lib');
|
|
13
|
-
const { nextNumbers, padAdr, padMig } = require('./next-number');
|
|
14
|
-
const { CORE_NS } = require('./migration-namespace');
|
|
15
|
-
const { contextPack, formatContextPack, resolveWorktreeRoot } = require('./context-pack');
|
|
16
|
-
const { printClaimRecall } = require('./claim-recall');
|
|
17
|
-
const { decideWorktreeClaim, ESCAPE_FLAG } = require('./worktree-claim-guard');
|
|
18
|
-
const { plainCardLines } = require('./plain-cards');
|
|
19
|
-
// task 1003153 — the DEAD dependency edge, one definition shared with the route
|
|
20
|
-
// and the detector. A lifecycle CLI may require the lifecycle module directly
|
|
21
|
-
// (the documented exception in modules/lifecycle/CLAUDE.md).
|
|
22
|
-
const { splitDeadDeps, deadDepHint } = require('../../modules/lifecycle/dead-deps.js');
|
|
23
|
-
const { visualReviewNudge } = require('./visual-review-nudge');
|
|
24
|
-
|
|
25
|
-
// Fetch up to 3 learnings relevant to the task being claimed. touches[] cleanup
|
|
26
|
-
// [3/8] (task 878): key off the task's discipline + title (always present) rather
|
|
27
|
-
// than its predicted touches[] — touches[] is becoming an optional advisory
|
|
28
|
-
// (#882) and is often empty at claim time, which silently emptied the old lookup.
|
|
29
|
-
// Silent on empty result, errors, or missing endpoint — this is a UX nice-to-have
|
|
30
|
-
// and must never break the claim flow.
|
|
31
|
-
// Returns the dedup keys of the learnings it printed, so the claim-time recall
|
|
32
|
-
// surface (#956) can drop any source it would otherwise echo. Empty array on any
|
|
33
|
-
// miss — the caller treats that as "nothing to exclude".
|
|
34
|
-
async function printRelevantLearnings(task) {
|
|
35
|
-
const discipline = task && task.discipline;
|
|
36
|
-
const title = task && task.title;
|
|
37
|
-
if (!discipline && !title) return [];
|
|
38
|
-
try {
|
|
39
|
-
const query = {};
|
|
40
|
-
if (discipline) query.discipline = String(discipline);
|
|
41
|
-
if (title) query.title = String(title);
|
|
42
|
-
const api = await cliClient();
|
|
43
|
-
const r = await api.learnings.getLearnings({ query });
|
|
44
|
-
if (r.status !== 200 || !r.data || !Array.isArray(r.data.learnings)) return [];
|
|
45
|
-
const rows = r.data.learnings.slice(0, 3);
|
|
46
|
-
if (rows.length === 0) return [];
|
|
47
|
-
console.log(`\n📚 Relevant learnings (${rows.length}):`);
|
|
48
|
-
const shownKeys = [];
|
|
49
|
-
for (const L of rows) {
|
|
50
|
-
const ref = L.source_ref || L.source || (Array.isArray(L.related_files) && L.related_files[0]) || `#${L.id}`;
|
|
51
|
-
console.log(` - ${L.title} (${ref})`);
|
|
52
|
-
shownKeys.push(`ref:${String(ref).toLowerCase()}`);
|
|
53
|
-
if (L.title) shownKeys.push(`title:${String(L.title).toLowerCase()}`);
|
|
54
|
-
}
|
|
55
|
-
return shownKeys;
|
|
56
|
-
} catch (_) {
|
|
57
|
-
// swallow — never block a successful claim on a learnings lookup
|
|
58
|
-
return [];
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
// The claimed task's craft (task 1267; pack-aware since 1002990; INJECTED since
|
|
63
|
-
// 1002992). The directive itself — which role pack or skill this craft works
|
|
64
|
-
// from — no longer prints here: GET /me carries it on the active claim and the
|
|
65
|
-
// Conductor relays it on the session's next prompt (src/bongos/craft-mode.js), so
|
|
66
|
-
// it reaches the session whether or not anyone read the claim output. What stays
|
|
67
|
-
// is ONE role indicator line, and the side effect that must happen where the claim
|
|
68
|
-
// happens: landing the mode's module-owned skills (materializeModeSkills below).
|
|
69
|
-
//
|
|
70
|
-
// Reads the registry beside this CLI (the file fitness.js hard-fails on when a
|
|
71
|
-
// pack is missing), through the same helper the server uses. Fail-open in every
|
|
72
|
-
// branch: a missing or invalid map, or a discipline with no entry, prints nothing
|
|
73
|
-
// and never breaks a successful claim.
|
|
74
|
-
function printRoleLine(task) {
|
|
75
|
-
let mode = null;
|
|
76
|
-
try {
|
|
77
|
-
const discipline = task && task.discipline;
|
|
78
|
-
if (!discipline) return;
|
|
79
|
-
const { readModes, roleLine } = require('../../src/bongos/craft-mode');
|
|
80
|
-
mode = readModes(path.join(__dirname, 'discipline-modes.json'))[discipline] || null;
|
|
81
|
-
if (!mode || !mode.directive) return;
|
|
82
|
-
console.log('');
|
|
83
|
-
console.log(roleLine(mode));
|
|
84
|
-
} catch (_) {
|
|
85
|
-
// never let the role line break a successful claim
|
|
86
|
-
return;
|
|
87
|
-
}
|
|
88
|
-
materializeModeSkills(mode);
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// A task brings its own tools (task 1003486). A mode whose entry opts in with
|
|
92
|
-
// `materializeModuleSkills` lands the module-owned skills its playbook names — for
|
|
93
|
-
// `ui`, the ui-design taste kit /design sends the session to use — into THIS
|
|
94
|
-
// checkout's .claude/skills/, as the untracked, self-ignored copies ADR 0224 defined.
|
|
95
|
-
// Without it a builder is routed to /design, reads that impeccable and minimalist-ui
|
|
96
|
-
// are the tools, and finds none of them on the machine with no error saying why.
|
|
97
|
-
// Carried by the claim rather than a hook or a session start because a workbench is
|
|
98
|
-
// not re-provisioned every session (owner decision 2026-09-02): it runs only when
|
|
99
|
-
// someone actually claims work of that discipline.
|
|
100
|
-
//
|
|
101
|
-
// Fail-open in every branch, like the hint above it: the server already granted the
|
|
102
|
-
// claim, so nothing here may throw past this point — a failure prints the one command
|
|
103
|
-
// that does it by hand. The require is lazy so a claim of any other discipline never
|
|
104
|
-
// pays for loading the materialiser (and a broken materialiser cannot stop a claim).
|
|
105
|
-
function materializeModeSkills(mode) {
|
|
106
|
-
if (!mode || mode.materializeModuleSkills !== true) return;
|
|
107
|
-
try {
|
|
108
|
-
const { materializeModuleSkillsIntoCore, isCoreCheckoutRoot } = require('./claude-materialize');
|
|
109
|
-
const coreRoot = path.resolve(__dirname, '..', '..');
|
|
110
|
-
if (!isCoreCheckoutRoot(coreRoot)) return; // a scaffolded instance already has them from `bongos init`
|
|
111
|
-
const s = materializeModuleSkillsIntoCore({ coreRoot });
|
|
112
|
-
const n = s.materialized.length;
|
|
113
|
-
if (n) console.log(` ✓ ${n} module-owned skill(s) for this mode are in .claude/skills/ (untracked copies — ADR 0224).`);
|
|
114
|
-
} catch (e) {
|
|
115
|
-
console.log(` ⚠ could not land this mode's module-owned skills — run \`node scripts/gds/claude-materialize.js --module-skills-only\` (${e && e.message}).`);
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
// task 1002579 — the I/O half of the worktree-per-claim guard. Probes the tree
|
|
120
|
-
// with resolveWorktreeRoot (the same signal the context pack and skill-preflight
|
|
121
|
-
// read, so there is one answer to "is this the main checkout") plus the current
|
|
122
|
-
// branch, hands both to the pure decision, prints it, and exits 2 on a refusal.
|
|
123
|
-
// Every probe failure degrades to isMainCheckout=null, which the decision treats
|
|
124
|
-
// as allow — a guard that cannot see the tree must never block a real claim.
|
|
125
|
-
function enforceWorktreeClaim(taskId, { allowMainCheckout }) {
|
|
126
|
-
let tree = { isMainCheckout: null };
|
|
127
|
-
let branch = null;
|
|
128
|
-
try {
|
|
129
|
-
const runGit = (a) => execSync(`git ${a.join(' ')}`, { encoding: 'utf8', stdio: ['ignore', 'pipe', 'ignore'] });
|
|
130
|
-
tree = resolveWorktreeRoot({ runGit, cwd: process.cwd() });
|
|
131
|
-
branch = runGit(['rev-parse', '--abbrev-ref', 'HEAD']).trim() || null;
|
|
132
|
-
} catch (_) {
|
|
133
|
-
/* fail-open: an unclassifiable tree is allowed through */
|
|
134
|
-
}
|
|
135
|
-
const d = decideWorktreeClaim({
|
|
136
|
-
isMainCheckout: tree.isMainCheckout,
|
|
137
|
-
branch,
|
|
138
|
-
allowMainCheckout,
|
|
139
|
-
taskId,
|
|
140
|
-
});
|
|
141
|
-
if (d.verdict === 'allow') return tree;
|
|
142
|
-
for (const line of d.lines) console.error(line);
|
|
143
|
-
if (d.verdict === 'refuse') {
|
|
144
|
-
for (const line of plainCardLines('main_checkout_claim')) console.error(line);
|
|
145
|
-
process.exit(2);
|
|
146
|
-
}
|
|
147
|
-
console.error('');
|
|
148
|
-
return tree;
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
// task 1002592 — a failed worktree DETECTION reaches the builder disguised as a
|
|
152
|
-
// claim CONFLICT, and that disguise is the whole of the original bug report.
|
|
153
|
-
// When detectWorktreeName() yields nothing the claim goes up with
|
|
154
|
-
// worktree_name: null; the server's one-active-claim guard keys on the WORKING
|
|
155
|
-
// TREE, so an unnamed claim falls back to the per-session compare and a
|
|
156
|
-
// genuinely-parallel worktree is refused as a duplicate. The builder then hunts
|
|
157
|
-
// for a claim conflict that does not exist.
|
|
158
|
-
//
|
|
159
|
-
// Only speak when null is WRONG. In the main checkout null is the documented
|
|
160
|
-
// correct answer and the refusal is genuine, so a note there would send the next
|
|
161
|
-
// reader down precisely the wrong path — that distinction is the fix, not a
|
|
162
|
-
// detail of it.
|
|
163
|
-
function worktreeDetectionNote(ctx, taskId) {
|
|
164
|
-
// The caller must have actually PROBED the tree. Without that this cannot tell
|
|
165
|
-
// "detection failed" from "nobody looked", and guessing would hang a worktree
|
|
166
|
-
// warning on every refusal rendered by a caller that never had tree info —
|
|
167
|
-
// including every pre-existing one. Absence of knowledge is not evidence.
|
|
168
|
-
if (!ctx || !('worktree' in ctx)) return [];
|
|
169
|
-
const { worktree, isMainCheckout } = ctx;
|
|
170
|
-
if (worktree) return []; // named fine — the refusal is genuine
|
|
171
|
-
if (isMainCheckout === true) return []; // null is correct here
|
|
172
|
-
const why = isMainCheckout === false
|
|
173
|
-
? 'this IS a linked worktree, so a name was expected'
|
|
174
|
-
: 'this tree is not recognisable as the main checkout either';
|
|
175
|
-
return [
|
|
176
|
-
` ⚠ This session could not name its worktree — auto-detect returned nothing, and ${why}.`,
|
|
177
|
-
' An unnamed claim is compared per-SESSION instead of per-worktree, so a real parallel',
|
|
178
|
-
' worktree is refused as a duplicate. That is very likely what you are looking at, and',
|
|
179
|
-
' it is a path-detection problem, not a claim conflict. Name it explicitly to rule it out:',
|
|
180
|
-
` node scripts/gds/claim.js ${taskId} --worktree <name>`,
|
|
181
|
-
];
|
|
182
|
-
}
|
|
183
|
-
|
|
184
|
-
function captureHeadSha() {
|
|
185
|
-
try {
|
|
186
|
-
return execSync('git rev-parse HEAD', { encoding: 'utf8' }).trim();
|
|
187
|
-
} catch (_) {
|
|
188
|
-
return null;
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// Auto-detect this claim's worktree name when --worktree is omitted, so the
|
|
193
|
-
// server's one-active-claim guard (keyed on the WORKING TREE, not the shared auth
|
|
194
|
-
// session) can tell genuinely-parallel worktrees apart. The detector moved to
|
|
195
|
-
// cli-lib.js in task 1003767 — the ship path now needs the SAME answer to satisfy
|
|
196
|
-
// the resolve lock, and two copies drifting apart would strand a ship.
|
|
197
|
-
|
|
198
|
-
// task 1278: nudge (don't block) when this session's build scripts are behind
|
|
199
|
-
// origin/main. The completion cards + skills are CLI-script features that ride
|
|
200
|
-
// the LOCAL checkout, not the deployed server — a worktree branched from a stale
|
|
201
|
-
// main silently lacks them (the root cause behind the missing cards in session
|
|
202
|
-
// 1c1e12d7: claimed/shipped task 1274 on old scripts). Mirrors the ship's
|
|
203
|
-
// TOOLING_PATHSPECS preflight (ship-preflight-steps.js), but as a NUDGE — claiming on old scripts is fine, you
|
|
204
|
-
// just miss features. Strictly best-effort + fail-open (never break/slow a claim).
|
|
205
|
-
const STALE_TOOLING_DIRS = ['scripts/gds', 'src/bongos', '.claude/skills'];
|
|
206
|
-
function warnIfToolingStale() {
|
|
207
|
-
try {
|
|
208
|
-
// Quiet, timed, fail-open fetch so the diff reflects GitHub's main, not a
|
|
209
|
-
// stale local ref — catching a stale LOCAL main is the whole point.
|
|
210
|
-
try {
|
|
211
|
-
execSync('git fetch origin main', { stdio: 'ignore', timeout: 8000 });
|
|
212
|
-
} catch (_) {
|
|
213
|
-
return; // offline / no remote / detached — skip the nudge silently
|
|
214
|
-
}
|
|
215
|
-
// `...` (symmetric, merge-base) so the builder's OWN edits to these files
|
|
216
|
-
// don't trip it — only files where origin/main has moved ahead (same as ship.js).
|
|
217
|
-
const out = execSync(
|
|
218
|
-
`git diff --name-only HEAD...origin/main -- ${STALE_TOOLING_DIRS.join(' ')}`,
|
|
219
|
-
{ encoding: 'utf8', timeout: 8000 }
|
|
220
|
-
);
|
|
221
|
-
const stale = out.trim().split('\n').filter(Boolean);
|
|
222
|
-
if (stale.length === 0) return;
|
|
223
|
-
console.log('');
|
|
224
|
-
console.log(`⚠ Your build scripts are behind origin/main (${stale.length} file${stale.length === 1 ? '' : 's'} in ${STALE_TOOLING_DIRS.join(', ')}).`);
|
|
225
|
-
console.log(' Run `git merge origin/main` to pick up the latest — newer skills, fixes, and the in-feed completion cards.');
|
|
226
|
-
} catch (_) {
|
|
227
|
-
/* a freshness nudge must never break or slow a claim */
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
// task 1275: the CLAIMED stage of the deterministic lifecycle card — the SAME
|
|
232
|
-
// card the ship surfaces, here showing the scope (priority / estimate / touches /
|
|
233
|
-
// version) with the brief in the dropdown and the discipline session as the
|
|
234
|
-
// action. Best-effort: a claim card must never break a successful claim.
|
|
235
|
-
function printClaimCard(task, widgetsEnabled = true) {
|
|
236
|
-
try {
|
|
237
|
-
const shipCard = require('../../modules/lifecycle/ship-card');
|
|
238
|
-
const model = shipCard.buildCardModel({
|
|
239
|
-
stage: 'claimed',
|
|
240
|
-
taskId: task.id,
|
|
241
|
-
title: task.title,
|
|
242
|
-
description: task.description || '',
|
|
243
|
-
estMinutes: task.est_minutes != null ? Number(task.est_minutes) : null,
|
|
244
|
-
touchesCount: Array.isArray(task.touches) ? task.touches.length : null,
|
|
245
|
-
version: task.version_id,
|
|
246
|
-
kind: task.kind,
|
|
247
|
-
priority: task.priority,
|
|
248
|
-
discipline: task.discipline,
|
|
249
|
-
});
|
|
250
|
-
// task 1279: when the builder has widgets off, emitCard prints only the
|
|
251
|
-
// monospace card (no HTML written or relayed).
|
|
252
|
-
shipCard.emitCard(model, task.id, { widgetsEnabled });
|
|
253
|
-
} catch (_) { /* never block a claim on the card */ }
|
|
254
|
-
}
|
|
255
|
-
|
|
256
|
-
// task 1003138: the envelope/flat normalization from formatClaimFailure, pulled
|
|
257
|
-
// out so the goal-join flow reads the same { code, message, d } regardless of
|
|
258
|
-
// response shape. Pure + exported (tested through both consumers).
|
|
259
|
-
function claimErrorInfo(r) {
|
|
260
|
-
const errRaw = r && r.data ? r.data.error : undefined;
|
|
261
|
-
const isEnvelope = errRaw !== null && typeof errRaw === 'object';
|
|
262
|
-
return {
|
|
263
|
-
code: isEnvelope ? errRaw.code : errRaw,
|
|
264
|
-
message: isEnvelope ? errRaw.message : undefined,
|
|
265
|
-
// Structured fields live under .details in the envelope; fall back to the
|
|
266
|
-
// top-level body for the legacy flat shape (so both keep working).
|
|
267
|
-
d: { ...(r && r.data ? r.data : {}), ...((isEnvelope && errRaw.details) || {}) },
|
|
268
|
-
};
|
|
269
|
-
}
|
|
270
|
-
|
|
271
|
-
// task 1476: render a failed claim as GUIDANCE, not a raw object dump. The API
|
|
272
|
-
// returns the R01 error envelope (ADR 0116): { error: { code, message, details } }.
|
|
273
|
-
// Older paths returned a flat { error: 'CODE', ...fields } shape. claimErrorInfo
|
|
274
|
-
// normalizes BOTH — without it `r.data.error` is now an object (never === a
|
|
275
|
-
// string), so every branch below silently missed and the refusal printed as
|
|
276
|
-
// `[object Object]`. Pure (no console / no process.exit) + exported so it can be
|
|
277
|
-
// unit-tested against the real envelope shapes. Returns { lines, exit }.
|
|
278
|
-
//
|
|
279
|
-
// task 1002592: server-supplied prose (a task title, a flag reason, a hint) is
|
|
280
|
-
// echoed to the operator's terminal by the branches below. It is our own API, so
|
|
281
|
-
// this is hygiene rather than a live threat — but an unbounded string can carry
|
|
282
|
-
// control characters that repaint a terminal, and a runaway one can bury the
|
|
283
|
-
// guidance it was meant to add. Clip to one line, strip C0/C1 controls, cap length.
|
|
284
|
-
const MAX_LISTED_TASKS = 20;
|
|
285
|
-
|
|
286
|
-
// QUEUE_GATED_EXIT — the one refusal that is about the QUEUE, not the task
|
|
287
|
-
// (task 1004396). REBASE_REQUIRED refuses every claim until a stranded confirmed
|
|
288
|
-
// task lands, so an unattended caller that reads it as "this task is refused"
|
|
289
|
-
// sets aside task after task for a fault none of them has. Every other refusal
|
|
290
|
-
// keeps exit 1. The autobongos runner is the consumer and pins the same value
|
|
291
|
-
// in a test.
|
|
292
|
-
const QUEUE_GATED_EXIT = 4;
|
|
293
|
-
function clip(s, max = 160) {
|
|
294
|
-
if (s == null) return '';
|
|
295
|
-
// eslint-disable-next-line no-control-regex
|
|
296
|
-
const flat = String(s).replace(/[\u0000--]+/g, ' ').trim();
|
|
297
|
-
return flat.length > max ? `${flat.slice(0, max - 1)}…` : flat;
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
// task 1002592: `ctx` carries what the CALLER knows about the tree
|
|
301
|
-
// ({ worktree, isMainCheckout }) so the session-claim branch can tell a real
|
|
302
|
-
// conflict apart from a failed worktree detection. Optional and defaulted — the
|
|
303
|
-
// function stays pure and every existing caller/test keeps working.
|
|
304
|
-
function formatClaimFailure(r, taskId, ctx) {
|
|
305
|
-
const info = claimErrorInfo(r);
|
|
306
|
-
const { lines, exit } = claimFailureGuidance(info, r, taskId, ctx);
|
|
307
|
-
// task 1003989: the same refusal in plain words, AFTER the curated text so nothing
|
|
308
|
-
// an engineer relies on moves. The owed-task gate names a flagged reason per task;
|
|
309
|
-
// the first one is translated too, because that token is what a builder is stuck on.
|
|
310
|
-
const { code, d } = info;
|
|
311
|
-
const owed = code === 'REBASE_REQUIRED' ? (d.rebaseTasks || d.rebase_tasks || []) : [];
|
|
312
|
-
const flagged = owed.length ? plainCardLines(String(owed[0].reason || '')) : [];
|
|
313
|
-
return { lines: [...lines, ...plainCardLines(code), ...flagged], exit };
|
|
314
|
-
}
|
|
315
|
-
|
|
316
|
-
function claimFailureGuidance({ code, message, d }, r, taskId, ctx) {
|
|
317
|
-
const lines = [];
|
|
318
|
-
|
|
319
|
-
// #766: a generic onboarding stage gate (kept rendering cleanly, not as raw JSON).
|
|
320
|
-
if (code === 'stage_required') {
|
|
321
|
-
lines.push(`Task #${taskId} can't be claimed yet.`);
|
|
322
|
-
lines.push(` ${d.what_to_do || `Clear "${d.required_stage_label || d.required_stage}" first.`}`);
|
|
323
|
-
return { lines, exit: 1 };
|
|
324
|
-
}
|
|
325
|
-
// task 1476 (the core case): a session may hold at most ONE active claim
|
|
326
|
-
// (task 1642 / ADR 0097). This is the most common refusal and previously fell
|
|
327
|
-
// straight through to the raw dump — the exact "reads like you can't hold more
|
|
328
|
-
// than one task" complaint from idea 218. Surface it as guidance AND teach how
|
|
329
|
-
// to parallelize (a separate worktree/session per task, or the hall bulk-claim).
|
|
330
|
-
if (code === 'session_already_has_active_claim' || code === 'session_claim_check_failed') {
|
|
331
|
-
const n = d.active_task_id;
|
|
332
|
-
lines.push(n
|
|
333
|
-
? `This session already holds task #${n}${d.active_task_title ? `: ${d.active_task_title}` : ''}.`
|
|
334
|
-
: 'This session already holds an active claim.');
|
|
335
|
-
lines.push(` ${d.what_to_do || (n
|
|
336
|
-
? `Run /builder-ship ${n} (or /builder-release ${n}) first, or open a fresh worktree/session for this task.`
|
|
337
|
-
: 'Ship or release the in-flight claim, or start a fresh worktree/session.')}`);
|
|
338
|
-
lines.push(' One claim per session keeps each ship isolated (task 1642). To work tasks in PARALLEL, open a separate worktree/session per task — each holds its own single claim — or use the hall work board’s multi-select bulk-claim.');
|
|
339
|
-
lines.push(...worktreeDetectionNote(ctx, taskId));
|
|
340
|
-
return { lines, exit: 1 };
|
|
341
|
-
}
|
|
342
|
-
if (code === 'newcomer_must_ship_first') {
|
|
343
|
-
lines.push(`Task #${taskId} can't be claimed yet — your first work isn't shipped.`);
|
|
344
|
-
lines.push(` You're holding an active claim on #${d.active_task_id}: ${d.active_task_title}`);
|
|
345
|
-
lines.push(` ${d.what_to_do || 'Ship or release the current claim first.'}`);
|
|
346
|
-
return { lines, exit: 1 };
|
|
347
|
-
}
|
|
348
|
-
// task 1002589: the per-session DB backstop index tripped. Distinct from
|
|
349
|
-
// session_already_has_active_claim (the route guard's own refusal): since
|
|
350
|
-
// core_204 (task 1002570) the index keys per (session, worktree) —
|
|
351
|
-
// matching the guard — so this mainly surfaces the same-tree race the guard
|
|
352
|
-
// couldn't see, or fires on a DB still carrying the migration-180
|
|
353
|
-
// session-only index. Either way the target task itself is NOT taken — never
|
|
354
|
-
// render this as "claimed by another session".
|
|
355
|
-
if (code === 'session_already_has_bound_claim') {
|
|
356
|
-
const n = d.active_task_id;
|
|
357
|
-
lines.push(n
|
|
358
|
-
? `Task #${taskId} is still free — but this session already holds a bound claim on #${n}${d.active_task_title ? `: ${d.active_task_title}` : ''}.`
|
|
359
|
-
: `Task #${taskId} is still free — but this session already holds a bound claim on another task.`);
|
|
360
|
-
lines.push(` ${d.what_to_do || `Run /builder-ship ${n || '<task>'} (or /builder-release ${n || '<task>'}) first, claim from a separate worktree, or claim with {"bind_session":false} (an unbound claim always coexists).`}`);
|
|
361
|
-
return { lines, exit: 1 };
|
|
362
|
-
}
|
|
363
|
-
// task 1002592: ADR 0120 part 3's owed-rebase gate refuses EVERY new claim, so
|
|
364
|
-
// it is the refusal a builder is most stuck behind — and it was the only one
|
|
365
|
-
// with no branch here, printing as a bare `[REBASE_REQUIRED]: REBASE_REQUIRED`
|
|
366
|
-
// code echo. The server builds a full way-forward menu for it
|
|
367
|
-
// (rebaseRequiredHint, task 1003768 — /strand-fix leads because it is the one
|
|
368
|
-
// exit that works with no GitHub push credential, the DOCUMENTED default
|
|
369
|
-
// posture) and this surface dropped it on the floor. Name the owed tasks, then
|
|
370
|
-
// print the server's menu.
|
|
371
|
-
if (code === 'REBASE_REQUIRED') {
|
|
372
|
-
// task 1004788: only the fixable ones gate; set-aside ones are listed apart.
|
|
373
|
-
const all = (d.rebaseTasks || d.rebase_tasks || []);
|
|
374
|
-
const owed = all.filter((t) => !t.waiting).slice(0, MAX_LISTED_TASKS);
|
|
375
|
-
const waiting = all.filter((t) => t.waiting).slice(0, MAX_LISTED_TASKS);
|
|
376
|
-
lines.push(owed.length
|
|
377
|
-
? `Your queue is gated — ${owed.length} confirmed task(s) are waiting on your rebase:`
|
|
378
|
-
: 'Your queue is gated — a confirmed task is waiting on your rebase.');
|
|
379
|
-
for (const t of owed) {
|
|
380
|
-
lines.push(` - task ${t.id}${t.title ? ` ${clip(t.title)}` : ''}`);
|
|
381
|
-
if (t.reason) lines.push(` flagged: ${clip(t.reason)}`);
|
|
382
|
-
}
|
|
383
|
-
if (waiting.length) lines.push(' Waiting, not on you (set aside; they land on their own):');
|
|
384
|
-
for (const t of waiting) lines.push(` - task ${t.id}${t.title ? ` ${clip(t.title)}` : ''} — ${clip(t.waits_on || t.reason || 'outside you')}`);
|
|
385
|
-
lines.push(` ${clip(d.hint, 600) || 'Clear it with /strand-fix N, or rebase the branch and re-ship — or /builder-release it to give up on one.'}`);
|
|
386
|
-
return { lines, exit: QUEUE_GATED_EXIT };
|
|
387
|
-
}
|
|
388
|
-
if (code === 'ALREADY_CLAIMED') {
|
|
389
|
-
lines.push(`Task #${taskId} was just claimed by another session. Try a different task.`);
|
|
390
|
-
return { lines, exit: 1 };
|
|
391
|
-
}
|
|
392
|
-
if (code === 'MODULE_CONFLICT') {
|
|
393
|
-
lines.push(`Task #${taskId} has module_key='${d.module_key}', but another active claim already owns that module:`);
|
|
394
|
-
for (const t of d.conflictTaskTitles || []) lines.push(` - ${t}`);
|
|
395
|
-
lines.push('Two tasks in the same module cannot run concurrently. Ship or release the in-flight claim first.');
|
|
396
|
-
return { lines, exit: 1 };
|
|
397
|
-
}
|
|
398
|
-
if (code === 'TOUCHES_CONFLICT') {
|
|
399
|
-
lines.push(`Task #${taskId} touches files currently in flight on another claim:`);
|
|
400
|
-
for (const t of d.conflictTaskTitles || []) lines.push(` - ${t}`);
|
|
401
|
-
lines.push('Pick a task with disjoint touches[], or run it in a separate session once the other ships.');
|
|
402
|
-
return { lines, exit: 1 };
|
|
403
|
-
}
|
|
404
|
-
if (code === 'TASK_NOT_READY') {
|
|
405
|
-
lines.push(`Task #${taskId} is not ready (current status: ${d.currentStatus}).`);
|
|
406
|
-
if (d.hint) lines.push(` ${d.hint}`);
|
|
407
|
-
return { lines, exit: 1 };
|
|
408
|
-
}
|
|
409
|
-
if (code === 'TASK_NOT_FOUND') {
|
|
410
|
-
lines.push(`Task #${taskId} not found — check the id (run /builder-start to list claimable tasks).`);
|
|
411
|
-
return { lines, exit: 1 };
|
|
412
|
-
}
|
|
413
|
-
if (code === 'DEPS_NOT_SHIPPED') {
|
|
414
|
-
// task 1003153: an ABANDONED dependency can never ship, so "ship those
|
|
415
|
-
// first" was impossible advice — the task is STRANDED, not waiting. Mark the
|
|
416
|
-
// dead edges in the list and relay the server's hint (deadDepHint), which
|
|
417
|
-
// names the two real remedies. Falls back to the original wording when every
|
|
418
|
-
// unmet dep is genuinely still pending.
|
|
419
|
-
const dead = new Set(splitDeadDeps(d.deps).dead.map((x) => String(x.id)));
|
|
420
|
-
lines.push(dead.size
|
|
421
|
-
? `Task #${taskId} is STRANDED — a dependency was abandoned and can never satisfy:`
|
|
422
|
-
: `Task #${taskId} can't be claimed yet — these dependencies are not shipped:`);
|
|
423
|
-
for (const dep of d.deps || []) {
|
|
424
|
-
const flag = dead.has(String(dep.id)) ? ' ← ABANDONED: this edge will never satisfy' : '';
|
|
425
|
-
lines.push(` - #${dep.id} [${dep.status}] ${dep.title}${flag}`);
|
|
426
|
-
}
|
|
427
|
-
lines.push(d.hint || deadDepHint(d.deps, taskId) || 'Ship those first (or release them) and try again.');
|
|
428
|
-
return { lines, exit: 1 };
|
|
429
|
-
}
|
|
430
|
-
if (code === 'OPEN_BLOCKER') {
|
|
431
|
-
// task 1002650: the same rule the claimable feed enforces, spoken at the gate.
|
|
432
|
-
lines.push(`Task #${taskId} is waiting on an open blocker:`);
|
|
433
|
-
for (const b of d.blockers || []) lines.push(` - blocker ${b.id} ${b.title}`);
|
|
434
|
-
lines.push('Resolve it first (/blocker-solve N drives one to done; resolving auto-promotes its linked tasks) — or pick another task from /builder-start.');
|
|
435
|
-
return { lines, exit: 1 };
|
|
436
|
-
}
|
|
437
|
-
if (code === 'GOAL_MEMBERSHIP_REQUIRED') {
|
|
438
|
-
// task 1003138: the non-interactive rendering of the membership refusal —
|
|
439
|
-
// the interactive offer (runGoalJoinFlow) normally intercepts this code
|
|
440
|
-
// before it gets here; this branch covers a retry that re-refused, an
|
|
441
|
-
// unexpected body, or a decline.
|
|
442
|
-
lines.push(`Task #${taskId} lives in goal ${d.goal_id}${d.goal_title ? ` ("${d.goal_title}")` : ''}${d.visibility ? ` (${d.visibility})` : ''} — you are not a member.`);
|
|
443
|
-
lines.push(d.action === 'apply'
|
|
444
|
-
? ` Apply to join (POST /api/bongos/goals/${d.goal_id}/requests) — nothing can be claimed until an owner approves. Re-run with --join to file the application from here.`
|
|
445
|
-
: ` Join and claim in one command: node scripts/gds/claim.js ${taskId} --join`);
|
|
446
|
-
return { lines, exit: 1 };
|
|
447
|
-
}
|
|
448
|
-
// Fallback — still readable: the message + code, never a raw [object Object].
|
|
449
|
-
lines.push(`Claim failed (${r ? r.status : '?'})${code ? ` [${code}]` : ''}${message ? `: ${message}` : ''}.`);
|
|
450
|
-
// task 1002592: whatever the code, if the server sent a way forward, PRINT it.
|
|
451
|
-
// REBASE_REQUIRED sat in this fallback with a fully-formed hint in its body and
|
|
452
|
-
// nothing rendered it. The branches above stay the curated wording; this is the
|
|
453
|
-
// floor, so the next unmapped code can never be mute the same way.
|
|
454
|
-
if (d && d.hint) lines.push(` ${clip(d.hint, 600)}`);
|
|
455
|
-
return { lines, exit: 1 };
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
// task 1003138 (owner ask, verbatim: 'claude should offer to join so they dont
|
|
459
|
-
// need to go through the ui') — the goal-membership refusal (403
|
|
460
|
-
// GOAL_MEMBERSHIP_REQUIRED, the task-1003137 gate) is resolvable in-session.
|
|
461
|
-
// goalMembershipOfferPlan is the PURE half: given the refusal details it names
|
|
462
|
-
// the offer to make. Exported for unit tests; the I/O lives in runGoalJoinFlow.
|
|
463
|
-
// Returns null when the body is missing the fields the flow needs (falls back
|
|
464
|
-
// to formatClaimFailure), else { action, headerLines, question }.
|
|
465
|
-
function goalMembershipOfferPlan(d, taskId) {
|
|
466
|
-
if (!d || d.goal_id == null || (d.action !== 'join' && d.action !== 'apply')) return null;
|
|
467
|
-
const g = d.goal_id;
|
|
468
|
-
if (d.action === 'join') {
|
|
469
|
-
return {
|
|
470
|
-
action: 'join',
|
|
471
|
-
headerLines: [
|
|
472
|
-
`✗ Task ${taskId} lives in goal ${g}`,
|
|
473
|
-
...(d.goal_title ? [` "${d.goal_title}" (${d.visibility || 'public'})`] : []),
|
|
474
|
-
' You are not a member.',
|
|
475
|
-
],
|
|
476
|
-
question: `Join goal ${g} and claim? [Y/n] `,
|
|
477
|
-
};
|
|
478
|
-
}
|
|
479
|
-
// 'apply' — a private goal, or a public one whose scope is Archon-mediated
|
|
480
|
-
// (the server folds both to apply; a pending request grants nothing yet).
|
|
481
|
-
return {
|
|
482
|
-
action: 'apply',
|
|
483
|
-
headerLines: d.visibility === 'private'
|
|
484
|
-
? [`✗ Goal ${g} is private.`]
|
|
485
|
-
: [
|
|
486
|
-
`✗ Task ${taskId} lives in goal ${g}${d.goal_title ? ` ("${d.goal_title}")` : ''} — joining needs approval (Archon-mediated scope).`,
|
|
487
|
-
],
|
|
488
|
-
question: 'Apply to join? [Y/n] ',
|
|
489
|
-
};
|
|
490
|
-
}
|
|
491
|
-
|
|
492
|
-
// One yes/no on the real terminal (default yes — the owner-approved [Y/n]
|
|
493
|
-
// shape). Returns null when there is no TTY to ask — the caller then prints
|
|
494
|
-
// the --join re-run hint instead of hanging a non-interactive session.
|
|
495
|
-
async function promptYesNo(question) {
|
|
496
|
-
if (!process.stdin.isTTY) return null;
|
|
497
|
-
const readline = require('node:readline/promises');
|
|
498
|
-
const rl = readline.createInterface({ input: process.stdin, output: process.stderr });
|
|
499
|
-
try {
|
|
500
|
-
const a = (await rl.question(question)).trim().toLowerCase();
|
|
501
|
-
return a === '' || a === 'y' || a === 'yes';
|
|
502
|
-
} finally {
|
|
503
|
-
rl.close();
|
|
504
|
-
}
|
|
505
|
-
}
|
|
506
|
-
|
|
507
|
-
// The I/O half of the offer. Outcomes: 'retry' (joined — re-POST the claim),
|
|
508
|
-
// 'stop' (declined / filed / blocked — everything already printed, exit 1),
|
|
509
|
-
// 'unhandled' (fall through to formatClaimFailure). Never joins or files
|
|
510
|
-
// without a yes: --join is the standing yes for non-interactive sessions.
|
|
511
|
-
async function runGoalJoinFlow({ api, d, taskId, assumeYes }) {
|
|
512
|
-
const plan = goalMembershipOfferPlan(d, taskId);
|
|
513
|
-
if (!plan) return 'unhandled';
|
|
514
|
-
const goalId = d.goal_id;
|
|
515
|
-
for (const line of plan.headerLines) console.error(line);
|
|
516
|
-
|
|
517
|
-
const yes = assumeYes ? true : await promptYesNo(plan.question);
|
|
518
|
-
if (yes === null) {
|
|
519
|
-
// Non-interactive (an agent session): make the one-command path explicit.
|
|
520
|
-
console.error(plan.action === 'join'
|
|
521
|
-
? ` To join goal ${goalId} and claim in one command: node scripts/gds/claim.js ${taskId} --join`
|
|
522
|
-
: ` To file the application from here: node scripts/gds/claim.js ${taskId} --join (nothing claimable until approved)`);
|
|
523
|
-
return 'stop';
|
|
524
|
-
}
|
|
525
|
-
if (!yes) {
|
|
526
|
-
// The owner chose the explicit-join model — declining leaves NO membership
|
|
527
|
-
// row and NO request.
|
|
528
|
-
console.error(plan.action === 'join'
|
|
529
|
-
? ' Declined — nothing joined, nothing claimed.'
|
|
530
|
-
: ' Declined — no application filed, nothing claimed.');
|
|
531
|
-
return 'stop';
|
|
532
|
-
}
|
|
533
|
-
|
|
534
|
-
if (plan.action === 'join') {
|
|
535
|
-
const jr = await api.goals.postGoalsIdJoin({ id: goalId, body: {} });
|
|
536
|
-
if (jr.status === 200 || jr.status === 201) {
|
|
537
|
-
console.error(`+ joined goal ${goalId} (member)`);
|
|
538
|
-
return 'retry';
|
|
539
|
-
}
|
|
540
|
-
const j = claimErrorInfo(jr);
|
|
541
|
-
if (j.code === 'archon_approval_required') {
|
|
542
|
-
// The third branch, handled honestly (routes/goals.js:615): a PUBLIC goal
|
|
543
|
-
// with protected scope is not self-joinable — don't loop, name the path.
|
|
544
|
-
console.error(`✗ Goal ${goalId}'s scope is Archon-mediated — self-join is not allowed.`);
|
|
545
|
-
console.error(` Request to join instead: node scripts/gds/claim.js ${taskId} --join (after the server re-offers apply), or ask an Archon to add you.`);
|
|
546
|
-
return 'stop';
|
|
547
|
-
}
|
|
548
|
-
if (j.code === 'goal_private') {
|
|
549
|
-
// Visibility flipped between refusal and join — report, don't loop.
|
|
550
|
-
console.error(`✗ Goal ${goalId} is private now — request to join (POST /api/bongos/goals/${goalId}/requests) and wait for approval.`);
|
|
551
|
-
return 'stop';
|
|
552
|
-
}
|
|
553
|
-
console.error(`✗ join failed (${jr.status})${j.code ? ` [${j.code}]` : ''}${j.message ? `: ${j.message}` : ''}.`);
|
|
554
|
-
return 'stop';
|
|
555
|
-
}
|
|
556
|
-
|
|
557
|
-
// 'apply' — file the request; a pending row grants nothing, so never retry
|
|
558
|
-
// the claim here.
|
|
559
|
-
const ar = await api.goals.postGoalsIdRequests({ id: goalId, body: {} });
|
|
560
|
-
if (ar.status === 201) {
|
|
561
|
-
console.error('+ request filed — pending owner approval');
|
|
562
|
-
console.error(' (nothing to claim until approved)');
|
|
563
|
-
return 'stop';
|
|
564
|
-
}
|
|
565
|
-
const a = claimErrorInfo(ar);
|
|
566
|
-
if (a.code === 'request_pending') {
|
|
567
|
-
// The core_188 partial-unique: one pending ask per goal per builder —
|
|
568
|
-
// re-running reports, it does not error.
|
|
569
|
-
console.error('• already pending — your earlier request for this goal awaits owner approval.');
|
|
570
|
-
console.error(' (nothing to claim until approved)');
|
|
571
|
-
return 'stop';
|
|
572
|
-
}
|
|
573
|
-
console.error(`✗ application failed (${ar.status})${a.code ? ` [${a.code}]` : ''}${a.message ? `: ${a.message}` : ''}.`);
|
|
574
|
-
return 'stop';
|
|
575
|
-
}
|
|
576
|
-
|
|
577
|
-
async function main() {
|
|
578
|
-
const args = process.argv.slice(2);
|
|
579
|
-
const taskId = Number(args[0]);
|
|
580
|
-
if (!Number.isFinite(taskId)) {
|
|
581
|
-
console.error('usage: node scripts/gds/claim.js <task-id> [--worktree NAME] [--enforce-touches] [--join] [--here]');
|
|
582
|
-
process.exit(2);
|
|
583
|
-
}
|
|
584
|
-
// task 1002579: worktree-per-claim, enforced BEFORE anything happens — before
|
|
585
|
-
// the session check, before the POST. The whole point is that the builder
|
|
586
|
-
// learns at claim time, not from a stranded ship hours later.
|
|
587
|
-
const tree = enforceWorktreeClaim(taskId, { allowMainCheckout: args.includes(ESCAPE_FLAG) });
|
|
588
|
-
await requireSession();
|
|
589
|
-
const wIdx = args.indexOf('--worktree');
|
|
590
|
-
// Explicit --worktree always wins; otherwise auto-detect a linked worktree so
|
|
591
|
-
// parallel worktrees off one login each hold their own claim (the server guard
|
|
592
|
-
// keys on this). null in the main checkout → unchanged one-claim behaviour.
|
|
593
|
-
const worktree = (wIdx >= 0 ? args[wIdx + 1] : null) || detectWorktreeName();
|
|
594
|
-
// touches[] cleanup [5/8] (task 880): touches[] overlap with another active
|
|
595
|
-
// claim is ADVISORY for an interactive human claim (just a warning — git merge
|
|
596
|
-
// is the real collision detector). The autonomous --parallel runner passes
|
|
597
|
-
// --enforce-touches so adjacency becomes a HARD refusal (it fans concurrent
|
|
598
|
-
// unsupervised agents that could clobber each other on shared files).
|
|
599
|
-
const enforceTouches = args.includes('--enforce-touches');
|
|
600
|
-
// task 1003138: --join is the standing yes to the goal-membership offer —
|
|
601
|
-
// join (public) or file the application (private/protected) and, for a join,
|
|
602
|
-
// retry the claim, all in one command. Without it an interactive session is
|
|
603
|
-
// asked [Y/n]; a non-TTY session is shown the --join re-run line.
|
|
604
|
-
const assumeYes = args.includes('--join');
|
|
605
|
-
const headSha = captureHeadSha();
|
|
606
|
-
|
|
607
|
-
const api = await cliClient();
|
|
608
|
-
const postClaim = () => api.claims.postClaims({
|
|
609
|
-
body: {
|
|
610
|
-
task_id: taskId,
|
|
611
|
-
worktree_name: worktree,
|
|
612
|
-
head_sha: headSha,
|
|
613
|
-
enforce_touches: enforceTouches,
|
|
614
|
-
// --auto-pickup (task 1004679, ADR 0371 D5): the Autobongos tweak lane's mark.
|
|
615
|
-
...(args.includes('--auto-pickup') ? { auto_pickup: true } : {}),
|
|
616
|
-
},
|
|
617
|
-
});
|
|
618
|
-
let r = await postClaim();
|
|
619
|
-
// task 1003138: a goal-membership refusal (the task-1003137 gate) is
|
|
620
|
-
// resolvable in-session — offer the join/application, and on a successful
|
|
621
|
-
// join retry the claim ONCE (a second refusal falls through to the plain
|
|
622
|
-
// rendering; never loop).
|
|
623
|
-
if (r.status !== 201 && claimErrorInfo(r).code === 'GOAL_MEMBERSHIP_REQUIRED') {
|
|
624
|
-
const outcome = await runGoalJoinFlow({ api, d: claimErrorInfo(r).d, taskId, assumeYes });
|
|
625
|
-
if (outcome === 'retry') {
|
|
626
|
-
r = await postClaim();
|
|
627
|
-
} else if (outcome === 'stop') {
|
|
628
|
-
return cliExit(1); // everything already printed; no claim landed
|
|
629
|
-
}
|
|
630
|
-
}
|
|
631
|
-
if (r.status === 201) {
|
|
632
|
-
const { claim, task } = r.data;
|
|
633
|
-
console.log(`Claimed task #${task.id}: ${task.title}`);
|
|
634
|
-
console.log(`Claim id: ${claim.id}`);
|
|
635
|
-
// The reward figure is the task's ADVERTISED estimate. On a cost-plus-only
|
|
636
|
-
// instance it is never paid, so label it as an estimate and name the real
|
|
637
|
-
// payer right here — this line is where the expectation forms (task 1002469).
|
|
638
|
-
const rewardLabel = rewardPolicy(r.data.reward).perTaskCredit ? 'Credit reward' : 'Credit reward (est. only)';
|
|
639
|
-
console.log(`Version: ${task.version_id} · Priority: P${task.priority ?? '?'} · ${rewardLabel}: ${task.credits_reward}`);
|
|
640
|
-
const cpNote = costPlusOnlyNote(r.data.reward);
|
|
641
|
-
if (cpNote) console.log(` ${cpNote}`);
|
|
642
|
-
if (task.parallel_safe === true) console.log('Parallel-safe: yes (eligible for a parallel autonomous slot)');
|
|
643
|
-
// BV1.R53 (task 1422): module_key is the primary scope signal. touches[] is
|
|
644
|
-
// demoted to derived/advisory for module-keyed tasks; fall back to it for
|
|
645
|
-
// tasks that predate module affinity.
|
|
646
|
-
if (task.module_key) {
|
|
647
|
-
console.log(`Module scope: ${task.module_key} → modules/${task.module_key}/`);
|
|
648
|
-
console.log(' Build within that directory tree. Files outside it will trigger a drift warning at ship time.');
|
|
649
|
-
} else {
|
|
650
|
-
console.log(`Touches: ${fmtTouches(task.touches)}`);
|
|
651
|
-
// touches[] cleanup [7/8] (task 882): the planning field is optional now.
|
|
652
|
-
// If none was declared, it'll be backfilled from the real diff at ship.
|
|
653
|
-
if (!Array.isArray(task.touches) || task.touches.length === 0) {
|
|
654
|
-
console.log(' (no touches declared — backfilled from your committed diff at ship; build where the work leads)');
|
|
655
|
-
}
|
|
656
|
-
}
|
|
657
|
-
// touches[] cleanup [5/8] (task 880): advisory overlap notice. The claim
|
|
658
|
-
// succeeded; this is a heads-up that another active claim declares
|
|
659
|
-
// overlapping files. Self-serialize only if it's genuinely the same code.
|
|
660
|
-
if (Array.isArray(r.data.overlap_warning) && r.data.overlap_warning.length > 0) {
|
|
661
|
-
console.log(`\n⚠ touches[] overlaps an active claim: ${r.data.overlap_warning.join(', ')}`);
|
|
662
|
-
console.log(' Advisory only — your claim stands; git merge is the authoritative collision check.');
|
|
663
|
-
}
|
|
664
|
-
// task 1001741: goal-aware — an unclaimed OPEN sibling in the same goal
|
|
665
|
-
// declares overlapping files. Same advisory posture as above.
|
|
666
|
-
if (Array.isArray(r.data.sibling_overlap_warning) && r.data.sibling_overlap_warning.length > 0) {
|
|
667
|
-
console.log('\n⚠ touches[] overlaps open sibling task(s) in this goal:');
|
|
668
|
-
for (const s of r.data.sibling_overlap_warning) {
|
|
669
|
-
console.log(` #${s.task_id} ${s.title} — ${s.overlapping_paths.join(', ')}`);
|
|
670
|
-
}
|
|
671
|
-
console.log(' Advisory only — a goal owner can sequence or rescope these from the goal page.');
|
|
672
|
-
}
|
|
673
|
-
for (const ach of (r.data.just_unlocked || [])) {
|
|
674
|
-
const bonus = ach.credit_bonus > 0 ? ` (+${ach.credit_bonus}c bonus)` : '';
|
|
675
|
-
console.log(`✨ Achievement unlocked: ${ach.name}${bonus}`);
|
|
676
|
-
}
|
|
677
|
-
// task 1278: surface a stale-scripts nudge early, so the builder can merge
|
|
678
|
-
// main before diving in (and pick up newer skills + the completion cards).
|
|
679
|
-
warnIfToolingStale();
|
|
680
|
-
// Claim-time context pack (V4.R26 / #964): the AUTHORITATIVE next-free ADR +
|
|
681
|
-
// migration numbers, computed deterministically from origin/main ∪ the local
|
|
682
|
-
// working tree (next-number.js). This supersedes blind trust in the drift-prone
|
|
683
|
-
// claim-time DB counter, which has handed out already-applied numbers and now
|
|
684
|
-
// sits ahead of the committed files. Best-effort — never break a claim.
|
|
685
|
-
let nn = null;
|
|
686
|
-
try { nn = nextNumbers(); } catch { /* fail-open: skip the hint */ }
|
|
687
|
-
if (nn) {
|
|
688
|
-
console.log(`\nNext free numbers (from ${nn.source} ∪ local):`);
|
|
689
|
-
console.log(` ADR: ${padAdr(nn.adr)} → docs/adr/${padAdr(nn.adr)}-<slug>.md`);
|
|
690
|
-
// New core migrations are namespaced core_ (ADR 0108 §5) so a stem can't collide with an
|
|
691
|
-
// instance/module migration across repos; instance seeds stay bare in migrations/instance/.
|
|
692
|
-
console.log(` migration: ${padMig(nn.migration)} → migrations/${CORE_NS}_${padMig(nn.migration)}_<slug>.sql (core; instance seed → migrations/instance/${padMig(nn.migration)}_<slug>.sql bare)`);
|
|
693
|
-
if (nn.degraded) console.log(' ⚠ origin/main unreachable — recompute with `node scripts/gds/next-number.js` before committing.');
|
|
694
|
-
}
|
|
695
|
-
if (claim.reserved_migration_number != null) {
|
|
696
|
-
const padded = String(claim.reserved_migration_number).padStart(3, '0');
|
|
697
|
-
// The DB counter still reserves a number (parallel-claim arbitration), but
|
|
698
|
-
// it can drift; if it disagrees with the file-derived next-free, trust the
|
|
699
|
-
// file-derived one (it reflects what is actually committed/applied).
|
|
700
|
-
const driftNote = nn && nn.migration !== claim.reserved_migration_number
|
|
701
|
-
? ` ⚠ DB counter reserved ${padded}, but ${padMig(nn.migration)} is the next free on origin/main — use ${padMig(nn.migration)}.`
|
|
702
|
-
: ' (No other parallel claim can be allocated this number.)';
|
|
703
|
-
console.log(`\nMigration counter reserved: ${padded}`);
|
|
704
|
-
console.log(driftNote);
|
|
705
|
-
}
|
|
706
|
-
// Claim-time context pack (V4.R04 / #942, criterion sessions-start-knowing).
|
|
707
|
-
// Fetch /me ONCE here — it gives the builder's currently-held claims for the
|
|
708
|
-
// pack, and is reused for the onboarding nudge at the end. Best-effort: the
|
|
709
|
-
// pack is a UX surface and a /me hiccup must never break a successful claim.
|
|
710
|
-
let meRes = null;
|
|
711
|
-
try {
|
|
712
|
-
const api = await cliClient();
|
|
713
|
-
meRes = await api.me.getMe();
|
|
714
|
-
} catch (_) { /* fail-open */ }
|
|
715
|
-
try {
|
|
716
|
-
const activeClaims = (meRes && meRes.ok && meRes.data)
|
|
717
|
-
? (meRes.data.active_claims || (meRes.data.active_claim ? [meRes.data.active_claim] : []))
|
|
718
|
-
: [];
|
|
719
|
-
console.log('');
|
|
720
|
-
console.log(formatContextPack(contextPack({ activeClaims, currentTaskId: task.id })));
|
|
721
|
-
} catch (_) { /* never block a claim on the pack */ }
|
|
722
|
-
if (task.description) {
|
|
723
|
-
console.log('');
|
|
724
|
-
console.log(task.description);
|
|
725
|
-
}
|
|
726
|
-
// The craft's role line (and, for a mode that opts in, its module-owned
|
|
727
|
-
// skills). The full directive reaches the session through the Conductor —
|
|
728
|
-
// task 1002992.
|
|
729
|
-
printRoleLine(task);
|
|
730
|
-
// task 1004202: a task that changes a page is told to use /design and get its
|
|
731
|
-
// human's OK on the before/after. A nudge, never a gate: gating on that OK would
|
|
732
|
-
// put a person's approval in the land path, which ADR 0162 retired.
|
|
733
|
-
try {
|
|
734
|
-
const nudge = visualReviewNudge(task);
|
|
735
|
-
if (nudge) console.log(`\n${nudge.join('\n')}`);
|
|
736
|
-
} catch (_) { /* never let a hint break a successful claim */ }
|
|
737
|
-
if (worktree) console.log(`\nWorktree: ${worktree}`);
|
|
738
|
-
// Claim-time knowledge (#956 / V4.R18, criterion sessions-start-knowing):
|
|
739
|
-
// learnings first (curated, short), then the top recall sources for this task
|
|
740
|
-
// (ADR 0060 search layer), deduped against the learnings just shown. Both are
|
|
741
|
-
// best-effort and never block the claim.
|
|
742
|
-
const shownLearningKeys = await printRelevantLearnings(task);
|
|
743
|
-
await printClaimRecall(task, { excludeKeys: shownLearningKeys });
|
|
744
|
-
console.log('\nWhen you finish:');
|
|
745
|
-
console.log(` node scripts/gds/ship.js ${task.id} --notes "..." --summary "..."`);
|
|
746
|
-
console.log('Or to abandon:');
|
|
747
|
-
console.log(` node scripts/gds/release.js ${task.id}`);
|
|
748
|
-
// V3.R13 (#237): post-claim nudge — for a newcomer, this becomes
|
|
749
|
-
// "Next: Ship thy first work" so the path forward is visible. Reuses the
|
|
750
|
-
// /me fetched above for the context pack (no second round-trip).
|
|
751
|
-
try {
|
|
752
|
-
if (meRes && meRes.ok) {
|
|
753
|
-
console.log('');
|
|
754
|
-
printOnboardingNudge(meRes.data);
|
|
755
|
-
}
|
|
756
|
-
} catch (_) {
|
|
757
|
-
// never let a UX nudge break a successful claim
|
|
758
|
-
}
|
|
759
|
-
// task 1275: the claimed lifecycle card, last so it's the visual anchor.
|
|
760
|
-
// task 1279: honour the builder's render-widgets knob (resolved from the /me
|
|
761
|
-
// fetched above; default ON if /me was unavailable).
|
|
762
|
-
const widgetsEnabled = meRes && meRes.ok ? (meRes.data?.render?.widgets_enabled !== false) : true;
|
|
763
|
-
printClaimCard(task, widgetsEnabled);
|
|
764
|
-
return;
|
|
765
|
-
}
|
|
766
|
-
// Any non-201 comes here. formatClaimFailure normalizes the R01 error envelope
|
|
767
|
-
// and renders the refusal as guidance (task 1476) — one place, unit-tested.
|
|
768
|
-
const failure = formatClaimFailure(r, taskId, {
|
|
769
|
-
worktree,
|
|
770
|
-
isMainCheckout: tree ? tree.isMainCheckout : null,
|
|
771
|
-
});
|
|
772
|
-
for (const line of failure.lines) console.error(line);
|
|
773
|
-
// task 1002592: this exit runs immediately after the claim request, which is
|
|
774
|
-
// exactly where Windows aborts teardown — "Assertion failed: !(handle->flags &
|
|
775
|
-
// UV_HANDLE_CLOSING)" — turning a refusal's intended exit 1 into 127. Measured
|
|
776
|
-
// 3/3 aborting before this change. Set the code, let the loop drain (1002734).
|
|
777
|
-
cliExit(failure.exit);
|
|
778
|
-
}
|
|
779
|
-
|
|
780
|
-
// Only auto-run when invoked directly (`node claim.js …`); a `require()` (the
|
|
781
|
-
// unit test) just imports formatClaimFailure without executing the claim flow.
|
|
782
|
-
if (require.main === module) {
|
|
783
|
-
main().catch((err) => {
|
|
784
|
-
console.error('fatal:', err);
|
|
785
|
-
cliExit(1);
|
|
786
|
-
});
|
|
787
|
-
}
|
|
788
|
-
|
|
789
|
-
module.exports = { formatClaimFailure, claimErrorInfo, goalMembershipOfferPlan, materializeModeSkills, printRoleLine, worktreeDetectionNote, QUEUE_GATED_EXIT };
|
|
2
|
+
// scripts/gds/claim.js — @bongos-forwarder (task 1004848). Generated by
|
|
3
|
+
// scripts/bongos/codemod-rename-scripts-gds.js; do not edit.
|
|
4
|
+
// The real script is scripts/bongos/claim.js. This forwarder keeps callers that still name
|
|
5
|
+
// the old path working, and warns once so they get repointed. Task 1003706 removes it.
|
|
6
|
+
'use strict';
|
|
7
|
+
require('../bongos/forwarder.js').forward(module, 'claim.js');
|