@bongos/core 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.bongos-core.json +5727 -0
- package/.claude/skills/blocker-review/SKILL.md +91 -0
- package/.claude/skills/blocker-solve/SKILL.md +96 -0
- package/.claude/skills/builder-backup/SKILL.md +54 -0
- package/.claude/skills/builder-box/SKILL.md +45 -0
- package/.claude/skills/builder-claim/SKILL.md +76 -0
- package/.claude/skills/builder-connect/SKILL.md +59 -0
- package/.claude/skills/builder-cost/SKILL.md +47 -0
- package/.claude/skills/builder-end/SKILL.md +81 -0
- package/.claude/skills/builder-exit/SKILL.md +88 -0
- package/.claude/skills/builder-key/SKILL.md +40 -0
- package/.claude/skills/builder-reauth/SKILL.md +50 -0
- package/.claude/skills/builder-redteam/SKILL.md +109 -0
- package/.claude/skills/builder-release/SKILL.md +41 -0
- package/.claude/skills/builder-setup/SKILL.md +62 -0
- package/.claude/skills/builder-ship/SKILL.md +79 -0
- package/.claude/skills/builder-stage/SKILL.md +51 -0
- package/.claude/skills/builder-start/SKILL.md +46 -0
- package/.claude/skills/close-box/SKILL.md +43 -0
- package/.claude/skills/design-sync/SKILL.md +69 -0
- package/.claude/skills/dev/SKILL.md +49 -0
- package/.claude/skills/feedback/SKILL.md +32 -0
- package/.claude/skills/figma-design-sync/SKILL.md +74 -0
- package/.claude/skills/goal-review/SKILL.md +89 -0
- package/.claude/skills/idea-triage/SKILL.md +144 -0
- package/.claude/skills/ideate/SKILL.md +82 -0
- package/.claude/skills/merge-mode/SKILL.md +169 -0
- package/.claude/skills/new-project/SKILL.md +108 -0
- package/.claude/skills/otb-character-review/SKILL.md +71 -0
- package/.claude/skills/otb-design-review/SKILL.md +47 -0
- package/.claude/skills/otb-feedback-capture/SKILL.md +45 -0
- package/.claude/skills/otb-figma-sync/SKILL.md +54 -0
- package/.claude/skills/otb-tile-generate/SKILL.md +45 -0
- package/.claude/skills/paint/SKILL.md +70 -0
- package/.claude/skills/planning-session/SKILL.md +299 -0
- package/.claude/skills/priority-session/SKILL.md +134 -0
- package/.claude/skills/read-session-export/SKILL.md +58 -0
- package/.claude/skills/recall/SKILL.md +52 -0
- package/.claude/skills/session-handoff/SKILL.md +46 -0
- package/.claude/skills/status/SKILL.md +33 -0
- package/.devcontainer/Dockerfile +69 -0
- package/.devcontainer/README.md +73 -0
- package/.devcontainer/devcontainer-lock.json +19 -0
- package/.devcontainer/devcontainer.json +93 -0
- package/.devcontainer/healthcheck.sh +84 -0
- package/.devcontainer/init-firewall.sh +198 -0
- package/.devcontainer/post-create.sh +153 -0
- package/.dockerignore +36 -0
- package/.env.local.example +32 -0
- package/.gitattributes +83 -0
- package/.gitignore +91 -0
- package/CLAUDE.md +242 -0
- package/CODE_OF_CONDUCT.md +46 -0
- package/CONTRIBUTING.md +51 -0
- package/Dockerfile +46 -0
- package/GOVERNANCE.md +44 -0
- package/LICENSE +661 -0
- package/README.md +88 -0
- package/bin/bongos.js +222 -0
- package/clients/bongos-client/README.md +48 -0
- package/clients/bongos-client/bongos-client.global.js +617 -0
- package/clients/bongos-client/examples/hello-world.mjs +62 -0
- package/clients/bongos-client/index.cjs +619 -0
- package/clients/bongos-client/index.d.ts +793 -0
- package/clients/bongos-client/index.mjs +614 -0
- package/clients/bongos-client/package.json +32 -0
- package/config/branding.neutral.json +60 -0
- package/config/design-tokens.neutral.json +51 -0
- package/config/design-tokens.schema.json +96 -0
- package/config/modules.neutral.json +9 -0
- package/docker-compose.yml +52 -0
- package/docker-entrypoint.sh +30 -0
- package/docs/adr/0001-stack-choice-single-vps.md +45 -0
- package/docs/adr/0002-digitalocean-over-hetzner.md +27 -0
- package/docs/adr/0003-cloudflare-origin-cert-over-letsencrypt.md +35 -0
- package/docs/adr/0004-amazonprimea-name-and-trademark-acceptance.md +45 -0
- package/docs/adr/0005-invisible-other-players-in-v1.md +37 -0
- package/docs/adr/0006-singleton-worldroom-plus-queueroom.md +30 -0
- package/docs/adr/0007-persistent-identity-via-localstorage-uuid.md +31 -0
- package/docs/adr/0008-family-based-tile-generation.md +86 -0
- package/docs/adr/0008-google-chat-oauth-user-auth.md +37 -0
- package/docs/adr/0009-autotile-architecture.md +181 -0
- package/docs/adr/0010-pms-architecture.md +70 -0
- package/docs/adr/0011-terrain-id-rendering-model.md +174 -0
- package/docs/adr/0012-ground-object-cell-split.md +208 -0
- package/docs/adr/0013-paths-as-object-overlays-with-autotile-dispatch.md +158 -0
- package/docs/adr/0014-families-canonical-over-vocabulary.md +103 -0
- package/docs/adr/0015-task-dependencies-and-auto-promotion.md +125 -0
- package/docs/adr/0016-trust-boundary-server-enforced-permissions.md +132 -0
- package/docs/adr/0017-code-simplification-and-repo-cleanliness.md +74 -0
- package/docs/adr/0018-three-rank-model-goes-live.md +97 -0
- package/docs/adr/0019-red-team-bounty-payout-table.md +52 -0
- package/docs/adr/0020-security-model-public-stub.md +70 -0
- package/docs/adr/0021-per-builder-skill-model-preferences.md +99 -0
- package/docs/adr/0022-secrets-policy.md +124 -0
- package/docs/adr/0023-kind-multipliers-and-idea-bonus.md +118 -0
- package/docs/adr/0024-cloneable-repo-local-first-memory.md +277 -0
- package/docs/adr/0024-multi-agent-system-architecture.md +125 -0
- package/docs/adr/0025-offsite-backup-vendor-digitalocean-spaces.md +59 -0
- package/docs/adr/0025-structured-criterion-task-link.md +44 -0
- package/docs/adr/0026-bfg-memory-hygiene-and-cross-builder-learning.md +117 -0
- package/docs/adr/0027-bfg-session-inefficiency-evaluator.md +170 -0
- package/docs/adr/0028-honest-llm-spend-accounting.md +109 -0
- package/docs/adr/0029-status-page-outage-resilience.md +59 -0
- package/docs/adr/0030-builders-hall-live-updates.md +59 -0
- package/docs/adr/0031-cloud-dev-environments-for-builders.md +222 -0
- package/docs/adr/0032-discord-mirror-of-gds.md +50 -0
- package/docs/adr/0033-discord-bot-service-principal.md +82 -0
- package/docs/adr/0034-thetes-graduated-newcomer-rank.md +53 -0
- package/docs/adr/0035-builder-onboarding-three-paths.md +128 -0
- package/docs/adr/0036-builders-subdomain-and-ui-reorg.md +40 -0
- package/docs/adr/0037-discord-channel-management.md +51 -0
- package/docs/adr/0038-chromebook-ttyd-cloudflare-tunnel.md +111 -0
- package/docs/adr/0039-setup-first-onboarding-ux.md +49 -0
- package/docs/adr/0040-remote-control-default-browser-onramp.md +47 -0
- package/docs/adr/0041-temporary-grader-bypass-killswitch.md +40 -0
- package/docs/adr/0042-builder-self-deploy-ci-auto-merge.md +82 -0
- package/docs/adr/0043-git-ssh-trust-boundary-and-rank-floor-on-permission-paths.md +74 -0
- package/docs/adr/0044-mediterranean-palette-replacement.md +73 -0
- package/docs/adr/0044-per-box-live-game-preview.md +57 -0
- package/docs/adr/0045-devbox-desktop-app.md +133 -0
- package/docs/adr/0046-sandbox-first-review-gate.md +72 -0
- package/docs/adr/0047-discord-bugs-intake-anti-abuse.md +36 -0
- package/docs/adr/0048-works-in-progress-ia-split.md +32 -0
- package/docs/adr/0049-split-parallel-safety-contract.md +46 -0
- package/docs/adr/0050-device-flow-admission-invite-gated-by-default.md +43 -0
- package/docs/adr/0051-full-session-transcript-corpus.md +57 -0
- package/docs/adr/0052-sandbox-for-everyone-game-only-preview.md +70 -0
- package/docs/adr/0053-scoped-dev-box-session.md +55 -0
- package/docs/adr/0054-session-token-reward-cost-plus.md +63 -0
- package/docs/adr/0055-server-mediated-branch-publish.md +47 -0
- package/docs/adr/0056-prod-deploy-script-mirror-and-healthcheck-retry.md +62 -0
- package/docs/adr/0057-container-cost-ledger.md +28 -0
- package/docs/adr/0057-discord-archon-approval-channels.md +64 -0
- package/docs/adr/0058-automatic-gate-surface-gatekeeper.md +64 -0
- package/docs/adr/0059-single-approval-remove-devbox-approval-gate.md +37 -0
- package/docs/adr/0060-gds-retrieval-layer.md +97 -0
- package/docs/adr/0061-context-layer-decomposition.md +61 -0
- package/docs/adr/0062-medusa-instance-model-decoupling.md +107 -0
- package/docs/adr/0063-generated-repo-map-symbol-skeleton.md +44 -0
- package/docs/adr/0064-rename-medusa-to-cloud-bongos.md +49 -0
- package/docs/adr/0065-agpl-nonprofit-ai-first-governance.md +69 -0
- package/docs/adr/0066-generated-file-map-sections.md +51 -0
- package/docs/adr/0067-session-start-fast-forward-pull.md +43 -0
- package/docs/adr/0068-shared-art-key-for-newcomers.md +38 -0
- package/docs/adr/0069-hall-live-channel-sse-decouple.md +35 -0
- package/docs/adr/0070-deterministic-session-card-delivery.md +44 -0
- package/docs/adr/0071-box-confirm-before-destroyed-and-drift-reconcile.md +59 -0
- package/docs/adr/0072-bongos-app-mac-signed-first-windows-deferred.md +35 -0
- package/docs/adr/0072-dev-box-code-staleness-visibility.md +39 -0
- package/docs/adr/0073-builder-needs-signal-and-byok-gemini-key.md +64 -0
- package/docs/adr/0073-secrets-scan-exclude-uri-detector.md +37 -0
- package/docs/adr/0074-memory-map-stays-light.md +32 -0
- package/docs/adr/0075-per-system-cost-attribution.md +37 -0
- package/docs/adr/0076-in-session-deterministic-compaction.md +58 -0
- package/docs/adr/0077-content-addressed-llm-cache.md +32 -0
- package/docs/adr/0078-deterministic-first-cron.md +48 -0
- package/docs/adr/0079-value-gated-autonomous-engagement.md +39 -0
- package/docs/adr/0080-llm-cache-api-transport-and-trust-model.md +46 -0
- package/docs/adr/0081-tool-agnostic-design-layer.md +62 -0
- package/docs/adr/0082-productized-key-storage-provisioning.md +32 -0
- package/docs/adr/0082-server-side-merge-conflict-auto-resolution.md +55 -0
- package/docs/adr/0083-modular-architecture-strangler-build-plan.md +143 -0
- package/docs/adr/0084-auto-derived-per-task-rank-floor.md +86 -0
- package/docs/adr/0085-remove-default-per-builder-spend-cap.md +39 -0
- package/docs/adr/0086-goal-scoped-work-hierarchy.md +123 -0
- package/docs/adr/0087-bongos-app-architecture-and-handoff-contract.md +49 -0
- package/docs/adr/0087-compete-on-governance-not-tooling-cursor.md +65 -0
- package/docs/adr/0088-consistent-character-generative-animation.md +169 -0
- package/docs/adr/0089-modular-multi-model-adversarial-grader.md +179 -0
- package/docs/adr/0090-metic-task-authoring.md +73 -0
- package/docs/adr/0091-bounding-the-kernel-and-db-carve.md +106 -0
- package/docs/adr/0092-hosting-module-and-on-prem-target.md +117 -0
- package/docs/adr/0093-tranche-2-core-carve-sequence.md +72 -0
- package/docs/adr/0094-repo-atlas-self-drawing-codebase-map.md +49 -0
- package/docs/adr/0095-borrowed-memory-and-retrieval-concepts.md +65 -0
- package/docs/adr/0095-cross-agent-context-management.md +58 -0
- package/docs/adr/0096-require-reward-before-workable.md +209 -0
- package/docs/adr/0097-one-active-claim-per-session-and-worktree-binding.md +46 -0
- package/docs/adr/0097-retroactive-reward-backfill.md +124 -0
- package/docs/adr/0098-public-mirror-publish-manifest.md +92 -0
- package/docs/adr/0099-delayed-redacted-mirror-export.md +55 -0
- package/docs/adr/0100-two-repo-instance-model.md +60 -0
- package/docs/adr/0101-goal-hierarchy-phase-5-judge-membership-reward.md +90 -0
- package/docs/adr/0102-finish-bounding-the-kernel.md +36 -0
- package/docs/adr/0103-core-first-extraction-cloud-bongos-trunk.md +70 -0
- package/docs/adr/0103-gdsv4-bongos-consolidation.md +28 -0
- package/docs/adr/0104-trust-gds-api-channel-in-auto-mode.md +42 -0
- package/docs/adr/0105-instance-seed-migrations-out-of-core.md +47 -0
- package/docs/adr/0106-goal-owner-manager-authority.md +84 -0
- package/docs/adr/0107-module-upstreaming-contribution-to-core-catalog.md +83 -0
- package/docs/adr/0108-instance-composition-configurable-root.md +87 -0
- package/docs/adr/0109-self-describing-openapi-and-hosted-docs.md +44 -0
- package/docs/adr/0110-untrack-whole-file-generated-nav-docs.md +49 -0
- package/docs/adr/0111-instance-hosting-provisioning-module.md +135 -0
- package/docs/adr/0112-private-goals-invitations-join-requests.md +72 -0
- package/docs/adr/0113-sandbox-studio-descope-superseded-by-0044-0052.md +41 -0
- package/docs/adr/0114-instance-docs-discovery-contract.md +32 -0
- package/docs/adr/0115-scheduled-routines-portability.md +31 -0
- package/docs/adr/0116-api-error-envelope-and-code-taxonomy.md +62 -0
- package/docs/adr/0117-api-versioning-and-deprecation-policy.md +50 -0
- package/docs/adr/0118-api-contract-source-of-truth-code-first.md +47 -0
- package/docs/adr/0119-api-pagination-contract.md +34 -0
- package/docs/adr/0120-pay-on-land-and-builder-owned-rebase-gate.md +108 -0
- package/docs/adr/0121-greenfield-vs-brownfield-onboarding-adopt-existing-repo.md +97 -0
- package/docs/adr/0122-onboarding-diagram-renders-deploy-rendered-off-git.md +43 -0
- package/docs/adr/0123-box-idle-sweep-autosave-before-destroy.md +36 -0
- package/docs/adr/0124-typed-api-response-bodies.md +37 -0
- package/docs/adr/0125-control-plane-scaffolds-standalone-instance-repo.md +36 -0
- package/docs/adr/0126-dedicated-cloudbongos-control-plane-droplet.md +30 -0
- package/docs/adr/0127-cross-box-fleet-observability.md +64 -0
- package/docs/adr/0128-provisioning-runner-privilege-and-db-auth-model.md +46 -0
- package/docs/adr/0129-cloudbongos-control-plane-pull-deploy.md +34 -0
- package/docs/adr/0130-provision-remote-exec-over-ssh.md +61 -0
- package/docs/adr/0131-rank-scoped-skill-visibility.md +47 -0
- package/docs/adr/0132-cohost-fleet-control-plane-migration.md +54 -0
- package/docs/adr/0133-github-app-manifest-onboarding-signin.md +42 -0
- package/docs/adr/0134-private-first-npm-distribution.md +38 -0
- package/docs/adr/README.md +208 -0
- package/docs/api/openapi.json +13720 -0
- package/docs/api-reference.md +437 -0
- package/docs/architecture.md +244 -0
- package/docs/branding-contract.md +66 -0
- package/docs/branding-fill-prompt.md +25 -0
- package/docs/canonical-permissions.md +241 -0
- package/docs/design/container-exterior-tiles.md +49 -0
- package/docs/design/container-exterior.md +81 -0
- package/docs/design/container-interior.md +77 -0
- package/docs/design/modular-architecture/00-research-report.md +107 -0
- package/docs/design/modular-architecture/01-architecture.md +125 -0
- package/docs/design/modular-architecture/02-module-map.md +116 -0
- package/docs/design/modular-architecture/03-builder-flows.md +104 -0
- package/docs/design/modular-architecture/04-module-lifecycle.md +62 -0
- package/docs/design/modular-architecture/README.md +27 -0
- package/docs/design/vanilla-hall-ui-redesign-scope.md +284 -0
- package/docs/design/world-map-scroll.md +41 -0
- package/docs/design-contract.md +320 -0
- package/docs/file-map.md +418 -0
- package/docs/handoff-template.md +92 -0
- package/docs/modules-contract.md +293 -0
- package/docs/onboarding/browser-terminal-guide.md +73 -0
- package/docs/onboarding/diagrams/01-task-lifecycle.mmd +28 -0
- package/docs/onboarding/diagrams/02-rank-ladder.mmd +54 -0
- package/docs/onboarding/diagrams/03-drachmae-karma.mmd +37 -0
- package/docs/onboarding/diagrams/04-architecture.mmd +51 -0
- package/docs/onboarding/diagrams/05-versioning.mmd +29 -0
- package/docs/onboarding/diagrams/README.md +94 -0
- package/docs/onboarding/diagrams/assertions.json +170 -0
- package/docs/onboarding/diagrams/puppeteer-config.json +1 -0
- package/docs/onboarding/diagrams/render-config.json +9 -0
- package/docs/onboarding/drachmae-and-karma.md +178 -0
- package/docs/onboarding/primer.md +202 -0
- package/docs/project-context.template.md +67 -0
- package/docs/recipes/README.md +35 -0
- package/docs/recipes/audit-replay.md +100 -0
- package/docs/recipes/bongos-cli-release.md +66 -0
- package/docs/recipes/builder-box-lifecycle.md +152 -0
- package/docs/recipes/claude-design-loop.md +143 -0
- package/docs/recipes/claude-gemini-bongos-doors.md +155 -0
- package/docs/recipes/cloudbongos-staging-gate.md +139 -0
- package/docs/recipes/cloudbongos-standup.md +111 -0
- package/docs/recipes/devbox-app-release.md +93 -0
- package/docs/recipes/devbox-app-windows-test.md +128 -0
- package/docs/recipes/failed-ship-recovery-proof.md +102 -0
- package/docs/recipes/figma-design-loop.md +129 -0
- package/docs/recipes/gds-db-backup.md +255 -0
- package/docs/recipes/instance-deploy.md +37 -0
- package/docs/recipes/managed-settings-remote-control.md +416 -0
- package/docs/recipes/memory-backup.md +71 -0
- package/docs/recipes/memory-sync-conflicts.md +98 -0
- package/docs/recipes/multi-builder-merge.md +78 -0
- package/docs/recipes/ops-gotchas.md +212 -0
- package/docs/recipes/overnight-builder.md +53 -0
- package/docs/recipes/packaging-the-core.md +49 -0
- package/docs/recipes/parallel-load-results-2026-05-30.md +63 -0
- package/docs/recipes/parallel-load-test.md +32 -0
- package/docs/recipes/pixel-art-pipeline.md +411 -0
- package/docs/recipes/private-npm-distribution.md +79 -0
- package/docs/recipes/search-index-ingestion.md +67 -0
- package/docs/recipes/self-host.md +60 -0
- package/docs/recipes/ship-and-regrade.md +72 -0
- package/docs/recipes/staging-data.md +50 -0
- package/docs/recipes/staging-environment.md +215 -0
- package/docs/recipes/upgrading-the-core.md +58 -0
- package/docs/research/cursor-competitive-analysis.md +255 -0
- package/docs/research/llm-model-agnostic-and-cheaper-grader.md +227 -0
- package/migrations/003_pms.sql +284 -0
- package/migrations/004_pms_cost_idempotency.sql +13 -0
- package/migrations/005_pms_smoke_filter.sql +44 -0
- package/migrations/006_pms_v2.sql +378 -0
- package/migrations/007_pms_v2_hierarchy_trigger.sql +59 -0
- package/migrations/008_pms_v2_migration_allocator.sql +27 -0
- package/migrations/009_pms_v2_blockers_table.sql +68 -0
- package/migrations/010_uptime.sql +29 -0
- package/migrations/011_backfill_v2_v3_done_when.sql +20 -0
- package/migrations/012_pms_v2_task_lifecycle_states.sql +82 -0
- package/migrations/013_claim_locking.sql +22 -0
- package/migrations/014_pms_task_discipline.sql +86 -0
- package/migrations/015_pms_estimation_calibration.sql +140 -0
- package/migrations/016_pms_task_grades.sql +60 -0
- package/migrations/017_version_progress_exclude_abandoned.sql +49 -0
- package/migrations/019_rename_pms_v3_to_gds_v3.sql +65 -0
- package/migrations/020_task_dependencies.sql +99 -0
- package/migrations/021_v3_renumber_and_deps.sql +224 -0
- package/migrations/022_v3_reconcile_dep_gated_status.sql +41 -0
- package/migrations/023_pms_rank.sql +30 -0
- package/migrations/025_builder_exit_status.sql +15 -0
- package/migrations/027_builders_preferred_disciplines.sql +46 -0
- package/migrations/028_tasks_parallel_safe.sql +71 -0
- package/migrations/029_rank_three_live.sql +32 -0
- package/migrations/030_vulnerability_reports.sql +61 -0
- package/migrations/031_reward_simplification.sql +57 -0
- package/migrations/032_repo_health_snapshots.sql +56 -0
- package/migrations/033_audit_log.sql +64 -0
- package/migrations/034_lifecycle_breakdown_leaf_only.sql +62 -0
- package/migrations/035_auth_token_hygiene.sql +66 -0
- package/migrations/037_builder_skill_model_prefs.sql +44 -0
- package/migrations/038_task_override_requests.sql +51 -0
- package/migrations/039_newcomer_friendly_column.sql +124 -0
- package/migrations/040_builder_karma.sql +58 -0
- package/migrations/041_kind_multipliers_and_idea_bonus.sql +42 -0
- package/migrations/042_criterion_proposal_workflow.sql +78 -0
- package/migrations/043_builder_onboarding_observability.sql +66 -0
- package/migrations/044_tasks_requires_rank.sql +97 -0
- package/migrations/045_builder_onboarding_state.sql +147 -0
- package/migrations/046_cost_log_builder_attribution.sql +42 -0
- package/migrations/054_builder_memory.sql +108 -0
- package/migrations/055_task_criteria.sql +90 -0
- package/migrations/058_peer_votes.sql +41 -0
- package/migrations/059_onboarding_pick_disciplines.sql +59 -0
- package/migrations/060_access_requests.sql +46 -0
- package/migrations/061_backfill_override_ship_attribution.sql +29 -0
- package/migrations/062_session_records.sql +34 -0
- package/migrations/063_session_records_tool_errors_idx.sql +11 -0
- package/migrations/064_grade_attempts.sql +18 -0
- package/migrations/065_bfg_principal.sql +58 -0
- package/migrations/066_live_notify_triggers.sql +69 -0
- package/migrations/067_builder_boxes.sql +117 -0
- package/migrations/067_discord_bot_foundation.sql +69 -0
- package/migrations/068_thetes_requires_rank.sql +27 -0
- package/migrations/069_builder_ssh_keys.sql +66 -0
- package/migrations/070_box_intents.sql +101 -0
- package/migrations/071_box_first_provision_approval.sql +46 -0
- package/migrations/072_onboarding_ship_three_remove_primer.sql +80 -0
- package/migrations/073_box_terminal_access.sql +46 -0
- package/migrations/075_builder_sound_prefs.sql +28 -0
- package/migrations/078_box_claude_active.sql +22 -0
- package/migrations/079_box_first_connected_at.sql +20 -0
- package/migrations/081_tasks_needs_migration.sql +34 -0
- package/migrations/084_tasks_security_sensitive.sql +24 -0
- package/migrations/085_security_engagement_docs.sql +34 -0
- package/migrations/086_rename_disciplines.sql +125 -0
- package/migrations/088_builders_anthropic_link.sql +28 -0
- package/migrations/089_builders_monthly_budget.sql +19 -0
- package/migrations/090_box_scoped_sessions.sql +38 -0
- package/migrations/091_session_token_reward.sql +44 -0
- package/migrations/093_tasks_sandbox_review.sql +22 -0
- package/migrations/102_remove_box_first_provision_approval.sql +58 -0
- package/migrations/103_search_chunks.sql +90 -0
- package/migrations/104_builder_box_blocked.sql +34 -0
- package/migrations/105_box_host_keys.sql +35 -0
- package/migrations/111_medusa_customer0_framing.sql +35 -0
- package/migrations/112_drop_track_check.sql +25 -0
- package/migrations/113_merge_lease.sql +16 -0
- package/migrations/114_cloudbongos_rename_live_strings.sql +32 -0
- package/migrations/118_currency_label_decoupling.sql +23 -0
- package/migrations/119_builder_behavior_prefs.sql +31 -0
- package/migrations/121_box_code_version.sql +37 -0
- package/migrations/122_builder_gemini_key.sql +30 -0
- package/migrations/123_cost_log_tiers.sql +33 -0
- package/migrations/124_cost_baseline.sql +45 -0
- package/migrations/125_llm_cache.sql +54 -0
- package/migrations/126_autonomy_runs.sql +33 -0
- package/migrations/143_cost_calibration.sql +63 -0
- package/migrations/145_backfill_task_requires_rank.sql +84 -0
- package/migrations/160_goal_tier.sql +88 -0
- package/migrations/163_polymorphic_dependencies.sql +187 -0
- package/migrations/164_event_sound_prefs.sql +20 -0
- package/migrations/165_task_module_key.sql +15 -0
- package/migrations/171_claims_published_head_sha.sql +24 -0
- package/migrations/174_close_orphaned_claims_on_terminal_tasks.sql +30 -0
- package/migrations/175_task_grades_diff_hash.sql +9 -0
- package/migrations/176_promotion_respects_open_blockers.sql +58 -0
- package/migrations/176_ui_discipline.sql +40 -0
- package/migrations/177_require_reward_before_workable.sql +76 -0
- package/migrations/178_reward_gate_auto_assign_revert_autopromote.sql +61 -0
- package/migrations/179_search_chunk_usefulness.sql +33 -0
- package/migrations/180_one_active_claim_per_session.sql +54 -0
- package/migrations/181_cost_log_skill_name.sql +33 -0
- package/migrations/184_claim_release_requested.sql +25 -0
- package/migrations/185_module_upstreaming_goal_wiring.sql +59 -0
- package/migrations/187_goal_sort_order.sql +30 -0
- package/migrations/187_tasks_kind_check_add_verify.sql +21 -0
- package/migrations/README.md +88 -0
- package/migrations/core_188_goal_visibility_and_membership_requests.sql +71 -0
- package/migrations/core_189_core_upgrades_ledger.sql +37 -0
- package/migrations/core_189_credit_log_task_id_index.sql +19 -0
- package/migrations/core_190_rebuild_claimable_task_views.sql +71 -0
- package/migrations/instance/018_pms_v3_planning_seed.sql +131 -0
- package/migrations/instance/080_gds_v4_planning_seed.sql +75 -0
- package/migrations/instance/110_medusa_planning_seed.sql +70 -0
- package/migrations/instance/120_bongos_v1_planning_seed.sql +69 -0
- package/migrations/instance/144_bongos_v1_module_system_criterion.sql +26 -0
- package/migrations/instance/159_bongos_v1_goal_hierarchy_criterion.sql +29 -0
- package/migrations/instance/172_v2_world_planning_seed.sql +163 -0
- package/migrations/instance/173_bongos_v1_c7_core_modularized.sql +33 -0
- package/migrations/instance/182_gdsv4_bongos_consolidation.sql +132 -0
- package/migrations/instance/183_gdsv4_carryover_themed_goals.sql +116 -0
- package/migrations/instance/186_bongos_v1_governance_planning_seed.sql +69 -0
- package/modules/autonomy/CLAUDE.md +49 -0
- package/modules/autonomy/db.js +50 -0
- package/modules/autonomy/module.json +13 -0
- package/modules/autonomy/pollers/routine-timers.js +146 -0
- package/modules/autonomy/routes/autonomy.js +37 -0
- package/modules/builder-settings/CLAUDE.md +58 -0
- package/modules/builder-settings/builder-needs.js +115 -0
- package/modules/builder-settings/db.js +168 -0
- package/modules/builder-settings/display-name.js +84 -0
- package/modules/builder-settings/event-sound-prefs.js +169 -0
- package/modules/builder-settings/interaction-prefs.js +201 -0
- package/modules/builder-settings/model-alloc-prefs.js +147 -0
- package/modules/builder-settings/module.json +10 -0
- package/modules/builder-settings/render-prefs.js +103 -0
- package/modules/builder-settings/routes/settings.js +417 -0
- package/modules/builder-settings/settings.js +52 -0
- package/modules/builder-settings/skill-prefs.js +196 -0
- package/modules/builder-settings/sound-prefs.js +178 -0
- package/modules/builder-settings/wandering-prefs.js +282 -0
- package/modules/dev-box/CLAUDE.md +38 -0
- package/modules/dev-box/box-access.js +275 -0
- package/modules/dev-box/box-credential.js +94 -0
- package/modules/dev-box/box-onboard.js +486 -0
- package/modules/dev-box/boxes.js +842 -0
- package/modules/dev-box/db.js +39 -0
- package/modules/dev-box/module.json +14 -0
- package/modules/dev-box/routes/box.js +977 -0
- package/modules/discord/CLAUDE.md +50 -0
- package/modules/discord/auth.js +54 -0
- package/modules/discord/bug-attachments.js +210 -0
- package/modules/discord/db.js +96 -0
- package/modules/discord/discord-approvals.js +145 -0
- package/modules/discord/discord-audit.js +29 -0
- package/modules/discord/discord-bot.js +545 -0
- package/modules/discord/discord-bugs.js +257 -0
- package/modules/discord/discord-channels.js +412 -0
- package/modules/discord/discord-inbound.js +147 -0
- package/modules/discord/discord-message-buffer.js +54 -0
- package/modules/discord/discord-reaction.js +186 -0
- package/modules/discord/discord-role-sync.js +318 -0
- package/modules/discord/module.json +14 -0
- package/modules/discord/pollers/discord-bot.js +19 -0
- package/modules/discord/routes/bug-attachments.js +44 -0
- package/modules/discord/routes/discord.js +102 -0
- package/modules/discord/ship-broadcast.js +78 -0
- package/modules/discord/webhook.js +74 -0
- package/modules/economy/CLAUDE.md +48 -0
- package/modules/economy/achievements.js +594 -0
- package/modules/economy/cost-classify.js +331 -0
- package/modules/economy/cost-summary-shape.js +90 -0
- package/modules/economy/cost.js +438 -0
- package/modules/economy/credits.js +430 -0
- package/modules/economy/migrations/economy_001_fix_gds_shipper_description.sql +91 -0
- package/modules/economy/module.json +10 -0
- package/modules/economy/reward.js +61 -0
- package/modules/economy/routes/cost.js +97 -0
- package/modules/economy/routes/leaderboard.js +26 -0
- package/modules/economy/routes/reward.js +42 -0
- package/modules/economy/streak.js +285 -0
- package/modules/grading/CLAUDE.md +42 -0
- package/modules/grading/db.js +39 -0
- package/modules/grading/grader-rubric.json +151 -0
- package/modules/grading/grader-workers/efficiency.js +213 -0
- package/modules/grading/grader-workers/extract-json.js +80 -0
- package/modules/grading/grader-workers/fence.js +100 -0
- package/modules/grading/grader-workers/hacker.js +239 -0
- package/modules/grading/grader-workers/index.js +183 -0
- package/modules/grading/grader-workers/narc.js +207 -0
- package/modules/grading/grader-workers/quality.js +198 -0
- package/modules/grading/grader-workers/rubric.js +20 -0
- package/modules/grading/grader-workers/worker-prompt.js +89 -0
- package/modules/grading/grader-workers/worker-verdict.js +50 -0
- package/modules/grading/grader.js +1790 -0
- package/modules/grading/module.json +12 -0
- package/modules/grading/routes/grade.js +51 -0
- package/modules/hall-ui/CLAUDE.md +61 -0
- package/modules/hall-ui/module.json +14 -0
- package/modules/hall-ui/public/atlas.html +180 -0
- package/modules/hall-ui/public/atlas.js +336 -0
- package/modules/hall-ui/public/box-panel.js +423 -0
- package/modules/hall-ui/public/brand-apply.js +117 -0
- package/modules/hall-ui/public/builders.js +3028 -0
- package/modules/hall-ui/public/chime.wav +0 -0
- package/modules/hall-ui/public/copy-on-click.js +174 -0
- package/modules/hall-ui/public/cursors/arrow.png +0 -0
- package/modules/hall-ui/public/cursors/hand-pointer.png +0 -0
- package/modules/hall-ui/public/cursors/magnifier-out.png +0 -0
- package/modules/hall-ui/public/cursors/magnifier.png +0 -0
- package/modules/hall-ui/public/diagram-viewer.css +125 -0
- package/modules/hall-ui/public/diagram-viewer.js +330 -0
- package/modules/hall-ui/public/diagrams.html +113 -0
- package/modules/hall-ui/public/dom-utils.js +212 -0
- package/modules/hall-ui/public/drachmae.html +68 -0
- package/modules/hall-ui/public/drachmae.js +136 -0
- package/modules/hall-ui/public/gate.html +143 -0
- package/modules/hall-ui/public/gate.js +228 -0
- package/modules/hall-ui/public/goals-page.js +1297 -0
- package/modules/hall-ui/public/goals.html +376 -0
- package/modules/hall-ui/public/goals.js +119 -0
- package/modules/hall-ui/public/hall-widgets.js +189 -0
- package/modules/hall-ui/public/harbor.html +167 -0
- package/modules/hall-ui/public/harbor.js +335 -0
- package/modules/hall-ui/public/index.html +116 -0
- package/modules/hall-ui/public/instances-panel.js +172 -0
- package/modules/hall-ui/public/md-reader.js +234 -0
- package/modules/hall-ui/public/modules.html +119 -0
- package/modules/hall-ui/public/modules.js +154 -0
- package/modules/hall-ui/public/new-project-wizard.js +186 -0
- package/modules/hall-ui/public/not-ready.html +48 -0
- package/modules/hall-ui/public/pair.html +119 -0
- package/modules/hall-ui/public/pair.js +132 -0
- package/modules/hall-ui/public/primer.css +404 -0
- package/modules/hall-ui/public/primer.html +85 -0
- package/modules/hall-ui/public/primer.js +641 -0
- package/modules/hall-ui/public/profile.html +85 -0
- package/modules/hall-ui/public/profile.js +236 -0
- package/modules/hall-ui/public/ranks.html +69 -0
- package/modules/hall-ui/public/ranks.js +206 -0
- package/modules/hall-ui/public/roadmap.html +209 -0
- package/modules/hall-ui/public/roadmap.js +375 -0
- package/modules/hall-ui/public/sessions.html +92 -0
- package/modules/hall-ui/public/sessions.js +222 -0
- package/modules/hall-ui/public/settings.html +640 -0
- package/modules/hall-ui/public/settings.js +1219 -0
- package/modules/hall-ui/public/shell.js +495 -0
- package/modules/hall-ui/public/style.css +1748 -0
- package/modules/hall-ui/public/task-detail.js +253 -0
- package/modules/hall-ui/public/task.html +83 -0
- package/modules/hall-ui/public/task.js +326 -0
- package/modules/hall-ui/public/watch.html +333 -0
- package/modules/hall-ui/public/watch.js +859 -0
- package/modules/hall-ui/public/work.html +469 -0
- package/modules/hall-ui/public/work.js +1292 -0
- package/modules/ideas/CLAUDE.md +37 -0
- package/modules/ideas/blockers.js +100 -0
- package/modules/ideas/inbox.js +459 -0
- package/modules/ideas/module.json +10 -0
- package/modules/ideas/routes/blockers.js +120 -0
- package/modules/ideas/routes/inbox.js +230 -0
- package/modules/lifecycle/CLAUDE.md +63 -0
- package/modules/lifecycle/conflict-resolve.js +436 -0
- package/modules/lifecycle/db.js +4970 -0
- package/modules/lifecycle/done-when.js +355 -0
- package/modules/lifecycle/github-push.js +969 -0
- package/modules/lifecycle/goal-conflicts.js +133 -0
- package/modules/lifecycle/hierarchy.js +104 -0
- package/modules/lifecycle/lifecycle.js +58 -0
- package/modules/lifecycle/merge-lock.js +261 -0
- package/modules/lifecycle/migrations/lifecycle_001_goal_first_leads.sql +28 -0
- package/modules/lifecycle/migrations/lifecycle_002_backfill_orphan_task_goals.sql +36 -0
- package/modules/lifecycle/module.json +13 -0
- package/modules/lifecycle/pollers/publish-reconciler.js +20 -0
- package/modules/lifecycle/publish-reconciler.js +418 -0
- package/modules/lifecycle/routes/analytics.js +63 -0
- package/modules/lifecycle/routes/claims.js +506 -0
- package/modules/lifecycle/routes/dependencies.js +82 -0
- package/modules/lifecycle/routes/done-when.js +136 -0
- package/modules/lifecycle/routes/gate-approvals.js +197 -0
- package/modules/lifecycle/routes/goals.js +1419 -0
- package/modules/lifecycle/routes/lifecycle.js +43 -0
- package/modules/lifecycle/routes/tasks.js +1703 -0
- package/modules/lifecycle/routes/versions.js +128 -0
- package/modules/lifecycle/ship-card.js +505 -0
- package/modules/lifecycle/ship-preflight.js +225 -0
- package/modules/lifecycle/task-classifier.js +512 -0
- package/modules/lifecycle/version-close.js +106 -0
- package/modules/memory/CLAUDE.md +40 -0
- package/modules/memory/learnings.js +275 -0
- package/modules/memory/memory.js +572 -0
- package/modules/memory/module.json +12 -0
- package/modules/memory/routes/learnings.js +90 -0
- package/modules/memory/routes/memory.js +916 -0
- package/modules/memory/routes/search.js +188 -0
- package/modules/memory/search-chunker.js +252 -0
- package/modules/memory/search.js +320 -0
- package/modules/onboarding/CLAUDE.md +55 -0
- package/modules/onboarding/approval-broadcast.js +59 -0
- package/modules/onboarding/db.js +54 -0
- package/modules/onboarding/module.json +10 -0
- package/modules/onboarding/newcomer-restock.js +212 -0
- package/modules/onboarding/onboarding-state.js +532 -0
- package/modules/onboarding/onboarding.js +508 -0
- package/modules/onboarding/port.js +63 -0
- package/modules/onboarding/routes/access-requests.js +208 -0
- package/modules/onboarding/routes/onboarding.js +54 -0
- package/modules/security/CLAUDE.md +44 -0
- package/modules/security/module.json +10 -0
- package/modules/security/routes/reports.js +251 -0
- package/modules/security/secret-scrub.js +201 -0
- package/modules/security/security.js +294 -0
- package/modules/sessions/CLAUDE.md +39 -0
- package/modules/sessions/bfg.js +357 -0
- package/modules/sessions/db.js +326 -0
- package/modules/sessions/module.json +10 -0
- package/modules/sessions/pulse.js +149 -0
- package/modules/sessions/routes/sessions.js +331 -0
- package/modules/status-ui/CLAUDE.md +47 -0
- package/modules/status-ui/module.json +14 -0
- package/modules/status-ui/public/README.md +29 -0
- package/modules/status-ui/public/cursors/arrow.png +0 -0
- package/modules/status-ui/public/cursors/hand-pointer.png +0 -0
- package/modules/status-ui/public/index.html +363 -0
- package/modules/status-ui/public/snapshots/.gitkeep +0 -0
- package/modules/status-ui/public/status.js +1375 -0
- package/modules/status-ui/public/style.css +1342 -0
- package/package-lock.json +975 -0
- package/package.json +28 -0
- package/public-docs/index.html +35 -0
- package/public-docs/redoc.standalone.js +1838 -0
- package/public-docs/redoc.standalone.js.LICENSE.txt +102 -0
- package/public-landing/buddha.png +0 -0
- package/public-landing/create.html +868 -0
- package/public-landing/index.html +168 -0
- package/scripts/bongos-mcp.js +28 -0
- package/scripts/cron/style_guide_audit.sh +134 -0
- package/scripts/discord/README.md +52 -0
- package/scripts/discord/lib.js +80 -0
- package/scripts/discord/post.js +51 -0
- package/scripts/gds/CLAUDE.md +144 -0
- package/scripts/gds/abandon.js +58 -0
- package/scripts/gds/adopt-detect.js +123 -0
- package/scripts/gds/adopt-import.js +111 -0
- package/scripts/gds/adopt-preflight.js +121 -0
- package/scripts/gds/api.js +78 -0
- package/scripts/gds/architect-audit.js +288 -0
- package/scripts/gds/art-stage.js +152 -0
- package/scripts/gds/audit-authorship.sh +243 -0
- package/scripts/gds/audit-deps.js +121 -0
- package/scripts/gds/audit-exports.js +128 -0
- package/scripts/gds/audit-replay.sh +161 -0
- package/scripts/gds/audit-ships.js +251 -0
- package/scripts/gds/autonomy-gate.js +135 -0
- package/scripts/gds/backfill-cost.js +165 -0
- package/scripts/gds/backfill-sessions.js +351 -0
- package/scripts/gds/backfill-task-rewards.js +408 -0
- package/scripts/gds/backup.js +94 -0
- package/scripts/gds/bfg-principal-token.js +65 -0
- package/scripts/gds/box-auth-check.js +160 -0
- package/scripts/gds/box-connect-lib.js +453 -0
- package/scripts/gds/box.js +1258 -0
- package/scripts/gds/build-bongos.js +94 -0
- package/scripts/gds/capture.js +123 -0
- package/scripts/gds/cf-tunnel.js +419 -0
- package/scripts/gds/ci-grade.js +82 -0
- package/scripts/gds/claim-recall.js +112 -0
- package/scripts/gds/claim.js +333 -0
- package/scripts/gds/classify-discipline.js +153 -0
- package/scripts/gds/claude-materialize.js +176 -0
- package/scripts/gds/cleanup-orphans.js +74 -0
- package/scripts/gds/cli-lib.js +518 -0
- package/scripts/gds/code.js +101 -0
- package/scripts/gds/codemod-rename-src-gds.js +145 -0
- package/scripts/gds/conductor-dispatch.js +426 -0
- package/scripts/gds/context-pack.js +228 -0
- package/scripts/gds/coreB-carve-proof.sh +716 -0
- package/scripts/gds/cost.js +47 -0
- package/scripts/gds/db-backup-nightly.sh +160 -0
- package/scripts/gds/db-backup-offsite.sh +152 -0
- package/scripts/gds/demote.js +40 -0
- package/scripts/gds/design-sync.js +62 -0
- package/scripts/gds/diagnose-achievements.js +118 -0
- package/scripts/gds/diagram-facts.js +319 -0
- package/scripts/gds/discipline-modes.json +25 -0
- package/scripts/gds/discord-channels.js +66 -0
- package/scripts/gds/do-api.js +176 -0
- package/scripts/gds/docs-entropy.js +403 -0
- package/scripts/gds/doctor.js +389 -0
- package/scripts/gds/feedback-latest.js +94 -0
- package/scripts/gds/fetch-art-key.js +106 -0
- package/scripts/gds/fetch-sound-prefs.js +88 -0
- package/scripts/gds/figma-design-sync.js +61 -0
- package/scripts/gds/fitness.js +1446 -0
- package/scripts/gds/gate-review.js +322 -0
- package/scripts/gds/gating.js +325 -0
- package/scripts/gds/gds-db-backup.service +24 -0
- package/scripts/gds/gds-db-backup.timer +20 -0
- package/scripts/gds/gds-db-offsite.service +29 -0
- package/scripts/gds/gds-db-offsite.timer +18 -0
- package/scripts/gds/gen-api-client.js +508 -0
- package/scripts/gds/gen-api-docs.js +1037 -0
- package/scripts/gds/gen-atlas.js +366 -0
- package/scripts/gds/gen-diagrams.js +608 -0
- package/scripts/gds/gen-file-map.js +196 -0
- package/scripts/gds/gen-repo-map.js +519 -0
- package/scripts/gds/gen-session-index.js +210 -0
- package/scripts/gds/git-merge-regen.js +147 -0
- package/scripts/gds/grade-smoke.js +205 -0
- package/scripts/gds/hooks/pre-push.js +169 -0
- package/scripts/gds/http-api-client.js +88 -0
- package/scripts/gds/init.js +903 -0
- package/scripts/gds/install-git-hooks.js +114 -0
- package/scripts/gds/key-card.js +213 -0
- package/scripts/gds/key-status.js +126 -0
- package/scripts/gds/land-watch.js +168 -0
- package/scripts/gds/learning-capture.js +145 -0
- package/scripts/gds/lib.sh +44 -0
- package/scripts/gds/linkify-refs.js +473 -0
- package/scripts/gds/local-preview-lib.js +159 -0
- package/scripts/gds/local-preview.js +95 -0
- package/scripts/gds/login.js +225 -0
- package/scripts/gds/main-audit.js +279 -0
- package/scripts/gds/me.js +88 -0
- package/scripts/gds/memory-map.js +174 -0
- package/scripts/gds/merge-lock.js +71 -0
- package/scripts/gds/migration-namespace.js +200 -0
- package/scripts/gds/mirror-lineage-check.js +319 -0
- package/scripts/gds/mirror-redact.js +305 -0
- package/scripts/gds/module.js +482 -0
- package/scripts/gds/newcomer-floor.config.json +13 -0
- package/scripts/gds/newcomer-floor.js +415 -0
- package/scripts/gds/newcomer-floor.templates.json +86 -0
- package/scripts/gds/newcomer-floor.test.js +235 -0
- package/scripts/gds/next-number.js +163 -0
- package/scripts/gds/oauth-secret.js +197 -0
- package/scripts/gds/onboard.js +217 -0
- package/scripts/gds/onboarding-analyze.js +226 -0
- package/scripts/gds/onboarding-config.js +178 -0
- package/scripts/gds/onboarding-ship.js +92 -0
- package/scripts/gds/package-core.js +684 -0
- package/scripts/gds/paste-token.js +131 -0
- package/scripts/gds/portability-smoke-art.sh +85 -0
- package/scripts/gds/portability-smoke-memory.sh +147 -0
- package/scripts/gds/provision.js +1324 -0
- package/scripts/gds/publish-manifest.js +307 -0
- package/scripts/gds/pulse.js +309 -0
- package/scripts/gds/push-main.js +45 -0
- package/scripts/gds/read-session-export.js +359 -0
- package/scripts/gds/reauth.js +149 -0
- package/scripts/gds/recall.js +135 -0
- package/scripts/gds/release.js +71 -0
- package/scripts/gds/render-ideas.js +173 -0
- package/scripts/gds/repo-metrics.js +363 -0
- package/scripts/gds/resolve-skill-model.js +57 -0
- package/scripts/gds/run-routine.js +197 -0
- package/scripts/gds/run-unit-tests.js +178 -0
- package/scripts/gds/sandbox-stage.js +653 -0
- package/scripts/gds/search-ingest-db.js +209 -0
- package/scripts/gds/search-ingest-md.js +225 -0
- package/scripts/gds/security-baseline-check.sh +180 -0
- package/scripts/gds/seed-adopt-tasks.js +75 -0
- package/scripts/gds/seed-api-contract-goal-tasks.js +141 -0
- package/scripts/gds/seed-bongos-app-tasks.js +294 -0
- package/scripts/gds/seed-bongos-coreB-tranche1-tasks.js +81 -0
- package/scripts/gds/seed-bongos-coreB-tranche2-tasks.js +100 -0
- package/scripts/gds/seed-bongos-goal-hierarchy-tasks.js +307 -0
- package/scripts/gds/seed-bongos-module-system-tasks.js +346 -0
- package/scripts/gds/seed-bongos-tasks.js +214 -0
- package/scripts/gds/seed-gds-v4-tasks.js +624 -0
- package/scripts/gds/seed-governance-tasks.js +340 -0
- package/scripts/gds/seed-medusa-tasks.js +440 -0
- package/scripts/gds/seed-module-upstreaming.js +219 -0
- package/scripts/gds/seed-productization-tasks.js +235 -0
- package/scripts/gds/seed-provisioning-tasks.js +83 -0
- package/scripts/gds/seed-staging.sh +104 -0
- package/scripts/gds/seed-v2-world-tasks.js +283 -0
- package/scripts/gds/seed-v3-tasks.js +1981 -0
- package/scripts/gds/session-cost.js +393 -0
- package/scripts/gds/session-digest.js +179 -0
- package/scripts/gds/session-eval.js +576 -0
- package/scripts/gds/session.js +404 -0
- package/scripts/gds/setup.js +504 -0
- package/scripts/gds/shell.js +100 -0
- package/scripts/gds/ship.js +3618 -0
- package/scripts/gds/smoke-batch-claim.sh +213 -0
- package/scripts/gds/smoke-batch-release.sh +296 -0
- package/scripts/gds/smoke-box.sh +150 -0
- package/scripts/gds/smoke-claim-consistency.sh +212 -0
- package/scripts/gds/smoke-dependencies.sh +84 -0
- package/scripts/gds/smoke-gds.js +125 -0
- package/scripts/gds/smoke-write.sh +168 -0
- package/scripts/gds/start.js +782 -0
- package/scripts/gds/status.js +365 -0
- package/scripts/gds/triage.js +366 -0
- package/scripts/gds/upgrade.js +421 -0
- package/scripts/gds/validate-design.js +254 -0
- package/scripts/gds/version-close.js +549 -0
- package/scripts/migrate.sh +183 -0
- package/scripts/migrate_cost_ledger.sh +178 -0
- package/scripts/public-mirror-export.js +291 -0
- package/scripts/render-diagrams.sh +88 -0
- package/scripts/security/dep-audit.js +276 -0
- package/scripts/setup-builder.js +274 -0
- package/scripts/setup-builder.sh +28 -0
- package/scripts/snapshots/backfill-history.mjs +292 -0
- package/scripts/snapshots/maybe-render-on-deploy.sh +66 -0
- package/scripts/snapshots/render-pre-art-eras.mjs +329 -0
- package/scripts/snapshots/render-world.mjs +322 -0
- package/scripts/status-mirror-sync.js +192 -0
- package/scripts/status-probe.mjs +185 -0
- package/server.js +212 -0
- package/src/asset-version.js +71 -0
- package/src/bongos/CLAUDE.md +64 -0
- package/src/bongos/api-errors.js +281 -0
- package/src/bongos/api-path-404.js +67 -0
- package/src/bongos/api-prefix.js +38 -0
- package/src/bongos/app-pair.js +172 -0
- package/src/bongos/auth.js +979 -0
- package/src/bongos/cascade-dispatch.js +123 -0
- package/src/bongos/db-kernel.js +252 -0
- package/src/bongos/db.js +911 -0
- package/src/bongos/goal-scope-check.js +120 -0
- package/src/bongos/hierarchy-config.js +189 -0
- package/src/bongos/live-channel.js +145 -0
- package/src/bongos/llm-cache.js +260 -0
- package/src/bongos/llm-pricing.js +220 -0
- package/src/bongos/metrics.js +286 -0
- package/src/bongos/middleware/audit.js +274 -0
- package/src/bongos/middleware/error-envelope.js +93 -0
- package/src/bongos/middleware/rate-limit.js +195 -0
- package/src/bongos/module-scope-map.js +271 -0
- package/src/bongos/optimizer.js +166 -0
- package/src/bongos/path-match.js +47 -0
- package/src/bongos/permission-path-check.js +248 -0
- package/src/bongos/pool.js +55 -0
- package/src/bongos/repo-info.js +91 -0
- package/src/bongos/route-rank-check.js +420 -0
- package/src/bongos/routes/CLAUDE.md +43 -0
- package/src/bongos/routes/_helpers.js +369 -0
- package/src/bongos/routes/audit-log.js +59 -0
- package/src/bongos/routes/auth.js +755 -0
- package/src/bongos/routes/backup.js +104 -0
- package/src/bongos/routes/builders.js +526 -0
- package/src/bongos/routes/healthz.js +16 -0
- package/src/bongos/routes/instance.js +129 -0
- package/src/bongos/routes/live.js +125 -0
- package/src/bongos/routes/llm-cache.js +119 -0
- package/src/bongos/routes/me.js +380 -0
- package/src/bongos/routes/modules.js +131 -0
- package/src/bongos/routes/optimizer.js +54 -0
- package/src/bongos/routes/public.js +476 -0
- package/src/bongos/routes/security.js +207 -0
- package/src/bongos/routes.js +166 -0
- package/src/bongos/secret-box.js +177 -0
- package/src/bongos/sensitive-surfaces.js +30 -0
- package/src/bongos/serve-internal.js +889 -0
- package/src/bongos/uptime-poller.js +90 -0
- package/src/bongos-downloads.js +70 -0
- package/src/branding.js +182 -0
- package/src/build-info.js +77 -0
- package/src/devbox-downloads.js +67 -0
- package/src/instance-config.js +200 -0
- package/src/module-api.js +366 -0
- package/src/module-loader/loader.js +268 -0
- package/src/module-loader/manifest-schema.js +140 -0
- package/src/module-loader/provenance.js +28 -0
- package/src/module-loader/semver.js +100 -0
- package/src/module-seams.js +291 -0
- package/src/modules.js +254 -0
- package/src/platform-server.js +135 -0
- package/src/ui/adapters/claude-design/index.js +333 -0
- package/src/ui/adapters/figma/index.js +328 -0
- package/tests/abandon_task.mjs +138 -0
- package/tests/achievements_reconcile.mjs +167 -0
- package/tests/adopt_detect.mjs +141 -0
- package/tests/adopt_import.mjs +132 -0
- package/tests/adopt_preflight.mjs +105 -0
- package/tests/anti_grid.mjs +89 -0
- package/tests/api_client.mjs +231 -0
- package/tests/api_docs.mjs +283 -0
- package/tests/api_error_envelope_buildcheck.mjs +56 -0
- package/tests/api_error_envelope_middleware.mjs +99 -0
- package/tests/api_error_registry.mjs +108 -0
- package/tests/api_pagination_contract.mjs +51 -0
- package/tests/api_path_404.mjs +96 -0
- package/tests/app_pair.mjs +168 -0
- package/tests/architect.mjs +140 -0
- package/tests/art_key.mjs +121 -0
- package/tests/art_stage.mjs +121 -0
- package/tests/asset_version.mjs +94 -0
- package/tests/atlas.mjs +69 -0
- package/tests/audit_deps.mjs +74 -0
- package/tests/audit_middleware.mjs +385 -0
- package/tests/auth_admission_gate.mjs +164 -0
- package/tests/auth_anthropic_identity.mjs +95 -0
- package/tests/auth_duplicate_cookie.mjs +56 -0
- package/tests/auth_error_brand.mjs +77 -0
- package/tests/auth_flow_slice1.mjs +223 -0
- package/tests/auth_inactive_builder.mjs +94 -0
- package/tests/auth_page_gate.mjs +92 -0
- package/tests/auth_session_ttl.mjs +155 -0
- package/tests/autonomous_fit_protected_paths.mjs +115 -0
- package/tests/autonomy_gate.mjs +85 -0
- package/tests/autotile_variants.mjs +256 -0
- package/tests/autotile_xverify.mjs +133 -0
- package/tests/backfill_sessions.mjs +101 -0
- package/tests/backfill_task_rewards.mjs +152 -0
- package/tests/backup_cli.mjs +104 -0
- package/tests/bfg.mjs +327 -0
- package/tests/bfg_write.mjs +423 -0
- package/tests/bongos_box_connect.mjs +89 -0
- package/tests/bongos_dispatch.mjs +74 -0
- package/tests/bongos_downloads.mjs +118 -0
- package/tests/bongos_login.mjs +34 -0
- package/tests/box_access.mjs +186 -0
- package/tests/box_auth_check.mjs +114 -0
- package/tests/box_code_staleness.mjs +116 -0
- package/tests/box_connect_e2e.mjs +196 -0
- package/tests/box_cost.mjs +70 -0
- package/tests/box_dns_repoint.mjs +151 -0
- package/tests/box_host_keys.mjs +102 -0
- package/tests/box_onboard.mjs +317 -0
- package/tests/box_scope_session.mjs +115 -0
- package/tests/box_ship_permissions.mjs +71 -0
- package/tests/box_terminal_ssrf.mjs +90 -0
- package/tests/boxes.mjs +1255 -0
- package/tests/branding.mjs +88 -0
- package/tests/bug_attachments.mjs +189 -0
- package/tests/build_info.mjs +88 -0
- package/tests/builder_needs.mjs +99 -0
- package/tests/cap_newcomer_tasks.mjs +114 -0
- package/tests/cascade-dispatch.mjs +95 -0
- package/tests/cf_tunnel.mjs +459 -0
- package/tests/claim_recall.mjs +150 -0
- package/tests/claims_bind_session.mjs +47 -0
- package/tests/claude_materialize.mjs +148 -0
- package/tests/cli_box_scope.mjs +52 -0
- package/tests/cli_lib_formatters.mjs +87 -0
- package/tests/cli_token_reissue.mjs +147 -0
- package/tests/client_bundle_route.mjs +47 -0
- package/tests/cloud_bongos_pack.mjs +85 -0
- package/tests/conductor.mjs +496 -0
- package/tests/confirm_attribution.mjs +156 -0
- package/tests/conflict_resolve.mjs +462 -0
- package/tests/context_pack.mjs +240 -0
- package/tests/cost.mjs +94 -0
- package/tests/cost_audit.mjs +122 -0
- package/tests/cost_budget_status.mjs +78 -0
- package/tests/cost_reconcile.mjs +102 -0
- package/tests/cost_summary_shape.mjs +94 -0
- package/tests/credit_grant.mjs +376 -0
- package/tests/criterion_progress.mjs +220 -0
- package/tests/criterion_proposal.mjs +109 -0
- package/tests/criterion_ref_parse.mjs +53 -0
- package/tests/currency_label.mjs +119 -0
- package/tests/day_cycle.mjs +197 -0
- package/tests/dependencies_migration.mjs +77 -0
- package/tests/dependencies_polymorphic.mjs +212 -0
- package/tests/deploy_instance.mjs +78 -0
- package/tests/devbox_downloads.mjs +122 -0
- package/tests/diff_derived_signals.mjs +115 -0
- package/tests/discord_approvals.mjs +174 -0
- package/tests/discord_autojoin.mjs +158 -0
- package/tests/discord_bot.mjs +94 -0
- package/tests/discord_bugs.mjs +297 -0
- package/tests/discord_channels.mjs +337 -0
- package/tests/discord_foundation.mjs +76 -0
- package/tests/discord_inbound.mjs +190 -0
- package/tests/discord_message_buffer.mjs +87 -0
- package/tests/discord_oauth.mjs +55 -0
- package/tests/discord_reaction.mjs +170 -0
- package/tests/discord_role_sync.mjs +151 -0
- package/tests/display_name.mjs +123 -0
- package/tests/dns_preflight.mjs +74 -0
- package/tests/event_sound_prefs.mjs +194 -0
- package/tests/eviction_policy.mjs +279 -0
- package/tests/figma_adapter.mjs +199 -0
- package/tests/file_map.mjs +91 -0
- package/tests/first_admin_bootstrap.mjs +40 -0
- package/tests/fitness.mjs +435 -0
- package/tests/fitness_two_root.mjs +104 -0
- package/tests/fixtures/session-506-digest.json +34 -0
- package/tests/gate_approvals.mjs +451 -0
- package/tests/gate_review.mjs +152 -0
- package/tests/git_merge_regen.mjs +151 -0
- package/tests/github_push_ancestry.mjs +119 -0
- package/tests/github_push_land_proof.mjs +127 -0
- package/tests/github_push_merge_driver.mjs +175 -0
- package/tests/goal_abuse_matrix.mjs +187 -0
- package/tests/goal_achievement.mjs +146 -0
- package/tests/goal_conflicts.mjs +305 -0
- package/tests/goal_dependencies_read.mjs +73 -0
- package/tests/goal_member_roles.mjs +420 -0
- package/tests/goal_membership_requests.mjs +332 -0
- package/tests/goal_routes.mjs +203 -0
- package/tests/goal_scope_check.mjs +167 -0
- package/tests/goal_tier.mjs +312 -0
- package/tests/goal_wall_proof.mjs +112 -0
- package/tests/grade_attempts.mjs +73 -0
- package/tests/grade_attribution.mjs +117 -0
- package/tests/grade_diff_hash.mjs +191 -0
- package/tests/grade_server_authoritative.mjs +305 -0
- package/tests/grade_unavailable_display.mjs +66 -0
- package/tests/grader.mjs +1960 -0
- package/tests/grader_bypass.mjs +57 -0
- package/tests/grader_panel.mjs +252 -0
- package/tests/grader_prompt_fencing.mjs +192 -0
- package/tests/helpers.mjs +52 -0
- package/tests/hierarchy-config.mjs +81 -0
- package/tests/init.mjs +463 -0
- package/tests/instance_config.mjs +76 -0
- package/tests/instance_manifest.mjs +110 -0
- package/tests/interaction_prefs.mjs +72 -0
- package/tests/key-card.mjs +110 -0
- package/tests/key-status.mjs +45 -0
- package/tests/land_watch.mjs +115 -0
- package/tests/lifecycle-card.mjs +145 -0
- package/tests/lifecycle_breakdown_view.mjs +236 -0
- package/tests/linkify_refs.mjs +264 -0
- package/tests/live_channel.mjs +128 -0
- package/tests/live_sse.mjs +122 -0
- package/tests/llm-cache-route.mjs +110 -0
- package/tests/llm-cache.mjs +140 -0
- package/tests/llm-pricing.mjs +152 -0
- package/tests/local_preview.mjs +136 -0
- package/tests/main_audit.mjs +137 -0
- package/tests/memory_isolation.mjs +431 -0
- package/tests/memory_map.mjs +107 -0
- package/tests/memory_pull.mjs +429 -0
- package/tests/merge_lease.mjs +100 -0
- package/tests/merge_lock.mjs +312 -0
- package/tests/metrics.mjs +147 -0
- package/tests/migration_allocation.mjs +146 -0
- package/tests/migration_namespace.mjs +185 -0
- package/tests/migrations_fresh_replay_guard.mjs +38 -0
- package/tests/mirror_lineage_fulltree.mjs +45 -0
- package/tests/mirror_lineage_proof.mjs +72 -0
- package/tests/mirror_redact.mjs +193 -0
- package/tests/model_alloc_prefs.mjs +63 -0
- package/tests/module-scope-map.mjs +88 -0
- package/tests/module_api.mjs +110 -0
- package/tests/module_cli.mjs +292 -0
- package/tests/module_contributions.mjs +148 -0
- package/tests/module_loader.mjs +286 -0
- package/tests/module_manifest.mjs +194 -0
- package/tests/module_owned_tests.mjs +105 -0
- package/tests/module_provenance.mjs +34 -0
- package/tests/module_route_rank.mjs +147 -0
- package/tests/module_seams.mjs +68 -0
- package/tests/modules.mjs +156 -0
- package/tests/modules_route.mjs +38 -0
- package/tests/newcomer_floor.mjs +17 -0
- package/tests/newcomer_restock.mjs +80 -0
- package/tests/next_number.mjs +154 -0
- package/tests/oauth_secret.mjs +60 -0
- package/tests/onboard.mjs +70 -0
- package/tests/onboarding_gate.mjs +267 -0
- package/tests/onboarding_observability.mjs +344 -0
- package/tests/onboarding_route_signals.mjs +175 -0
- package/tests/onboarding_state.mjs +346 -0
- package/tests/one_active_claim_per_session.mjs +111 -0
- package/tests/orphaned_claim_ship.mjs +135 -0
- package/tests/override_attribution.mjs +142 -0
- package/tests/override_request_ownership.mjs +235 -0
- package/tests/package_core.mjs +435 -0
- package/tests/parallel-load.mjs +402 -0
- package/tests/path_match.mjs +62 -0
- package/tests/permission_path.mjs +151 -0
- package/tests/platform_boot.mjs +167 -0
- package/tests/pre_compact.mjs +60 -0
- package/tests/preview_server.mjs +127 -0
- package/tests/profile_route.mjs +197 -0
- package/tests/provision.mjs +805 -0
- package/tests/provisioning_github_app_routes.mjs +98 -0
- package/tests/public_mirror_export.mjs +124 -0
- package/tests/public_task_resolver.mjs +112 -0
- package/tests/publish_branch_route.mjs +422 -0
- package/tests/publish_manifest.mjs +184 -0
- package/tests/publish_reconciler.mjs +728 -0
- package/tests/rank_gate.mjs +463 -0
- package/tests/rate_limit_public.mjs +217 -0
- package/tests/read_session_export.mjs +89 -0
- package/tests/recall_cli.mjs +82 -0
- package/tests/recall_hints.mjs +119 -0
- package/tests/recent_shipped_window.mjs +80 -0
- package/tests/regrade_eligibility.mjs +202 -0
- package/tests/render_prefs.mjs +122 -0
- package/tests/repo_map.mjs +92 -0
- package/tests/reward_gate.mjs +284 -0
- package/tests/route_rank_check.mjs +243 -0
- package/tests/route_validation.mjs +490 -0
- package/tests/routine_timers.mjs +72 -0
- package/tests/rubric_fixtures.mjs +140 -0
- package/tests/run_routine.mjs +69 -0
- package/tests/sandbox_stage.mjs +582 -0
- package/tests/scrubber_corpus.mjs +257 -0
- package/tests/search_chunker.mjs +209 -0
- package/tests/search_ingest.mjs +96 -0
- package/tests/search_ingest_db.mjs +88 -0
- package/tests/search_isolation.mjs +204 -0
- package/tests/search_route.mjs +95 -0
- package/tests/secret_box.mjs +189 -0
- package/tests/security_docs.mjs +186 -0
- package/tests/security_route.mjs +108 -0
- package/tests/served_paths_shipped.mjs +118 -0
- package/tests/session-cards.mjs +142 -0
- package/tests/session_506_regression.mjs +69 -0
- package/tests/session_caps.mjs +238 -0
- package/tests/session_cost.mjs +133 -0
- package/tests/session_digest.mjs +73 -0
- package/tests/session_eval.mjs +386 -0
- package/tests/session_index.mjs +105 -0
- package/tests/session_records.mjs +369 -0
- package/tests/session_search.mjs +78 -0
- package/tests/session_start_freshness.mjs +123 -0
- package/tests/setup_smoke.mjs +154 -0
- package/tests/ship_autolinkify.mjs +60 -0
- package/tests/ship_automerge_injection.mjs +174 -0
- package/tests/ship_broadcast_routing.mjs +125 -0
- package/tests/ship_broadcast_server.mjs +175 -0
- package/tests/ship_card.mjs +280 -0
- package/tests/ship_ci_deploy.mjs +374 -0
- package/tests/ship_preflight.mjs +368 -0
- package/tests/ship_premerge.mjs +75 -0
- package/tests/ship_resume.mjs +129 -0
- package/tests/ship_upload_skip.mjs +89 -0
- package/tests/ship_zero_commit.mjs +60 -0
- package/tests/single_host_hall.mjs +98 -0
- package/tests/skill_prefs.mjs +150 -0
- package/tests/smoke_preflight.mjs +66 -0
- package/tests/snapshot_picker.mjs +233 -0
- package/tests/sound_prefs.mjs +198 -0
- package/tests/sprite_facing.mjs +35 -0
- package/tests/status-probe.mjs +89 -0
- package/tests/status_backfill.mjs +94 -0
- package/tests/stop_refcheck.mjs +127 -0
- package/tests/streak.mjs +175 -0
- package/tests/subdomain_auth.mjs +58 -0
- package/tests/task_classifier_vocab.mjs +41 -0
- package/tests/task_create_idempotency.mjs +96 -0
- package/tests/task_goal_link.mjs +93 -0
- package/tests/task_ownership_gate.mjs +125 -0
- package/tests/terrain_picker.mjs +298 -0
- package/tests/touches_overlap.mjs +75 -0
- package/tests/triage_development.mjs +140 -0
- package/tests/turn_in_place.mjs +280 -0
- package/tests/upgrade.mjs +357 -0
- package/tests/verify_task_guard.mjs +64 -0
- package/tests/version_close.mjs +76 -0
- package/tests/versions_route.mjs +93 -0
- package/tests/walkability.mjs +188 -0
- package/tests/wandering_prefs.mjs +176 -0
- package/tests/worktree_disambiguation.mjs +105 -0
- package/tests/worktree_guard.mjs +90 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// seed-adopt-tasks.js
|
|
3
|
+
// Seeds the brownfield adopt-mode task breakdown for BONGOS-V1 goal 35
|
|
4
|
+
// ("Project creation flow"), criterion `adopt-existing-repo`, per ADR 0121
|
|
5
|
+
// (task 1986). Scope-only deliverable: these are the BUILD tasks for
|
|
6
|
+
// `bongos init --adopt`; they are seeded as `backlog` (NOT promoted) so the
|
|
7
|
+
// owner schedules the adopt build deliberately. See ADR 0121 §Consequences.
|
|
8
|
+
//
|
|
9
|
+
// Idempotent: task create on source_ref (`BONGOS-V1-adopt-A0N`), criterion
|
|
10
|
+
// links on (task_id, criterion_id), dependency edges on (task_id,
|
|
11
|
+
// depends_on_task_id). Safe to re-run. Run: node scripts/gds/seed-adopt-tasks.js
|
|
12
|
+
const { apiCall } = require('./cli-lib.js');
|
|
13
|
+
|
|
14
|
+
const GOAL_ID = 35;
|
|
15
|
+
const CRIT = 'adopt-existing-repo';
|
|
16
|
+
const RUNBOOK_TASK = 1981; // goal-35 canonical runbook; A05 depends on it (external edge)
|
|
17
|
+
|
|
18
|
+
// ref → task spec. `deps` are local A0N refs; `extDeps` are literal task ids.
|
|
19
|
+
const TASKS = [
|
|
20
|
+
{ ref: 'A01', kind: 'feature', priority: 4, est: 180, crit: [CRIT], deps: [], extDeps: [],
|
|
21
|
+
title: 'bongos init --adopt: mode skeleton + additive config layering (no clobber)',
|
|
22
|
+
description: 'Add an `--adopt` mode to `scripts/gds/init.js` (ADR 0121 §Decision 1-2). Instead of the greenfield "stand up a NEW instance" path (which refuses where config/branding.json exists and whose --force OVERWRITES), --adopt LAYERS onto the existing tree: add the pinned @cloudbongos/core dependency + the lean config/ overrides + .claude/ ADDITIVELY. For any pre-existing file (package.json, an existing .claude/, a CI workflow) it MERGES or LEAVES-AND-REPORTS — it never overwrites, and it must NOT reuse the --force code path. Writes only the lean branding.json overrides (rest resolves from *.neutral.json). Serves criterion adopt-existing-repo. deps: none (the ADR-0108 configurable-root substrate is shipped).' },
|
|
23
|
+
{ ref: 'A02', kind: 'feature', priority: 4, est: 150, crit: [CRIT], deps: [], extDeps: [],
|
|
24
|
+
title: 'bongos init --adopt: detect the existing stack + layout',
|
|
25
|
+
description: 'Before writing anything, --adopt inspects the existing tree — language/runtime, package manager, test + CI setup, directory layout — so the enabled modules, the generated repo-map, and the core<->host fitness boundary (ADR 0062 §1) fit what is already there instead of assuming the reference layout (ADR 0121 §Decision 4). Output: a detected-stack summary consumed by A03 (real-state capture) and A04 (pre-flight). Serves criterion adopt-existing-repo. deps: none.' },
|
|
26
|
+
{ ref: 'A03', kind: 'feature', priority: 3, est: 180, crit: [CRIT], deps: ['A01'], extDeps: [],
|
|
27
|
+
title: 'bongos init --adopt: reflect REAL state — capture version/goal + import backlog',
|
|
28
|
+
description: 'Replace the synthetic "V1 — Prove the loop" seed with the repo\'s ACTUAL current version/milestone + open goal (by interview + detection), and IMPORT the existing backlog into GDS tasks — GitHub issues (via the auth the flow already establishes), a TODO/ROADMAP/BACKLOG.md, or an interview fallback — so the ledger starts truthful rather than empty (ADR 0121 §Decision 3). Serves criterion adopt-existing-repo. deps: A01.' },
|
|
29
|
+
{ ref: 'A04', kind: 'feature', priority: 3, est: 150, crit: [CRIT], deps: ['A01', 'A02'], extDeps: [],
|
|
30
|
+
title: 'bongos init --adopt: conflict pre-flight report (--dry-run default, accept-gated)',
|
|
31
|
+
description: 'Produce the pre-flight report the owner must ACCEPT before anything is written (ADR 0121 §Decision 5): migration-namespace collisions (ADR 0108 §5), core<->host fitness-boundary violations in existing imports (ADR 0062 §1), incoming files that land on protected paths (ADR 0043), and CI collisions between core\'s expected unit/gate check and the repo\'s own workflows. --dry-run is the default first pass; nothing is written until accepted. Serves criterion adopt-existing-repo. deps: A01, A02.' },
|
|
32
|
+
{ ref: 'A05', kind: 'feature', priority: 3, est: 120, crit: [CRIT], deps: ['A01', 'A03', 'A04'], extDeps: [RUNBOOK_TASK],
|
|
33
|
+
title: 'bongos init --adopt: wire greenfield-vs-adopt into the runbook + both forms',
|
|
34
|
+
description: 'Offer the greenfield-vs-adopt choice at the SCAFFOLD leg of goal 35\'s canonical step sequence, across all three forms: the /new-project skill (task 1981), the `bongos onboard` CLI (task 1982), and the hall "start a project" wizard (task 1983). Since --adopt is a branch of the same init, the forms inherit it (ADR 0121 §Decision 1). Serves criterion adopt-existing-repo. deps: A01, A03, A04, and the runbook task 1981.' },
|
|
35
|
+
];
|
|
36
|
+
|
|
37
|
+
(async () => {
|
|
38
|
+
const idByRef = {};
|
|
39
|
+
// Phase 1: create tasks (idempotent on source_ref) + link the criterion.
|
|
40
|
+
for (const t of TASKS) {
|
|
41
|
+
const create = await apiCall('POST', '/api/gds/tasks', {
|
|
42
|
+
version_id: 'BONGOS-V1',
|
|
43
|
+
goal_id: GOAL_ID,
|
|
44
|
+
title: t.title,
|
|
45
|
+
description: t.description,
|
|
46
|
+
kind: t.kind,
|
|
47
|
+
discipline: 'engineer',
|
|
48
|
+
priority: t.priority,
|
|
49
|
+
est_minutes: t.est,
|
|
50
|
+
source: 'planning',
|
|
51
|
+
source_ref: `BONGOS-V1-adopt-${t.ref}`,
|
|
52
|
+
});
|
|
53
|
+
const task = create.data && (create.data.task || create.data);
|
|
54
|
+
const id = task && task.id;
|
|
55
|
+
if (!id) { console.log(` ${t.ref}: CREATE FAILED — ${create.status} ${JSON.stringify(create.data).slice(0, 160)}`); continue; }
|
|
56
|
+
idByRef[t.ref] = id;
|
|
57
|
+
const link = await apiCall('POST', `/api/gds/tasks/${id}/criteria`, { criterion_ids: t.crit });
|
|
58
|
+
console.log(` ${t.ref} -> task ${id} (${t.kind}, P${t.priority}, goal ${task.goal_id}) · criterion ${link.status === 200 ? 'ok' : (JSON.stringify(link.data).slice(0, 120))}`);
|
|
59
|
+
}
|
|
60
|
+
// Phase 2: dependency edges (idempotent on (task_id, depends_on_task_id)).
|
|
61
|
+
console.log('--- dependencies ---');
|
|
62
|
+
for (const t of TASKS) {
|
|
63
|
+
const id = idByRef[t.ref];
|
|
64
|
+
if (!id) continue;
|
|
65
|
+
const localDepIds = t.deps.map((d) => idByRef[d]).filter(Boolean);
|
|
66
|
+
const allDeps = [...localDepIds, ...t.extDeps];
|
|
67
|
+
for (const depId of allDeps) {
|
|
68
|
+
const r = await apiCall('POST', `/api/gds/tasks/${id}/dependencies`, { depends_on_task_id: depId });
|
|
69
|
+
console.log(` ${t.ref}(${id}) -> ${depId} ${r.status === 200 || r.status === 201 ? 'ok' : (JSON.stringify(r.data).slice(0, 120))}`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
// NOTE: intentionally NO promote step — these are backlog until the owner
|
|
73
|
+
// schedules the adopt build (ADR 0121; task 1986 is scope-only).
|
|
74
|
+
console.log('refs:', JSON.stringify(idByRef));
|
|
75
|
+
})().catch((e) => console.log('ERR ' + (e && e.message)));
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// seed-api-contract-goal-tasks.js
|
|
3
|
+
// Seeds BONGOS-V1 goal 36 — "Robust, versioned, easy-to-call public API" — from
|
|
4
|
+
// the 2026-07-04 Archon planning session (task 1987). Five done-when criteria
|
|
5
|
+
// (slugs api-error-envelope · api-versioning · api-client-sdk · api-validation ·
|
|
6
|
+
// api-pagination) were created via POST /versions/BONGOS-V1/done-when before this
|
|
7
|
+
// runs; this seeds the 14 tasks (refs R01-R14) + their criterion links + the
|
|
8
|
+
// dependency edges. Entry point is CONTRACT-FIRST, so only the zero-dep,
|
|
9
|
+
// non-spike Phase-A tasks (R01 envelope contract, R05 versioning policy) plus the
|
|
10
|
+
// independent R13 pagination decision are promoted to `ready`; R07 (the
|
|
11
|
+
// source-of-truth spike) stays backlog by convention and is opened manually when
|
|
12
|
+
// Phase B starts; everything else auto-promotes as its predecessor ships.
|
|
13
|
+
//
|
|
14
|
+
// Idempotent: task create on source_ref, criterion links on (task_id,
|
|
15
|
+
// criterion_id), dependency edges on (task_id, depends_on_task_id). Safe to re-run.
|
|
16
|
+
// Run: node scripts/gds/seed-api-contract-goal-tasks.js
|
|
17
|
+
const { cliClient } = require('./cli-lib.js');
|
|
18
|
+
|
|
19
|
+
const GOAL_ID = 36;
|
|
20
|
+
const C = {
|
|
21
|
+
envelope: 'api-error-envelope',
|
|
22
|
+
versioning: 'api-versioning',
|
|
23
|
+
sdk: 'api-client-sdk',
|
|
24
|
+
validation: 'api-validation',
|
|
25
|
+
pagination: 'api-pagination',
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
// ref → task spec. `deps` are local R## refs, resolved to ids after create.
|
|
29
|
+
const TASKS = [
|
|
30
|
+
// ---- Criterion 1: error envelope (Phase A) ----
|
|
31
|
+
{ ref: 'R01', kind: 'decision', priority: 5, est: 90, crit: [C.envelope],
|
|
32
|
+
title: 'API error envelope + code taxonomy (contract + ADR)',
|
|
33
|
+
description: 'Define the single error response envelope `{error:{code,message,details}}` and the taxonomy that collapses today\'s ~339 ad-hoc error strings into a documented registry. Deliverable: an ADR + a shared registry module of canonical codes. No behaviour change — this is the contract R02 implements. Serves C1 (api-error-envelope). deps: none.',
|
|
34
|
+
deps: [] },
|
|
35
|
+
{ ref: 'R02', kind: 'infra', priority: 5, est: 120, crit: [C.envelope],
|
|
36
|
+
title: 'Central error-handling middleware + envelope helper',
|
|
37
|
+
description: 'Add a central Express error-handling middleware + an `ApiError`/`res.fail(code,status,details)` helper (kernel route layer) emitting the R01 envelope; wire the handler last so any thrown/unhandled error returns the envelope. Backward-compatible — existing ad-hoc responses keep working until the R04 sweep. Serves C1. deps: R01.',
|
|
38
|
+
deps: ['R01'] },
|
|
39
|
+
{ ref: 'R03', kind: 'infra', priority: 4, est: 90, crit: [C.envelope],
|
|
40
|
+
title: 'Build check: fail on a route emitting a non-envelope error',
|
|
41
|
+
description: 'Add a fitness/lint check (into fitness.js / the unit gate) that fails the build when a route hand-rolls a flat `res.status(NNN).json({error:\'...\'})` instead of the R02 helper. Holds the line as the sweep progresses. Serves C1. deps: R02.',
|
|
42
|
+
deps: ['R02'] },
|
|
43
|
+
{ ref: 'R04', kind: 'refactor', priority: 4, est: 240, crit: [C.envelope],
|
|
44
|
+
title: 'Sweep existing routes onto the error envelope',
|
|
45
|
+
description: 'Convert the ~219 handlers across core + modules from ad-hoc flat errors to the R02 envelope (the audit found 168 open-coded 500s + 615 flat-error sites). Mechanical but wide — touches every module\'s routes. Serves C1. deps: R02.',
|
|
46
|
+
deps: ['R02'] },
|
|
47
|
+
// ---- Criterion 2: versioning (Phase A) ----
|
|
48
|
+
{ ref: 'R05', kind: 'decision', priority: 5, est: 90, crit: [C.versioning],
|
|
49
|
+
title: 'API versioning + deprecation policy (ADR)',
|
|
50
|
+
description: 'ADR defining the versioning scheme (a `/v1/` path marker), what counts as a breaking change, the deprecation window, and how the currently-un-updatable consumers (shipped Dev Box binaries, live boxes, status dashboard) are handled. Serves C2 (api-versioning). deps: none.',
|
|
51
|
+
deps: [] },
|
|
52
|
+
{ ref: 'R06', kind: 'infra', priority: 5, est: 150, crit: [C.versioning],
|
|
53
|
+
title: 'Serve the API under /v1/ with legacy aliasing',
|
|
54
|
+
description: 'Mount the current surface under `/v1/` and alias today\'s unversioned paths (`/api/bongos`, `/api/gds`) into it so no consumer breaks on day one. Stamp the version into the OpenAPI spec + `/docs`. Serves C2. deps: R05.',
|
|
55
|
+
deps: ['R05'] },
|
|
56
|
+
// ---- Criterion 3: client SDK (Phase B) ----
|
|
57
|
+
{ ref: 'R07', kind: 'spike', priority: 4, est: 120, crit: [C.sdk],
|
|
58
|
+
title: 'Spike: pick the API contract source-of-truth (schema-first vs code-first)',
|
|
59
|
+
description: 'Decide whether the OpenAPI spec becomes the SOURCE (schema-first: define request/response schemas -> generate spec + validation + client) or stays GENERATED from code with codegen layered on. This one decision shapes the SDK (C3) and validation (C4). Output: an ADR + a sub-task list refining R08-R12. kind=spike (stays backlog; opened manually when Phase B starts). Serves C3, informs C4. deps: none (do after Phase A).',
|
|
60
|
+
deps: [] },
|
|
61
|
+
{ ref: 'R08', kind: 'feature', priority: 3, est: 180, crit: [C.sdk],
|
|
62
|
+
title: 'Generate + publish the typed API client',
|
|
63
|
+
description: 'Per the R07 decision, generate a typed client from the OpenAPI spec and publish it for install (internal package first). Serves C3. deps: R07.',
|
|
64
|
+
deps: ['R07'] },
|
|
65
|
+
{ ref: 'R09', kind: 'refactor', priority: 3, est: 240, crit: [C.sdk],
|
|
66
|
+
title: 'Migrate internal callers onto the client; delete duplicates',
|
|
67
|
+
description: 'Move the CLI (cli-lib apiCall), the devbox Electron app (its own gds-client), and the web UIs (per-page fetch helpers) onto the generated client; delete the 3 duplicate implementations. Cuts per-call boilerplate from ~15 lines to 1. Touches hall-ui/status-ui/dev-box. Serves C3. deps: R08.',
|
|
68
|
+
deps: ['R08'] },
|
|
69
|
+
{ ref: 'R10', kind: 'feature', priority: 3, est: 120, crit: [C.sdk],
|
|
70
|
+
title: 'External-consumer on-ramp + hello-world (proof)',
|
|
71
|
+
description: 'Document how an outside program authenticates (token acquisition beyond the interactive Device Flow) and makes its first call, with a runnable hello-world using the published client. The PROOF an external self-hoster can actually use the API. Serves C3. deps: R08.',
|
|
72
|
+
deps: ['R08'] },
|
|
73
|
+
// ---- Criterion 4: validation (Phase C) ----
|
|
74
|
+
{ ref: 'R11', kind: 'feature', priority: 3, est: 240, crit: [C.validation],
|
|
75
|
+
title: 'Spec-driven request validation: 100% writes + query params',
|
|
76
|
+
description: 'Per the R07 decision, drive validation from the spec so every write route AND its query parameters are validated, and unknown/typo\'d fields are rejected with the R02 envelope (today ~55% coverage, extras silently dropped). Serves C4 (api-validation). deps: R07.',
|
|
77
|
+
deps: ['R07'] },
|
|
78
|
+
{ ref: 'R12', kind: 'infra', priority: 3, est: 90, crit: [C.validation],
|
|
79
|
+
title: 'Build check: fail on an unvalidated write route',
|
|
80
|
+
description: 'Add a fitness check that fails the build when a write route (POST/PUT/PATCH/DELETE) has no spec-bound validation. Locks in C4\'s 100% coverage. Serves C4. deps: R11.',
|
|
81
|
+
deps: ['R11'] },
|
|
82
|
+
// ---- Criterion 5: pagination (Phase C) ----
|
|
83
|
+
{ ref: 'R13', kind: 'decision', priority: 2, est: 90, crit: [C.pagination],
|
|
84
|
+
title: 'Pagination contract + shared helper (decision)',
|
|
85
|
+
description: 'Decide one pagination convention (cursor vs limit/offset) and build the shared helper. Today three styles coexist (limit-only, limit+offset, none) with per-endpoint clamps. Serves C5 (api-pagination). deps: none (independent).',
|
|
86
|
+
deps: [] },
|
|
87
|
+
{ ref: 'R14', kind: 'refactor', priority: 2, est: 180, crit: [C.pagination],
|
|
88
|
+
title: 'Adopt the pagination contract across list endpoints; cap unbounded lists',
|
|
89
|
+
description: 'Apply the R13 helper across all list endpoints and cap the currently-unbounded public lists (leaderboard, blockers, versions). Serves C5. deps: R13.',
|
|
90
|
+
deps: ['R13'] },
|
|
91
|
+
];
|
|
92
|
+
|
|
93
|
+
(async () => {
|
|
94
|
+
const api = await cliClient();
|
|
95
|
+
const idByRef = {};
|
|
96
|
+
// Phase 1: create tasks (idempotent on source_ref) + link criteria explicitly
|
|
97
|
+
// (criterion_ids at create is not honored on this build; /criteria is idempotent).
|
|
98
|
+
for (const t of TASKS) {
|
|
99
|
+
const create = await api.tasks.postTasks({ body: {
|
|
100
|
+
version_id: 'BONGOS-V1',
|
|
101
|
+
goal_id: GOAL_ID,
|
|
102
|
+
title: t.title,
|
|
103
|
+
description: t.description,
|
|
104
|
+
kind: t.kind,
|
|
105
|
+
discipline: 'engineer',
|
|
106
|
+
priority: t.priority,
|
|
107
|
+
est_minutes: t.est,
|
|
108
|
+
source: 'planning',
|
|
109
|
+
source_ref: `BONGOS-V1-api-contract-${t.ref}`,
|
|
110
|
+
} });
|
|
111
|
+
const task = create.data && (create.data.task || create.data);
|
|
112
|
+
const id = task && task.id;
|
|
113
|
+
if (!id) { console.log(` ${t.ref}: CREATE FAILED — ${create.status} ${JSON.stringify(create.data).slice(0, 160)}`); continue; }
|
|
114
|
+
idByRef[t.ref] = id;
|
|
115
|
+
const link = await api.tasks.postTasksIdCriteria({ id, body: { criterion_ids: t.crit } });
|
|
116
|
+
console.log(` ${t.ref} -> task ${id} (${t.kind}, P${t.priority}, goal ${task.goal_id}) · criteria ${link.status === 200 ? 'ok' : (JSON.stringify(link.data).slice(0, 120))}`);
|
|
117
|
+
}
|
|
118
|
+
// Phase 2: dependency edges (idempotent on (task_id, depends_on_task_id)).
|
|
119
|
+
console.log('--- dependencies ---');
|
|
120
|
+
for (const t of TASKS) {
|
|
121
|
+
const id = idByRef[t.ref];
|
|
122
|
+
if (!id || !t.deps.length) continue;
|
|
123
|
+
for (const dep of t.deps) {
|
|
124
|
+
const depId = idByRef[dep];
|
|
125
|
+
if (!depId) { console.log(` ${t.ref}: dep ${dep} not created — skip`); continue; }
|
|
126
|
+
const r = await api.tasks.postTasksIdDependencies({ id, body: { depends_on_task_id: depId } });
|
|
127
|
+
console.log(` ${t.ref}(${id}) -> ${dep}(${depId}) ${r.status === 200 || r.status === 201 ? 'ok' : (JSON.stringify(r.data).slice(0, 120))}`);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Phase 3: promote the zero-dep, non-spike tasks to `ready` (contract-first:
|
|
131
|
+
// R01 + R05 open Phase A now; R13 is independent). R07 (spike) stays backlog.
|
|
132
|
+
console.log('--- promote (zero-dep, non-spike) ---');
|
|
133
|
+
for (const t of TASKS) {
|
|
134
|
+
if (t.deps.length || t.kind === 'spike') continue;
|
|
135
|
+
const id = idByRef[t.ref];
|
|
136
|
+
if (!id) continue;
|
|
137
|
+
const p = await api.tasks.postTasksIdPromote({ id, body: {} });
|
|
138
|
+
console.log(` ${t.ref}(${id}) promote -> ${p.status} ${p.ok ? 'ready' : JSON.stringify(p.data).slice(0, 120)}`);
|
|
139
|
+
}
|
|
140
|
+
console.log('refs:', JSON.stringify(idByRef));
|
|
141
|
+
})().catch((e) => console.log('ERR ' + (e && e.message)));
|
|
@@ -0,0 +1,294 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// Seed the 17 net-new BONGOS-V1 tasks — the Cloud Bongos desktop "Feedback
|
|
3
|
+
// Capture" app (a Zoom-style floating toolbar: record + markup over any target
|
|
4
|
+
// -> one model-agnostic prompt -> Claude Desktop/Code). The Dev Box app is
|
|
5
|
+
// absorbed as a module of this app. Visual element-select is deferred to V2.
|
|
6
|
+
// Design home: the "Bongos App — V1" plan artifact (favicon 🥁).
|
|
7
|
+
//
|
|
8
|
+
// Shape mirrors seed-bongos-tasks.js exactly:
|
|
9
|
+
// - POST /api/gds/tasks { version_id:'BONGOS-V1', criterion_ids:['C1'], ... }
|
|
10
|
+
// - POST /api/gds/tasks/:id/dependencies { depends_on_task_ids:[...] }
|
|
11
|
+
// - idempotent on source_ref (skips already-created); deps idempotent server-side.
|
|
12
|
+
// Run migration 120_bongos_v1_planning_seed.sql FIRST so the version + C1..C4 exist.
|
|
13
|
+
// After this runs, promote the zero-dependency tasks (R01/R02/R03) to 'ready'
|
|
14
|
+
// (planning-session Phase 5 step 6) — they never auto-promote.
|
|
15
|
+
//
|
|
16
|
+
// Usage: node scripts/gds/seed-bongos-app-tasks.js [--dry-run]
|
|
17
|
+
|
|
18
|
+
const { cliClient, requireSession } = require('./cli-lib');
|
|
19
|
+
|
|
20
|
+
const DRY = process.argv.includes('--dry-run');
|
|
21
|
+
|
|
22
|
+
// key = symbolic intra-version ref used in deps[]. Display R## assigned dynamically.
|
|
23
|
+
const TASKS = [
|
|
24
|
+
{
|
|
25
|
+
key: 'R01',
|
|
26
|
+
title: 'Resolve Windows code-signing cert (reuse existing Apple Developer ID for Mac)',
|
|
27
|
+
description: `Part of Bongos App V1 / C1. The launch gate for a mic+screen app: an unsigned app that asks for Screen Recording + Microphone is treated as hostile (macOS grants may not persist; Windows SmartScreen blocks first launch). The macOS half is settled — reuse the Apple Developer ID already in hand for the Dev Box app. This task resolves the Windows code-signing path (cert acquisition + electron-builder wiring decision) so packaging (R15/R16) is unblocked on both OSes.
|
|
28
|
+
|
|
29
|
+
**Done when:** the Windows signing approach is decided + the cert/identity is available (or an explicit interim "ship Mac-signed only" decision is recorded), and the Mac path is confirmed to reuse the existing Apple Developer ID.`,
|
|
30
|
+
kind: 'decision', discipline: 'engineer', priority: 3,
|
|
31
|
+
est_minutes: 30, manual_degree: 4, credits_reward: 10,
|
|
32
|
+
touches: ['bongos-app/'], criteria: ['C1'], deps: [],
|
|
33
|
+
},
|
|
34
|
+
{
|
|
35
|
+
key: 'R02',
|
|
36
|
+
title: 'Spike — transparent always-on-top click-through overlay on Mac + Windows',
|
|
37
|
+
description: `Part of Bongos App V1 / C2. De-risk the load-bearing UX primitive before building on it: an Electron transparent, frameless, always-on-top BrowserWindow with setIgnoreMouseEvents(true,{forward:true}) that lets the user draw over any other app (the Zoom annotation model). Prove the macOS type:'panel' / setVisibleOnAllWorkspaces({visibleOnFullScreen:true}) approach survives fullscreen apps + Spaces, and Windows multi-monitor / per-monitor DPI coordinate mapping.
|
|
38
|
+
|
|
39
|
+
**Done when:** a throwaway build draws a click-through overlay over a fullscreen app on macOS and over a second monitor on Windows, with the cursor passing through to the app underneath; findings (gotchas, the chosen window flags) are captured for R04.`,
|
|
40
|
+
kind: 'spike', discipline: 'engineer', priority: 4,
|
|
41
|
+
est_minutes: 180, manual_degree: 3, credits_reward: 30,
|
|
42
|
+
touches: ['bongos-app/'], criteria: ['C2'], deps: [],
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
key: 'R03',
|
|
46
|
+
title: 'Stand up the bongos-app umbrella Electron app; absorb the Dev Box app as a module',
|
|
47
|
+
description: `Part of Bongos App V1 / C1. Establish bongos-app/ as the umbrella Cloud Bongos desktop app, and bring the existing Dev Box app (devbox-app/, ADR 0045) INTO it as a module rather than a sibling install. Reuse the Dev Box app's Electron shell + app-pairing auth (writes the same ~/.config/otb/gds-session.json), branded /downloads redirect distribution, in-app updater, brand discipline (ADR 0004), and the existing Apple Developer ID. The result is one signed app that offers both the Dev Box switch and (new) the feedback toolbar.
|
|
48
|
+
|
|
49
|
+
**Done when:** bongos-app/ builds + launches as one Electron app containing the prior Dev Box functionality as a module; auth + branded distribution + updater are reused (not reimplemented); and the migration path for existing Dev Box app users is recorded.`,
|
|
50
|
+
kind: 'infra', discipline: 'engineer', priority: 5,
|
|
51
|
+
est_minutes: 360, manual_degree: 3, credits_reward: 60,
|
|
52
|
+
touches: ['bongos-app/', 'devbox-app/'], criteria: ['C1'], deps: [],
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
key: 'R04',
|
|
56
|
+
title: 'Floating toolbar + global hotkey + click-through overlay',
|
|
57
|
+
description: `Part of Bongos App V1 / C2. Cross-ref: R02 (spike), R03 (shell). Build the production floating toolbar: a small always-on-top bar summoned/dismissed by a global hotkey, plus the transparent click-through overlay window proven in R02, with macOS panel/fullscreen/Spaces handling and Windows per-monitor-DPI coordinate handling.
|
|
58
|
+
|
|
59
|
+
**Done when:** the toolbar appears over any app via a global hotkey; the overlay draws over arbitrary windows including fullscreen apps; coordinates are correct across multiple monitors / DPI scales on both OSes.`,
|
|
60
|
+
kind: 'feature', discipline: 'engineer', priority: 5,
|
|
61
|
+
est_minutes: 300, manual_degree: 2, credits_reward: 55,
|
|
62
|
+
touches: ['bongos-app/'], criteria: ['C2'], deps: ['R02', 'R03'],
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
key: 'R05',
|
|
66
|
+
title: 'First-run macOS permission wizard (Screen Recording + Microphone)',
|
|
67
|
+
description: `Part of Bongos App V1 / C1. Cross-ref: R03. A one-screen guided wizard that detects each TCC grant state (systemPreferences.getMediaAccessStatus), deep-links straight to the exact System Settings pane, and shows a live green check as each is granted. Screen Recording + Microphone are mandatory; Accessibility is requested lazily (only when rung-2 element reads land in V2), never up front. Frame the recurring (~monthly) macOS Screen-Recording re-prompt as normal.
|
|
68
|
+
|
|
69
|
+
**Done when:** on a fresh macOS install the wizard walks the user to grant Screen Recording + Microphone with live state + deep-links, and capture works immediately after; Windows (lighter: no TCC) is handled gracefully.`,
|
|
70
|
+
kind: 'feature', discipline: 'engineer', priority: 4,
|
|
71
|
+
est_minutes: 180, manual_degree: 2, credits_reward: 35,
|
|
72
|
+
touches: ['bongos-app/'], criteria: ['C1'], deps: ['R03'],
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
key: 'R06',
|
|
76
|
+
title: 'Screen/window + microphone capture + target picker',
|
|
77
|
+
description: `Part of Bongos App V1 / C2. Cross-ref: R04, R05. Use getDisplayMedia/desktopCapturer to capture a chosen window or the full screen, plus the microphone. A target picker lets the user choose WHAT to capture (and excludes the toolbar/overlay itself from the capture).
|
|
78
|
+
|
|
79
|
+
**Done when:** the user picks a target window or screen, capture streams video + mic, and the toolbar/overlay are excluded from the captured frames; works on macOS + Windows after the R05 grants.`,
|
|
80
|
+
kind: 'feature', discipline: 'engineer', priority: 5,
|
|
81
|
+
est_minutes: 240, manual_degree: 2, credits_reward: 50,
|
|
82
|
+
touches: ['bongos-app/'], criteria: ['C2'], deps: ['R04', 'R05'],
|
|
83
|
+
},
|
|
84
|
+
{
|
|
85
|
+
key: 'R07',
|
|
86
|
+
title: '~1/sec snapshot grabber + snapshot-on-change + perceptual dedup + cap',
|
|
87
|
+
description: `Part of Bongos App V1 / C2. Cross-ref: R06. Grab ~1 frame/sec off the capture stream as the token-discipline core: snapshot-on-meaningful-change rather than fixed 1/sec, perceptual-hash dedup of near-identical frames, and a hard frame cap (~60) per session. This is what keeps a session ~90x cheaper than naive full-res 1/sec.
|
|
88
|
+
|
|
89
|
+
**Done when:** frames are grabbed at ~1/sec, near-duplicate frames are dropped, a session cannot exceed the frame cap, and each kept frame carries a timestamp for later alignment.`,
|
|
90
|
+
kind: 'feature', discipline: 'engineer', priority: 4,
|
|
91
|
+
est_minutes: 180, manual_degree: 2, credits_reward: 35,
|
|
92
|
+
touches: ['bongos-app/'], criteria: ['C2'], deps: ['R06'],
|
|
93
|
+
},
|
|
94
|
+
{
|
|
95
|
+
key: 'R08',
|
|
96
|
+
title: 'Markup canvas (box/arrow/freehand/text) + freeze-frame over any window',
|
|
97
|
+
description: `Part of Bongos App V1 / C2. Cross-ref: R04. A drawing layer on the overlay: freehand, box, arrow, and text annotation over any window's pixels, plus a "freeze" that snapshots the current frame so the user can mark up a still. Markup events are timestamped (for alignment in R10) and serialized as part of the bundle.
|
|
98
|
+
|
|
99
|
+
**Done when:** the user can freeze the target and draw box/arrow/freehand/text over it; annotations export as an image + structured strokes with timestamps.`,
|
|
100
|
+
kind: 'feature', discipline: 'engineer', priority: 4,
|
|
101
|
+
est_minutes: 180, manual_degree: 2, credits_reward: 35,
|
|
102
|
+
touches: ['bongos-app/'], criteria: ['C2'], deps: ['R04'],
|
|
103
|
+
},
|
|
104
|
+
{
|
|
105
|
+
key: 'R09',
|
|
106
|
+
title: 'On-device transcription (whisper.cpp) with word timestamps',
|
|
107
|
+
description: `Part of Bongos App V1 / C3. Cross-ref: R06. Bundle whisper.cpp (small/q5 default, base fallback, large-v3-turbo opt-in) to transcribe the recorded mic audio fully on-device — privacy-respecting and effectively free, removing ~99% of the audio token cost (audio -> text). Decide lazy-download of model weights on first use vs bundling (~250-300MB).
|
|
108
|
+
|
|
109
|
+
**Done when:** recorded audio is transcribed locally to text with per-word timestamps on macOS + Windows; no audio leaves the machine; the model-weights delivery (bundle vs lazy-download) is decided + implemented.`,
|
|
110
|
+
kind: 'feature', discipline: 'engineer', priority: 4,
|
|
111
|
+
est_minutes: 240, manual_degree: 2, credits_reward: 45,
|
|
112
|
+
touches: ['bongos-app/'], criteria: ['C3'], deps: ['R06'],
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
key: 'R10',
|
|
116
|
+
title: 'Transcript <-> frame time-alignment + salience frame-escalation',
|
|
117
|
+
description: `Part of Bongos App V1 / C3. Cross-ref: R07, R08, R09. Join the word-timestamped transcript with the timestamped frame stream and the markup events, then decide which frames escalate to full resolution: the ones the speech points at (deictic words like "this/here/that"), the ones with markup, and element/freeze moments. Everything else stays a cheap thumbnail.
|
|
118
|
+
|
|
119
|
+
**Done when:** transcript segments, frames, and markup are aligned on one clock; a salience pass selects which frames escalate to full-res (capped); the output is an ordered, aligned timeline ready for prompt assembly.`,
|
|
120
|
+
kind: 'feature', discipline: 'engineer', priority: 4,
|
|
121
|
+
est_minutes: 240, manual_degree: 3, credits_reward: 50,
|
|
122
|
+
touches: ['bongos-app/'], criteria: ['C3'], deps: ['R07', 'R08', 'R09'],
|
|
123
|
+
},
|
|
124
|
+
{
|
|
125
|
+
key: 'R11',
|
|
126
|
+
title: 'Deterministic prompt.md template + bundle writer (model-agnostic)',
|
|
127
|
+
description: `Part of Bongos App V1 / C3. Cross-ref: R10. Assemble the aligned timeline into one deterministic, model-agnostic prompt.md (no LLM call by default): target context, the transcript with timestamps, attached images with captions + inlined ABSOLUTE file paths, and the ask. Write the bundle (prompt.md + frame PNGs) to a stable dir e.g. ~/CloudBongos/feedback/<id>/. Keep it agent-neutral so it feeds Claude, Cursor, Codex, etc.
|
|
128
|
+
|
|
129
|
+
**Done when:** a session produces a self-contained prompt.md + image files at a stable path, a typical session lands at the disciplined token envelope (~5-11k), and the format is documented enough for any agent to consume.`,
|
|
130
|
+
kind: 'feature', discipline: 'engineer', priority: 5,
|
|
131
|
+
est_minutes: 180, manual_degree: 2, credits_reward: 45,
|
|
132
|
+
touches: ['bongos-app/'], criteria: ['C3'], deps: ['R10'],
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
key: 'R12',
|
|
136
|
+
title: 'File-bundle + clipboard handoff for Claude Desktop',
|
|
137
|
+
description: `Part of Bongos App V1 / C4. Cross-ref: R11. The universal handoff for Claude Desktop: copy the prompt.md text to the clipboard and open the bundle folder so the user drags the images into the composer (Desktop accepts mixed text + images). Print the one-liner that tells the user exactly what to do.
|
|
138
|
+
|
|
139
|
+
**Done when:** one click puts the prompt on the clipboard + opens the folder; pasting into Claude Desktop + dragging the images produces a complete, actionable message.`,
|
|
140
|
+
kind: 'feature', discipline: 'engineer', priority: 4,
|
|
141
|
+
est_minutes: 150, manual_degree: 2, credits_reward: 30,
|
|
142
|
+
touches: ['bongos-app/'], criteria: ['C4'], deps: ['R11'],
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
key: 'R13',
|
|
146
|
+
title: '/feedback Claude Code slash command',
|
|
147
|
+
description: `Part of Bongos App V1 / C4. Cross-ref: R11. A shipped /feedback slash command that injects the latest prompt.md into a Claude Code session (cat ~/CloudBongos/feedback/latest/prompt.md) so the inlined absolute image paths let Claude's Read tool load the frames — sidestepping the unreliable CLI clipboard-image paste.
|
|
148
|
+
|
|
149
|
+
**Done when:** running /feedback in a Claude Code session pulls in the latest bundle (text + image paths Claude can Read), with no manual file wrangling.`,
|
|
150
|
+
kind: 'feature', discipline: 'engineer', priority: 4,
|
|
151
|
+
est_minutes: 120, manual_degree: 2, credits_reward: 25,
|
|
152
|
+
touches: ['.claude/skills/', 'scripts/gds/'], criteria: ['C4'], deps: ['R11'],
|
|
153
|
+
},
|
|
154
|
+
{
|
|
155
|
+
key: 'R14',
|
|
156
|
+
title: 'Local stdio MCP server — get_latest_feedback (optional "direct" path)',
|
|
157
|
+
description: `Part of Bongos App V1 / C4. Cross-ref: R11. A local stdio MCP server (bundled with the app) exposing get_latest_feedback so both Claude Desktop and Claude Code can PULL the latest bundle hands-free. CRITICAL: return image FILE PATHS, not inline base64 (inline blows the MCP tool-result size cap). Optional/stretch for V1 — the file-bundle + /feedback paths already complete the loop.
|
|
158
|
+
|
|
159
|
+
**Done when:** a connected Claude session can call get_latest_feedback and receive the prompt text + image file paths; documented as the optional "direct" handoff.`,
|
|
160
|
+
kind: 'feature', discipline: 'engineer', priority: 2,
|
|
161
|
+
est_minutes: 180, manual_degree: 2, credits_reward: 35,
|
|
162
|
+
touches: ['bongos-app/', 'scripts/'], criteria: ['C4'], deps: ['R11'],
|
|
163
|
+
},
|
|
164
|
+
{
|
|
165
|
+
key: 'R15',
|
|
166
|
+
title: 'Code-signing + notarization config (electron-builder)',
|
|
167
|
+
description: `Part of Bongos App V1 / C1. Cross-ref: R01, R03. Wire electron-builder to sign + notarize the macOS build (reusing the existing Apple Developer ID) and sign the Windows build (per the R01 decision), including the hardened-runtime entitlements and the Info.plist usage keys (NSMicrophoneUsageDescription, screen capture) a mic+screen app needs.
|
|
168
|
+
|
|
169
|
+
**Done when:** CI produces a signed + notarized macOS build and a signed Windows build that launch without Gatekeeper/SmartScreen blocks and whose TCC grants persist across relaunches.`,
|
|
170
|
+
kind: 'infra', discipline: 'engineer', priority: 3,
|
|
171
|
+
est_minutes: 180, manual_degree: 3, credits_reward: 35,
|
|
172
|
+
touches: ['bongos-app/', '.github/'], criteria: ['C1'], deps: ['R01', 'R03'],
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
key: 'R16',
|
|
176
|
+
title: 'Branded download + auto-update wiring',
|
|
177
|
+
description: `Part of Bongos App V1 / C1. Cross-ref: R15. Reuse the Dev Box app's distribution pattern: per-platform binaries published to the public releases repo, the branded server-side /downloads/* 302-redirect, and the in-app semver updater — now serving the unified bongos app.
|
|
178
|
+
|
|
179
|
+
**Done when:** users install the bongos app from the branded /downloads link on Mac + Windows and receive in-app auto-updates; the Dev Box app's old download path redirects/upgrades to the unified app.`,
|
|
180
|
+
kind: 'infra', discipline: 'engineer', priority: 3,
|
|
181
|
+
est_minutes: 150, manual_degree: 2, credits_reward: 30,
|
|
182
|
+
touches: ['bongos-app/', '.github/'], criteria: ['C1'], deps: ['R15'],
|
|
183
|
+
},
|
|
184
|
+
{
|
|
185
|
+
key: 'R17',
|
|
186
|
+
title: 'ADR + README — architecture + model-agnostic handoff contract',
|
|
187
|
+
description: `Part of Bongos App V1 / C4. Cross-ref: R11. Write the ADR recording the bongos app architecture (umbrella app absorbing Dev Box, the capture->synthesize->handoff pipeline, the Rung-3 capture floor with element-select deferred to V2) and a README documenting the bundle format + the model-agnostic prompt/handoff contract so any agent can consume it.
|
|
188
|
+
|
|
189
|
+
**Done when:** an ADR under docs/adr/ records the architecture + the bongos-as-GDS-successor intent, and a bongos-app/README.md documents the prompt.md/bundle contract + the three handoff paths.`,
|
|
190
|
+
kind: 'infra', discipline: 'engineer', priority: 3,
|
|
191
|
+
est_minutes: 120, manual_degree: 2, credits_reward: 25,
|
|
192
|
+
touches: ['docs/adr/', 'bongos-app/'], criteria: ['C4'], deps: ['R11'],
|
|
193
|
+
},
|
|
194
|
+
];
|
|
195
|
+
|
|
196
|
+
async function main() {
|
|
197
|
+
await requireSession();
|
|
198
|
+
const api = await cliClient();
|
|
199
|
+
|
|
200
|
+
// Pull the current BONGOS-V1 task list once: idempotency (skip existing
|
|
201
|
+
// source_ref) and the next free decorative R## (fresh version -> starts at R1).
|
|
202
|
+
const list = await api.tasks.getTasks({ query: { version: 'BONGOS-V1' } });
|
|
203
|
+
const existing = list.data?.tasks || [];
|
|
204
|
+
const bySourceRef = {};
|
|
205
|
+
let maxR = 0;
|
|
206
|
+
for (const t of existing) {
|
|
207
|
+
if (t.source_ref) bySourceRef[t.source_ref] = t;
|
|
208
|
+
const m = /BV1\.R(\d+)\b/.exec(t.title || '');
|
|
209
|
+
if (m) { const n = Number(m[1]); if (n > maxR) maxR = n; }
|
|
210
|
+
}
|
|
211
|
+
console.log(`context: ${existing.length} BONGOS-V1 tasks, maxR=R${maxR}`);
|
|
212
|
+
|
|
213
|
+
// Assign display R## numbers sequentially after the current max.
|
|
214
|
+
const refByKey = {};
|
|
215
|
+
TASKS.forEach((def, i) => { refByKey[def.key] = `R${String(maxR + 1 + i).padStart(2, '0')}`; });
|
|
216
|
+
|
|
217
|
+
const idByKey = {};
|
|
218
|
+
let created = 0, skipped = 0, errors = 0;
|
|
219
|
+
|
|
220
|
+
for (const def of TASKS) {
|
|
221
|
+
const r = refByKey[def.key];
|
|
222
|
+
const source_ref = `bongos-v1-${def.key.toLowerCase()}`;
|
|
223
|
+
if (bySourceRef[source_ref]) {
|
|
224
|
+
idByKey[def.key] = Number(bySourceRef[source_ref].id);
|
|
225
|
+
console.log(`SKIP ${def.key} (${r}) already exists: id=${bySourceRef[source_ref].id}`);
|
|
226
|
+
skipped++;
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
const body = {
|
|
230
|
+
version_id: 'BONGOS-V1',
|
|
231
|
+
title: `BV1.${r} — ${def.title}`,
|
|
232
|
+
description: def.description,
|
|
233
|
+
kind: def.kind,
|
|
234
|
+
discipline: def.discipline,
|
|
235
|
+
status: 'backlog',
|
|
236
|
+
priority: def.priority,
|
|
237
|
+
est_minutes: def.est_minutes,
|
|
238
|
+
manual_degree: def.manual_degree,
|
|
239
|
+
credits_reward: def.credits_reward,
|
|
240
|
+
touches: def.touches || [],
|
|
241
|
+
criterion_ids: def.criteria || [],
|
|
242
|
+
source: 'planning-session',
|
|
243
|
+
source_ref,
|
|
244
|
+
};
|
|
245
|
+
if (DRY) {
|
|
246
|
+
const deps = (def.deps || []).map((d) => (refByKey[d] ? `${d}=${refByKey[d]}` : d)).join(',');
|
|
247
|
+
console.log(`DRY ${def.key} -> ${r} P${def.priority} ${def.kind} crit=${(def.criteria || []).join('/')} deps=[${deps}] ${def.title.slice(0, 52)}`);
|
|
248
|
+
continue;
|
|
249
|
+
}
|
|
250
|
+
const res = await api.tasks.postTasks({ body });
|
|
251
|
+
if (res.status !== 201) {
|
|
252
|
+
console.error(`FAIL ${def.key}: status=${res.status} ${JSON.stringify(res.data).slice(0, 220)}`);
|
|
253
|
+
errors++;
|
|
254
|
+
continue;
|
|
255
|
+
}
|
|
256
|
+
idByKey[def.key] = Number(res.data.task.id);
|
|
257
|
+
console.log(`OK ${def.key} -> BV1.${r} task id=${idByKey[def.key]} (crit ${(def.criteria || []).join('/')})`);
|
|
258
|
+
created++;
|
|
259
|
+
}
|
|
260
|
+
|
|
261
|
+
const resolveDep = (ref) => idByKey[ref] ?? null;
|
|
262
|
+
|
|
263
|
+
let depsWired = 0, depErrors = 0;
|
|
264
|
+
if (!DRY) {
|
|
265
|
+
for (const def of TASKS) {
|
|
266
|
+
const deps = def.deps || [];
|
|
267
|
+
if (deps.length === 0) continue;
|
|
268
|
+
const taskId = idByKey[def.key];
|
|
269
|
+
if (!taskId) { console.error(`DEPS ${def.key}: no task id (create failed?), skipping`); depErrors++; continue; }
|
|
270
|
+
const depIds = deps.map(resolveDep).filter((n) => Number.isFinite(n));
|
|
271
|
+
if (depIds.length !== deps.length) {
|
|
272
|
+
const missing = deps.filter((d) => !Number.isFinite(resolveDep(d)));
|
|
273
|
+
console.error(`DEPS ${def.key}: unresolved deps [${missing.join(',')}] — wiring the resolvable ones only`);
|
|
274
|
+
depErrors++;
|
|
275
|
+
if (depIds.length === 0) continue;
|
|
276
|
+
}
|
|
277
|
+
const res = await api.tasks.postTasksIdDependencies({ id: taskId, body: { depends_on_task_ids: depIds } });
|
|
278
|
+
if (res.status === 200) {
|
|
279
|
+
console.log(`DEPS ${def.key} <- [${deps.join(',')}] (ids ${depIds.join(',')})`);
|
|
280
|
+
depsWired++;
|
|
281
|
+
} else {
|
|
282
|
+
console.error(`DEPS FAIL ${def.key}: ${res.status} ${JSON.stringify(res.data).slice(0, 220)}`);
|
|
283
|
+
depErrors++;
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
}
|
|
287
|
+
|
|
288
|
+
const zeroDep = TASKS.filter((d) => (d.deps || []).length === 0).map((d) => `${d.key}=${idByKey[d.key] || '?'}`);
|
|
289
|
+
console.log(`\nDONE created=${created} skipped=${skipped} errors=${errors} deps_wired=${depsWired} dep_errors=${depErrors} (manifest: ${TASKS.length})`);
|
|
290
|
+
console.log(`NEXT promote zero-dependency tasks to 'ready' (they never auto-promote): ${zeroDep.join(', ')}`);
|
|
291
|
+
process.exit(errors === 0 && depErrors === 0 ? 0 : 1);
|
|
292
|
+
}
|
|
293
|
+
|
|
294
|
+
main().catch((err) => { console.error('FATAL', err); process.exit(1); });
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
// seed-bongos-coreB-tranche1-tasks.js
|
|
3
|
+
// Seeds BONGOS-V1 criterion C7 (gds-core-modularized) — the "Config B" core
|
|
4
|
+
// decomposition wave, tranche 1: kernel boundary + db.js per-domain carve +
|
|
5
|
+
// proving carve (memory, grading). Planning session 2026-06-26 (task 1567).
|
|
6
|
+
// Idempotent on source_ref; criterion links + dependency edges idempotent too.
|
|
7
|
+
// Run: node scripts/gds/seed-bongos-coreB-tranche1-tasks.js
|
|
8
|
+
const os = require('os');
|
|
9
|
+
const TOKEN = require(os.homedir() + '/.config/otb/gds-session.json').token;
|
|
10
|
+
const BASE = process.env.GDS_BASE || 'https://amazonprimea.com';
|
|
11
|
+
const H = { Authorization: `Bearer ${TOKEN}`, 'Content-Type': 'application/json' };
|
|
12
|
+
|
|
13
|
+
// ref → task spec. depends_on_refs are local R## refs resolved after create.
|
|
14
|
+
const TASKS = [
|
|
15
|
+
{ ref: 'R67', kind: 'spike', priority: 5, title: 'BV1.R67 — Define + bound the kernel (ADR amending 0083)',
|
|
16
|
+
description: 'Spike → ADR amending 0083: fix the KERNEL file roster (auth · rank · pool · audit · permission-path-check · route-rank-check · config/identity · loader · seams), decide the db.js per-domain carve strategy, and the fix for the doorway leaking domain queries (getBuilderById/createTask/insertAuditLog re-exported from module-api.js). Output: ADR + a sub-task shape for the carve. GATES the whole C7 tranche. The audit found the "kernel" is currently only the 6 loader-machinery files; this defines the real ~3.5k-LOC trust kernel. deps: none.',
|
|
17
|
+
deps: [] },
|
|
18
|
+
{ ref: 'R68', kind: 'feature', priority: 5, title: 'BV1.R68 — Doorway surface for core domains (withTx + stop leaking db.js)',
|
|
19
|
+
description: 'Add `withTx` (BEGIN/COMMIT wrapper) + any shared primitives a core-domain module needs to module-api.js; minor CORE_VERSION bump. Stop re-exporting domain-specific queries through the doorway (relocate/deprecate getBuilderById, createTask, insertAuditLog, getBuilderGeminiKeyRow — these belong to their domains, not the kernel). deps: R67.',
|
|
20
|
+
deps: ['R67'] },
|
|
21
|
+
{ ref: 'R69', kind: 'refactor', priority: 5, title: 'BV1.R69 — Per-domain db.js access pattern + carve the reference slice',
|
|
22
|
+
description: 'Establish HOW a carved core domain owns its SQL (module gets pool+withTx via the doorway and owns its queries; db.js shrinks per-domain). Prove the pattern on one reference slice. This is the mechanism every later carve copies. deps: R67, R68.',
|
|
23
|
+
deps: ['R67', 'R68'] },
|
|
24
|
+
{ ref: 'R70', kind: 'infra', priority: 4, title: 'BV1.R70 — Fitness: real KERNEL_FILES roster + kernel-imports-no-domain',
|
|
25
|
+
description: 'Replace fitness.js KERNEL_FILES (currently just the 6 loader-machinery files) with the true kernel roster from R67; add a check that the kernel imports no soon-to-be-module domain. Ratchets the boundary so core-carve regressions are a red build. deps: R67.',
|
|
26
|
+
deps: ['R67'] },
|
|
27
|
+
{ ref: 'R71', kind: 'infra', priority: 4, title: 'BV1.R71 — Register new core module keys in module-scope-map.js',
|
|
28
|
+
description: 'Add the new core module keys (memory, grading, and the tranche-2 domains as they are scoped) to src/bongos/module-scope-map.js so goals (scope walls), task→module affinity, and ship-time diff⊆module drift detection work for them. Then widen goal 10 (GDS core modularization) scope to include them via POST /goals/10/scope. deps: R67.',
|
|
29
|
+
deps: ['R67'] },
|
|
30
|
+
{ ref: 'R72', kind: 'refactor', priority: 4, title: 'BV1.R72 — Carve memory → modules/memory/',
|
|
31
|
+
description: 'Move memory/recall/search/learnings (~2.2k LOC: memory.js, search.js, search-chunker.js, learnings.js + routes) into modules/memory/ with its tables + db.js slice (per the R69 pattern). Cleanest db.js-split proof — the design scan shows memory slices cleanly. OTB byte-identical. deps: R69, R71.',
|
|
32
|
+
deps: ['R69', 'R71'] },
|
|
33
|
+
{ ref: 'R73', kind: 'refactor', priority: 4, title: 'BV1.R73 — Carve grading → modules/grading/, lifecycle resolves grade via a kernel PORT',
|
|
34
|
+
description: 'Move the grader + worker panel (~3.1k LOC) into modules/grading/. The lifecycle (tasks.js ship path) stops importing the grader directly and instead resolves a `grade` capability via a kernel PORT (registerProvider/resolve). Proves the design\'s "keep the state machine whole, extract the capability behind a seam" pattern AND closes the audit\'s unimplemented-port gap (reward/grade were illustrative-only). deps: R68, R69, R71.',
|
|
35
|
+
deps: ['R68', 'R69', 'R71'] },
|
|
36
|
+
{ ref: 'R74', kind: 'verify', priority: 3, title: 'BV1.R74 — Proof: the core-carve pattern holds (memory + grading as modules)',
|
|
37
|
+
description: 'Prove C7\'s tranche-1: memory + grading live as modules/, db.js shrank by their slices, the kernel is bounded + fitness green (R70), a capability resolves via a kernel port (R73), and OTB behaves byte-identically. The single live demonstration the criterion hinges on for tranche 1. deps: R72, R73.',
|
|
38
|
+
deps: ['R72', 'R73'] },
|
|
39
|
+
];
|
|
40
|
+
|
|
41
|
+
async function post(path, body) {
|
|
42
|
+
const r = await fetch(BASE + path, { method: 'POST', headers: H, body: JSON.stringify(body) });
|
|
43
|
+
return { status: r.status, json: await r.json().catch(() => ({})) };
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
(async () => {
|
|
47
|
+
const idByRef = {};
|
|
48
|
+
// Phase 1: create tasks (idempotent on source_ref), link C7 at create.
|
|
49
|
+
for (const t of TASKS) {
|
|
50
|
+
const body = {
|
|
51
|
+
version_id: 'BONGOS-V1', title: t.title, description: t.description,
|
|
52
|
+
kind: t.kind, discipline: 'engineer', priority: t.priority,
|
|
53
|
+
criterion_ids: ['C7'],
|
|
54
|
+
source: 'planning', source_ref: `BONGOS-V1-coreB-${t.ref}`,
|
|
55
|
+
};
|
|
56
|
+
let { status, json } = await post('/api/gds/tasks', body);
|
|
57
|
+
let id = json.id || (json.task && json.task.id);
|
|
58
|
+
if (!id && t.kind === 'verify') {
|
|
59
|
+
// memory: kind=verify has 500'd before (idea #357). Fall back, keep going.
|
|
60
|
+
console.log(` ${t.ref}: kind=verify failed (${json.error || status}); retrying as kind=feature`);
|
|
61
|
+
({ status, json } = await post('/api/gds/tasks', { ...body, kind: 'feature' }));
|
|
62
|
+
id = json.id || (json.task && json.task.id);
|
|
63
|
+
}
|
|
64
|
+
if (!id) { console.log(` ${t.ref}: CREATE FAILED — ${status} ${JSON.stringify(json).slice(0, 160)}`); continue; }
|
|
65
|
+
idByRef[t.ref] = id;
|
|
66
|
+
console.log(` ${t.ref} -> task ${id} (${t.kind}, P${t.priority})`);
|
|
67
|
+
}
|
|
68
|
+
// Phase 2: wire dependencies (idempotent on (task_id, depends_on_task_id)).
|
|
69
|
+
console.log('--- dependencies ---');
|
|
70
|
+
for (const t of TASKS) {
|
|
71
|
+
const id = idByRef[t.ref];
|
|
72
|
+
if (!id || !t.deps.length) continue;
|
|
73
|
+
for (const dep of t.deps) {
|
|
74
|
+
const depId = idByRef[dep];
|
|
75
|
+
if (!depId) { console.log(` ${t.ref}: dep ${dep} not created — skip`); continue; }
|
|
76
|
+
const { status, json } = await post(`/api/gds/tasks/${id}/dependencies`, { depends_on_task_id: depId });
|
|
77
|
+
console.log(` ${t.ref}(${id}) depends on ${dep}(${depId}) -> ${status === 200 || status === 201 ? 'ok' : (json.error || status)}`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
console.log('refs:', JSON.stringify(idByRef));
|
|
81
|
+
})();
|