@bongos/core 1.18.3 → 1.18.18
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 +1575 -285
- package/.claude/skills/builder-box/SKILL.md +6 -0
- package/.claude/skills/builder-sequence/SKILL.md +97 -0
- package/.claude/skills/builder-ship/SKILL.md +8 -2
- package/.claude/skills/builder-start/SKILL.md +11 -0
- package/.claude/skills/builder-sync/SKILL.md +41 -0
- package/.claude/skills/fix-task/SKILL.md +64 -0
- package/.claude/skills/goal-create/SKILL.md +158 -0
- package/.claude/skills/goal-review/SKILL.md +3 -1
- package/.claude/skills/idea-triage/SKILL.md +14 -8
- package/.claude/skills/merge-mode/SKILL.md +2 -2
- package/.claude/skills/new-project/SKILL.md +1 -0
- package/.claude/skills/planning-session/SKILL.md +45 -18
- package/.env.local.example +4 -3
- package/README.md +4 -2
- package/bin/bongos.js +1 -0
- package/clients/bongos-client/README.md +2 -2
- package/clients/bongos-client/bongos-client.global.js +82 -18
- package/clients/bongos-client/index.cjs +82 -18
- package/clients/bongos-client/index.d.ts +131 -29
- package/clients/bongos-client/index.mjs +82 -18
- package/config/branding.neutral.json +6 -1
- package/config/governance.neutral.json +21 -0
- package/docs/adr/0043-git-ssh-trust-boundary-and-rank-floor-on-permission-paths.md +24 -0
- package/docs/adr/0090-metic-task-authoring.md +1 -1
- package/docs/adr/0144-devbox-rehome-onto-cloudbongos-plane.md +41 -0
- package/docs/adr/0144-federated-single-logout-backchannel.md +42 -0
- package/docs/adr/0145-devbox-app-branding-driven-module.md +44 -0
- package/docs/adr/0145-free-hosted-project-tier-isolation-and-domain-separation.md +62 -0
- package/docs/adr/0146-configurable-reward-mode-cost-plus-only.md +53 -0
- package/docs/adr/0147-standalone-live-docs-regen.md +39 -0
- package/docs/adr/0148-task-scoped-box-source-access.md +48 -0
- package/docs/adr/0149-bongos-dev-local-launcher.md +57 -0
- package/docs/adr/0150-box-first-boot-bringup-vendored-instances.md +68 -0
- package/docs/adr/0151-governance-permissions-as-atom-ranks-as-roles.md +229 -0
- package/docs/adr/0152-landing-gate-served-by-the-core-app.md +92 -0
- package/docs/adr/0152-metic-task-abandonment.md +67 -0
- package/docs/adr/0153-sequential-chain-runner.md +51 -0
- package/docs/adr/0154-goal-owner-criterion-authoring.md +86 -0
- package/docs/adr/README.md +10 -0
- package/docs/api/openapi.json +843 -17
- package/docs/api-reference.md +23 -10
- package/docs/architecture.md +4 -2
- package/docs/branding-contract.md +3 -1
- package/docs/canonical-permissions.md +21 -8
- package/docs/file-map.md +8 -0
- package/docs/onboarding/diagrams/01-task-lifecycle.mmd +2 -2
- package/docs/onboarding/diagrams/02-rank-ladder.mmd +3 -1
- package/docs/onboarding/diagrams/05-versioning.mmd +1 -3
- package/docs/onboarding/diagrams/assertions.json +4 -7
- package/docs/onboarding/drachmae-and-karma.md +3 -3
- package/docs/onboarding/primer.md +17 -16
- package/docs/onboarding/slash-commands.md +124 -0
- package/docs/recipes/builder-box-lifecycle.md +23 -0
- package/docs/recipes/devbox-app-release.md +14 -4
- package/docs/recipes/instance-first-run.md +16 -0
- package/docs/recipes/local-dev.md +81 -0
- package/docs/recipes/ops-gotchas.md +19 -1
- package/docs/recipes/overnight-builder.md +1 -1
- package/docs/recipes/parallel-goal-waves.md +174 -0
- package/docs/recipes/ship-and-regrade.md +2 -2
- package/docs/recipes/standalone-live-docs.md +48 -0
- package/docs/recipes/work-on-a-task-from-your-dev-box.md +108 -0
- package/migrations/003_pms.sql +6 -7
- package/migrations/006_pms_v2.sql +3 -31
- package/migrations/core_193_task_needs_rebase.sql +28 -0
- package/migrations/core_194_confirmed_backlog_clawback.sql +63 -0
- package/migrations/core_195_idea_triage_provenance.sql +57 -0
- package/migrations/core_196_session_reward_topup.sql +69 -0
- package/modules/autonomy/pollers/routine-timers.js +9 -8
- package/modules/builder-settings/wandering-prefs.js +61 -18
- package/modules/dev-box/app/README.md +73 -0
- package/modules/dev-box/app/assets/tray/mac-alertTemplate.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-alertTemplate@2x.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-busyTemplate.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-busyTemplate@2x.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-offTemplate.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-offTemplate@2x.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-onTemplate.png +0 -0
- package/modules/dev-box/app/assets/tray/mac-onTemplate@2x.png +0 -0
- package/modules/dev-box/app/assets/tray/win-alert.png +0 -0
- package/modules/dev-box/app/assets/tray/win-busy.png +0 -0
- package/modules/dev-box/app/assets/tray/win-off.png +0 -0
- package/modules/dev-box/app/assets/tray/win-on.png +0 -0
- package/modules/dev-box/app/build-resources/dmg-background.png +0 -0
- package/modules/dev-box/app/build-resources/dmg-background@2x.png +0 -0
- package/modules/dev-box/app/build-resources/icon.png +0 -0
- package/modules/dev-box/app/electron-builder.tmpl.yml +95 -0
- package/modules/dev-box/app/electron-builder.yml +95 -0
- package/modules/dev-box/app/package-lock.json +5291 -0
- package/modules/dev-box/app/package.json +30 -0
- package/modules/dev-box/app/renderer/app.js +319 -0
- package/modules/dev-box/app/renderer/index.html +45 -0
- package/modules/dev-box/app/renderer/styles.css +246 -0
- package/modules/dev-box/app/renderer/theme.generated.css +16 -0
- package/modules/dev-box/app/scripts/apply-dmg-backdrop.sh +82 -0
- package/modules/dev-box/app/scripts/dmgbuild-settings.py +39 -0
- package/modules/dev-box/app/scripts/gen-brand.js +138 -0
- package/modules/dev-box/app/scripts/gen-dmg-backdrop.py +323 -0
- package/modules/dev-box/app/scripts/gen-icons.js +286 -0
- package/modules/dev-box/app/scripts/vendor-client.js +23 -0
- package/modules/dev-box/app/src/box-controller.js +287 -0
- package/modules/dev-box/app/src/brand.generated.json +13 -0
- package/modules/dev-box/app/src/brand.js +16 -0
- package/modules/dev-box/app/src/config.js +19 -0
- package/modules/dev-box/app/src/gds-client.js +90 -0
- package/modules/dev-box/app/src/main.js +610 -0
- package/modules/dev-box/app/src/pairing.js +57 -0
- package/modules/dev-box/app/src/preload.js +29 -0
- package/modules/dev-box/app/src/session-store.js +58 -0
- package/modules/dev-box/app/src/ssh-setup.js +569 -0
- package/modules/dev-box/app/src/task-picker.js +70 -0
- package/modules/dev-box/app/src/tray.js +99 -0
- package/modules/dev-box/app/src/updater.js +55 -0
- package/modules/dev-box/app/src/vendor/bongos-client.cjs +698 -0
- package/modules/dev-box/app/test/unit.mjs +526 -0
- package/modules/dev-box/box-access.js +121 -4
- package/modules/dev-box/boxes.js +20 -0
- package/modules/dev-box/module.json +1 -1
- package/modules/dev-box/routes/box.js +87 -3
- package/modules/economy/credits.js +116 -25
- package/modules/economy/reward.js +8 -0
- package/modules/economy/streak.js +2 -1
- package/modules/governance/CLAUDE.md +15 -0
- package/modules/governance/catalog.js +419 -0
- package/modules/governance/config.js +174 -0
- package/modules/governance/db.js +125 -0
- package/modules/governance/migrations/governance_001_tables.sql +81 -0
- package/modules/governance/migrations/governance_002_seed_and_backfill.sql +103 -0
- package/modules/governance/migrations/governance_003_task_abandon_metic.sql +28 -0
- package/modules/governance/migrations/governance_004_criterion_create.sql +39 -0
- package/modules/governance/migrations/governance_005_resync_builder_rank_roles.sql +56 -0
- package/modules/governance/module.json +10 -0
- package/modules/governance/protected-surfaces.js +88 -0
- package/modules/governance/protected-surfaces.json +80 -0
- package/modules/governance/rank-roles.js +83 -0
- package/modules/governance/resolver.js +221 -0
- package/modules/governance/routes/governance.js +89 -0
- package/modules/governance/routes/role-sync.js +49 -0
- package/modules/governance/session-scopes.js +127 -0
- package/modules/governance/session-scopes.json +38 -0
- package/modules/hall-ui/public/atlas.css +117 -0
- package/modules/hall-ui/public/atlas.html +3 -114
- package/modules/hall-ui/public/brand-apply.js +34 -6
- package/modules/hall-ui/public/builders.js +187 -219
- package/modules/hall-ui/public/diagrams.html +2 -0
- package/modules/hall-ui/public/dom-utils.js +27 -0
- package/modules/hall-ui/public/drachmae.html +2 -0
- package/modules/hall-ui/public/drachmae.js +54 -1
- package/modules/hall-ui/public/gate.css +98 -0
- package/modules/hall-ui/public/gate.html +3 -95
- package/modules/hall-ui/public/goal-inbox.js +4 -1
- package/modules/hall-ui/public/goals-page.js +626 -114
- package/modules/hall-ui/public/goals.css +79 -1
- package/modules/hall-ui/public/goals.html +38 -11
- package/modules/hall-ui/public/hall-widgets.js +62 -52
- package/modules/hall-ui/public/harbor.css +123 -0
- package/modules/hall-ui/public/harbor.html +3 -120
- package/modules/hall-ui/public/index.html +11 -4
- package/modules/hall-ui/public/instances-panel.js +4 -1
- package/modules/hall-ui/public/modules.css +63 -0
- package/modules/hall-ui/public/modules.html +3 -60
- package/modules/hall-ui/public/new-project-wizard.js +7 -3
- package/modules/hall-ui/public/not-ready.html +2 -0
- package/modules/hall-ui/public/pair.css +73 -0
- package/modules/hall-ui/public/pair.html +3 -70
- package/modules/hall-ui/public/palette.js +302 -0
- package/modules/hall-ui/public/primer.css +13 -0
- package/modules/hall-ui/public/primer.html +2 -0
- package/modules/hall-ui/public/profile.html +2 -0
- package/modules/hall-ui/public/ranks.html +2 -0
- package/modules/hall-ui/public/roadmap.css +179 -0
- package/modules/hall-ui/public/roadmap.html +9 -172
- package/modules/hall-ui/public/roadmap.js +329 -316
- package/modules/hall-ui/public/sessions.css +16 -0
- package/modules/hall-ui/public/sessions.html +3 -13
- package/modules/hall-ui/public/settings.html +2 -0
- package/modules/hall-ui/public/settings.js +4 -4
- package/modules/hall-ui/public/shell.js +143 -18
- package/modules/hall-ui/public/style.css +231 -39
- package/modules/hall-ui/public/task-detail.js +347 -26
- package/modules/hall-ui/public/task.html +6 -1
- package/modules/hall-ui/public/watch.html +2 -0
- package/modules/hall-ui/public/work.html +8 -6
- package/modules/hall-ui/public/work.js +1 -1
- package/modules/ideas/inbox.js +61 -11
- package/modules/ideas/routes/inbox.js +23 -0
- package/modules/lifecycle/claim-eligibility.js +72 -0
- package/modules/lifecycle/db.js +519 -139
- package/modules/lifecycle/done-when.js +18 -3
- package/modules/lifecycle/github-push.js +19 -2
- package/modules/lifecycle/goal-advisory.js +114 -0
- package/modules/lifecycle/goal-authz.js +62 -0
- package/modules/lifecycle/lifecycle.js +9 -0
- package/modules/lifecycle/publish-reconciler.js +109 -6
- package/modules/lifecycle/routes/claims.js +68 -23
- package/modules/lifecycle/routes/done-when.js +110 -15
- package/modules/lifecycle/routes/goals.js +8 -38
- package/modules/lifecycle/routes/tasks.js +38 -6
- package/modules/lifecycle/ship-card.js +6 -0
- package/modules/onboarding/onboarding-state.js +1 -1
- package/modules/platform-identity/CLAUDE.md +15 -0
- package/modules/platform-identity/hub-device.js +147 -0
- package/modules/platform-identity/hub-keys.js +151 -0
- package/modules/platform-identity/migrations/platform_identity_001_tables.sql +114 -0
- package/modules/platform-identity/migrations/platform_identity_002_client_origin_index.sql +18 -0
- package/modules/platform-identity/migrations/platform_identity_003_project_memberships.sql +42 -0
- package/modules/platform-identity/migrations/platform_identity_004_projects.sql +44 -0
- package/modules/platform-identity/migrations/platform_identity_005_builder_activity.sql +42 -0
- package/modules/platform-identity/module.json +18 -0
- package/modules/platform-identity/platform-identity.js +531 -0
- package/modules/platform-identity/pollers/code-sweep.js +43 -0
- package/modules/platform-identity/routes/my-projects.js +140 -0
- package/modules/platform-identity/routes/projects.js +107 -0
- package/modules/platform-identity/routes/scouting.js +35 -0
- package/modules/platform-identity/routes/sso.js +402 -0
- package/modules/platform-identity/tests/platform-identity.mjs +388 -0
- package/modules/platform-identity/ui/.gitkeep +0 -0
- package/modules/security/routes/reports.js +10 -0
- package/modules/sessions/db.js +166 -21
- package/modules/sessions/module.json +1 -1
- package/modules/sessions/pollers/session-reward-reconcile.js +78 -0
- package/modules/sessions/routes/sessions.js +33 -0
- package/package-lock.json +2 -2
- package/package.json +1 -1
- package/public-landing/assets/anim/idle/frame_00.webp +0 -0
- package/public-landing/assets/anim/idle/frame_01.webp +0 -0
- package/public-landing/assets/anim/idle/frame_02.webp +0 -0
- package/public-landing/assets/anim/idle/frame_03.webp +0 -0
- package/public-landing/assets/anim/idle/frame_04.webp +0 -0
- package/public-landing/assets/anim/idle/frame_05.webp +0 -0
- package/public-landing/assets/anim/idle/frame_06.webp +0 -0
- package/public-landing/assets/anim/idle/frame_07.webp +0 -0
- package/public-landing/assets/anim/idle/frame_08.webp +0 -0
- package/public-landing/assets/anim/idle/frame_09.webp +0 -0
- package/public-landing/assets/anim/idle/frame_10.webp +0 -0
- package/public-landing/assets/anim/idle/frame_11.webp +0 -0
- package/public-landing/assets/anim/idle/frame_12.webp +0 -0
- package/public-landing/assets/anim/idle/frame_13.webp +0 -0
- package/public-landing/assets/anim/idle/frame_14.webp +0 -0
- package/public-landing/assets/anim/idle/frame_15.webp +0 -0
- package/public-landing/assets/anim/idle/frame_16.webp +0 -0
- package/public-landing/assets/anim/idle/frame_17.webp +0 -0
- package/public-landing/assets/anim/idle/frame_18.webp +0 -0
- package/public-landing/assets/anim/idle/frame_19.webp +0 -0
- package/public-landing/assets/anim/idle/frame_20.webp +0 -0
- package/public-landing/assets/anim/idle/frame_21.webp +0 -0
- package/public-landing/assets/anim/idle/frame_22.webp +0 -0
- package/public-landing/assets/anim/idle/frame_23.webp +0 -0
- package/public-landing/assets/anim/idle/frame_24.webp +0 -0
- package/public-landing/assets/anim/idle/frame_25.webp +0 -0
- package/public-landing/assets/anim/idle/frame_26.webp +0 -0
- package/public-landing/assets/anim/idle/frame_27.webp +0 -0
- package/public-landing/assets/anim/idle/frame_28.webp +0 -0
- package/public-landing/assets/anim/idle/frame_29.webp +0 -0
- package/public-landing/assets/anim/idle/frame_30.webp +0 -0
- package/public-landing/assets/anim/idle/frame_31.webp +0 -0
- package/public-landing/assets/anim/idle/frame_32.webp +0 -0
- package/public-landing/assets/anim/idle/frame_33.webp +0 -0
- package/public-landing/assets/anim/idle/frame_34.webp +0 -0
- package/public-landing/assets/anim/idle/frame_35.webp +0 -0
- package/public-landing/assets/anim/idle/frame_36.webp +0 -0
- package/public-landing/assets/anim/idle/frame_37.webp +0 -0
- package/public-landing/assets/anim/idle/frame_38.webp +0 -0
- package/public-landing/assets/anim/idle/frame_39.webp +0 -0
- package/public-landing/assets/anim/idle/frame_40.webp +0 -0
- package/public-landing/assets/anim/idle/frame_41.webp +0 -0
- package/public-landing/assets/anim/idle/frame_42.webp +0 -0
- package/public-landing/assets/anim/idle/frame_43.webp +0 -0
- package/public-landing/create.html +51 -58
- package/public-landing/gate/README.md +137 -0
- package/public-landing/gate/dispmaps/bar.png +0 -0
- package/public-landing/gate/dispmaps/flat.png +0 -0
- package/public-landing/gate/dispmaps/key.png +0 -0
- package/public-landing/gate/index.html +587 -0
- package/public-landing/gate/previews/cloud-bongos.jpg +0 -0
- package/public-landing/gate/previews/off-the-boats.jpg +0 -0
- package/public-landing/gate/space.css +799 -0
- package/public-landing/gate/space.js +1826 -0
- package/public-landing/gate/sprites/enter.png +0 -0
- package/public-landing/gate/sprites/search.png +0 -0
- package/public-landing/gate/sprites/terminal-blank.png +0 -0
- package/public-landing/gate/sprites/tile.png +0 -0
- package/public-landing/world/assets/clouds/cloud-island-large.png +0 -0
- package/public-landing/world/assets/clouds/cloud-puff.png +0 -0
- package/public-landing/world/assets/creatures/creature-whale-cargo.png +0 -0
- package/public-landing/world/assets/creatures/creature-whale-glide.png +0 -0
- package/public-landing/world/assets/plates/plate-clouds-near.png +0 -0
- package/public-landing/world/assets/plates/scene-establishing.png +0 -0
- package/scripts/gds/abandon.js +6 -4
- package/scripts/gds/api.js +10 -5
- package/scripts/gds/api.ps1 +26 -0
- package/scripts/gds/api.sh +6 -0
- package/scripts/gds/audit-ships.js +7 -1
- package/scripts/gds/backfill-sessions.js +78 -18
- package/scripts/gds/backup.js +23 -1
- package/scripts/gds/box-connect-lib.js +124 -31
- package/scripts/gds/box-sync.js +66 -0
- package/scripts/gds/box.js +225 -53
- package/scripts/gds/cf-tunnel.js +145 -6
- package/scripts/gds/claim.js +34 -3
- package/scripts/gds/cli-lib.js +161 -27
- package/scripts/gds/code.js +6 -2
- package/scripts/gds/deploy-divergence.js +209 -0
- package/scripts/gds/dev-lib.js +309 -0
- package/scripts/gds/dev.js +322 -0
- package/scripts/gds/doctor.js +90 -61
- package/scripts/gds/fetch-art-key.js +1 -1
- package/scripts/gds/fetch-sound-prefs.js +2 -2
- package/scripts/gds/fitness.js +228 -12
- package/scripts/gds/gds-db-backup.service +16 -1
- package/scripts/gds/gds-db-offsite.service +9 -1
- package/scripts/gds/gen-api-client.js +1 -1
- package/scripts/gds/gen-api-docs.js +36 -14
- package/scripts/gds/gen-diagrams.js +45 -28
- package/scripts/gds/gen-file-map.js +2 -1
- package/scripts/gds/gen-freshness.js +32 -0
- package/scripts/gds/gen-repo-map.js +3 -2
- package/scripts/gds/gen-session-index.js +14 -5
- package/scripts/gds/hooks/pre-push.js +2 -2
- package/scripts/gds/init.js +60 -3
- package/scripts/gds/install-git-hooks.js +1 -1
- package/scripts/gds/key-card.js +15 -6
- package/scripts/gds/key-status.js +1 -1
- package/scripts/gds/linkify-refs.js +35 -9
- package/scripts/gds/login.js +16 -1
- package/scripts/gds/paste-token.js +7 -1
- package/scripts/gds/preflight.js +126 -0
- package/scripts/gds/provision.js +123 -12
- package/scripts/gds/publish-manifest.js +7 -1
- package/scripts/gds/reauth.js +7 -3
- package/scripts/gds/regen-instance-docs.js +47 -0
- package/scripts/gds/run-unit-tests.js +4 -2
- package/scripts/gds/seed-bongos-v1-seo-tasks.js +104 -0
- package/scripts/gds/seed-bv1-profiles-tasks.js +126 -0
- package/scripts/gds/sequence.js +425 -0
- package/scripts/gds/session-cost.js +10 -1
- package/scripts/gds/setup.js +31 -5
- package/scripts/gds/shell.js +5 -3
- package/scripts/gds/ship.js +319 -29
- package/scripts/gds/smoke-gds.js +139 -8
- package/scripts/gds/start.js +171 -22
- package/scripts/gds/status.js +1 -1
- package/scripts/gds/triage.js +10 -9
- package/scripts/gds/upgrade.js +124 -2
- package/scripts/status-mirror-sync.js +114 -84
- package/src/bongos/api-errors.js +1 -0
- package/src/bongos/auth.js +447 -102
- package/src/bongos/db-kernel.js +27 -0
- package/src/bongos/db.js +39 -0
- package/src/bongos/module-scope-map.js +27 -1
- package/src/bongos/permission-path-check.js +136 -102
- package/src/bongos/repo-info.js +47 -11
- package/src/bongos/route-rank-check.js +429 -46
- package/src/bongos/routes/_helpers.js +12 -1
- package/src/bongos/routes/auth.js +219 -2
- package/src/bongos/routes/backup.js +58 -2
- package/src/bongos/routes/me.js +35 -1
- package/src/bongos/serve-internal.js +84 -15
- package/src/branding.js +32 -0
- package/src/instance-config.js +30 -0
- package/src/module-api.js +112 -1
- package/src/platform-server.js +86 -9
- package/tests/abandon_task.mjs +59 -3
- package/tests/api_cli_flags.mjs +53 -0
- package/tests/auth_page_gate.mjs +13 -0
- package/tests/backfill_sessions.mjs +127 -1
- package/tests/backup_cli.mjs +54 -0
- package/tests/bongos_box_connect.mjs +77 -0
- package/tests/box_access.mjs +130 -1
- package/tests/box_credential.mjs +125 -0
- package/tests/box_host_keys.mjs +24 -0
- package/tests/box_infra_resolve.mjs +149 -0
- package/tests/box_scope_session.mjs +6 -2
- package/tests/box_sync.mjs +55 -0
- package/tests/box_task_scope.mjs +99 -0
- package/tests/branding.mjs +12 -0
- package/tests/cf_ruleset_preflight.mjs +142 -0
- package/tests/cf_tunnel.mjs +37 -0
- package/tests/claim_gate_rebase.mjs +98 -0
- package/tests/clawback_confirmed_backlog.mjs +103 -0
- package/tests/cli_lib_formatters.mjs +20 -0
- package/tests/confirm_attribution.mjs +30 -46
- package/tests/credit_grant.mjs +198 -10
- package/tests/criterion_authoring_gate.mjs +272 -0
- package/tests/criterion_progress.mjs +33 -1
- package/tests/dev_lib.mjs +253 -0
- package/tests/devbox_artifact_gate.mjs +75 -0
- package/tests/devbox_dmg_backdrop.mjs +137 -0
- package/tests/devbox_icons.mjs +304 -0
- package/tests/devbox_installer_brand.mjs +232 -0
- package/tests/devbox_key_register.mjs +234 -0
- package/tests/docs_openapi_route.mjs +110 -0
- package/tests/doctor_hooks.mjs +141 -0
- package/tests/extract_json.mjs +140 -0
- package/tests/fitness.mjs +89 -0
- package/tests/gen_freshness.mjs +96 -0
- package/tests/goal_advisory.mjs +251 -0
- package/tests/goal_criterion_confirm_ui.mjs +269 -0
- package/tests/goal_routes.mjs +59 -4
- package/tests/goal_tier.mjs +12 -3
- package/tests/governance_catalog.mjs +129 -0
- package/tests/governance_claim_eligibility.mjs +262 -0
- package/tests/governance_config.mjs +187 -0
- package/tests/governance_ownership_scope.mjs +410 -0
- package/tests/governance_page_gates.mjs +324 -0
- package/tests/governance_parity.mjs +336 -0
- package/tests/governance_principals.mjs +232 -0
- package/tests/governance_protected_surfaces.mjs +208 -0
- package/tests/governance_require_permission.mjs +223 -0
- package/tests/governance_resolver.mjs +84 -0
- package/tests/governance_role_sync.mjs +231 -0
- package/tests/governance_seed.mjs +127 -0
- package/tests/governance_session_scope.mjs +434 -0
- package/tests/governance_vanilla_boot.mjs +203 -0
- package/tests/grade_attribution.mjs +7 -7
- package/tests/hall_audit.mjs +223 -0
- package/tests/hall_nav.mjs +191 -0
- package/tests/hall_palette.mjs +206 -0
- package/tests/hall_signout.mjs +124 -0
- package/tests/hook_user_agents.mjs +10 -0
- package/tests/idea_triage.mjs +162 -0
- package/tests/idp_device_exchange.mjs +93 -0
- package/tests/init.mjs +51 -0
- package/tests/instance_config.mjs +65 -0
- package/tests/instance_mismatch_guard.mjs +23 -6
- package/tests/instance_release_config.mjs +104 -0
- package/tests/linkify_refs.mjs +15 -2
- package/tests/module_contributions.mjs +55 -0
- package/tests/module_loader.mjs +10 -5
- package/tests/module_scope_active_claims.mjs +94 -0
- package/tests/needs_rebase.mjs +92 -0
- package/tests/one_active_claim_per_session.mjs +76 -0
- package/tests/override_attribution.mjs +10 -8
- package/tests/override_request_ownership.mjs +8 -4
- package/tests/parse_cookie_decode.mjs +42 -0
- package/tests/pay_on_land.mjs +129 -0
- package/tests/platform_boot.mjs +100 -1
- package/tests/post_login_landing.mjs +42 -0
- package/tests/preflight_checks.mjs +72 -0
- package/tests/provision.mjs +132 -7
- package/tests/publish_branch_route.mjs +53 -0
- package/tests/publish_reconciler.mjs +187 -2
- package/tests/repo_info_binding.mjs +248 -0
- package/tests/reward_gate.mjs +11 -2
- package/tests/reward_mode_cost_plus_only.mjs +116 -0
- package/tests/reward_mode_surfacing.mjs +168 -0
- package/tests/route_permission_check.mjs +301 -0
- package/tests/route_rank_check.mjs +254 -12
- package/tests/route_validation.mjs +30 -0
- package/tests/sequence.mjs +267 -0
- package/tests/session_digest.mjs +44 -0
- package/tests/session_index.mjs +18 -6
- package/tests/session_records.mjs +39 -1
- package/tests/session_reward_on_land.mjs +381 -0
- package/tests/session_reward_reconcile.mjs +229 -0
- package/tests/ship_api_client_pathspec.mjs +100 -0
- package/tests/ship_base_flag.mjs +93 -0
- package/tests/ship_ci_deploy.mjs +80 -3
- package/tests/ship_upstream_deletion.mjs +57 -0
- package/tests/smoke_target.mjs +233 -0
- package/tests/start_env_guard.mjs +87 -0
- package/tests/start_rebase_warning.mjs +103 -0
- package/tests/status_mirror_sync.mjs +122 -0
- package/tests/stop_refcheck.mjs +19 -1
- package/tests/task_goal_link.mjs +15 -6
- package/tests/upgrade.mjs +139 -0
- package/tests/web_admission_status.mjs +162 -0
- package/tests/write_validation_gaps.mjs +110 -0
package/docs/api/openapi.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"openapi": "3.1.0",
|
|
3
3
|
"info": {
|
|
4
|
-
"title": "Cloud Bongos —
|
|
4
|
+
"title": "Cloud Bongos — Bongos API",
|
|
5
5
|
"version": "0.0.2",
|
|
6
6
|
"license": {
|
|
7
7
|
"name": "AGPL-3.0-or-later",
|
|
8
8
|
"url": "https://www.gnu.org/licenses/agpl-3.0.html"
|
|
9
9
|
},
|
|
10
|
-
"description": "The
|
|
10
|
+
"description": "The Bongos API — the build-methodology backend\n(builders, tasks, claims, credits, grading, memory, dev boxes).\n\n**API version:** `v1` — served at `/api/bongos/v1`. The\nunversioned `/api/bongos` and legacy `/api/gds` are permanent aliases\npinned to this version; pin to `/api/bongos/v1` for a stable\ncontract (breaking changes ship a new `/vN`, ADR 0117). This is the\nCONTRACT version, distinct from the package build in `info.version`.\n\n**Base path:** `/api/bongos` (every path below is relative to it).\n\n**Auth:** a builder session — the `gds_session` cookie (web) or\n`Authorization: Bearer <token>` (CLI). **Ranks** gate writes and are\nenforced server-side per request, never cached (ADR 0016):\n`public` < `any-builder` < `metic+archon` < `archon`.\nEach operation carries its required rank in `x-rank`.\n\nGenerated from the live route files by `scripts/gds/gen-api-docs.js` —\ndo not hand-edit; it regenerates on every ship."
|
|
11
11
|
},
|
|
12
12
|
"x-api-version": "v1",
|
|
13
13
|
"servers": [
|
|
@@ -644,6 +644,45 @@
|
|
|
644
644
|
"security": []
|
|
645
645
|
}
|
|
646
646
|
},
|
|
647
|
+
"/auth/backchannel-logout": {
|
|
648
|
+
"post": {
|
|
649
|
+
"operationId": "post_auth_backchannel_logout",
|
|
650
|
+
"tags": [
|
|
651
|
+
"auth"
|
|
652
|
+
],
|
|
653
|
+
"summary": "POST /auth/backchannel-logout",
|
|
654
|
+
"description": "POST /auth/backchannel-logout — the INSTANCE side of federated single-logout (ADR 0144, task 1002238). The hub POSTs a hub-signed logout token here when a builder signs out of the hub; we verify it and revoke ALL of that builder's local sessions, so one hub logout ends the session on every federated project. rank: public — the hub-signed EdDSA logout token IS the credential (like the OAuth callback), NOT a builder session. Inert (404) on an instance that does not federate through a hub (idp unset), so a self-hosted instance exposes no new surface. Idempotent: an unknown/replayed subject just revokes nothing.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
655
|
+
"x-rank": "public",
|
|
656
|
+
"x-source": "src/bongos/routes/auth.js",
|
|
657
|
+
"requestBody": {
|
|
658
|
+
"required": true,
|
|
659
|
+
"content": {
|
|
660
|
+
"application/json": {
|
|
661
|
+
"schema": {
|
|
662
|
+
"$ref": "#/components/schemas/PostAuthBackchannelLogoutRequest"
|
|
663
|
+
}
|
|
664
|
+
}
|
|
665
|
+
},
|
|
666
|
+
"x-validated": true
|
|
667
|
+
},
|
|
668
|
+
"responses": {
|
|
669
|
+
"200": {
|
|
670
|
+
"description": "Success.",
|
|
671
|
+
"content": {
|
|
672
|
+
"application/json": {
|
|
673
|
+
"schema": {
|
|
674
|
+
"$ref": "#/components/schemas/PostAuthBackchannelLogoutResponse"
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
},
|
|
679
|
+
"400": {
|
|
680
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
681
|
+
}
|
|
682
|
+
},
|
|
683
|
+
"security": []
|
|
684
|
+
}
|
|
685
|
+
},
|
|
647
686
|
"/auth/cli-token/issue": {
|
|
648
687
|
"post": {
|
|
649
688
|
"operationId": "post_auth_cli_token_issue",
|
|
@@ -1010,6 +1049,34 @@
|
|
|
1010
1049
|
]
|
|
1011
1050
|
}
|
|
1012
1051
|
},
|
|
1052
|
+
"/auth/web/admission-status": {
|
|
1053
|
+
"get": {
|
|
1054
|
+
"operationId": "get_auth_web_admission_status",
|
|
1055
|
+
"tags": [
|
|
1056
|
+
"auth"
|
|
1057
|
+
],
|
|
1058
|
+
"summary": "GET /auth/web/admission-status",
|
|
1059
|
+
"description": "GET /auth/web/admission-status?login=X — the probe renderAccessPendingPage polls (task 1002097). Answers ONE question: would this login be admitted right now? It mirrors the real gate via auth.webAdmissionStatus so the page can never invite someone in the gate would refuse. rank: public — it must be reachable by a visitor with no session (that is the entire situation it exists for). It grants nothing: admission still runs through the normal sign-in, and this only reads state. WHAT IT LEAKS, stated plainly (task 1002430 — an earlier version of this comment claimed the opposite and was wrong). Returning only a boolean does NOT make it non-enumerable: with open enrollment off, and for any login that is not the configured firstAdmin, `admitted:true` means that login is a member or has been invited. That reveals account existence to an unauthenticated caller. It is also NOT throttled — rateLimitMiddleware returns early for non-write methods, so GETs bypass it entirely; the page's 3s poll bounds the honest client, not an attacker. Why it is nonetheless not a new exposure: the onboarding module's GET /access-requests/status?github_login=X is ALREADY public and returns the strictly richer member|invited|pending|dismissed|none plus its own `admitted`. Anything derivable here is already derivable there, so this adds no net-new surface — and hardening only this route would accomplish nothing while that one stays open. Whether unauthenticated login-existence probing is acceptable at all is a real question, but it belongs to both routes together, not to a comment here. That endpoint is also why this one exists: it models neither the firstAdmin bypass nor open enrollment, so it reports the OWNER as 'none' forever — the exact case this page has to resolve.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
1060
|
+
"x-rank": "public",
|
|
1061
|
+
"x-source": "src/bongos/routes/auth.js",
|
|
1062
|
+
"responses": {
|
|
1063
|
+
"200": {
|
|
1064
|
+
"description": "Success.",
|
|
1065
|
+
"content": {
|
|
1066
|
+
"application/json": {
|
|
1067
|
+
"schema": {
|
|
1068
|
+
"$ref": "#/components/schemas/GetAuthWebAdmissionStatusResponse"
|
|
1069
|
+
}
|
|
1070
|
+
}
|
|
1071
|
+
}
|
|
1072
|
+
},
|
|
1073
|
+
"400": {
|
|
1074
|
+
"$ref": "#/components/responses/BadRequest"
|
|
1075
|
+
}
|
|
1076
|
+
},
|
|
1077
|
+
"security": []
|
|
1078
|
+
}
|
|
1079
|
+
},
|
|
1013
1080
|
"/auth/web/callback": {
|
|
1014
1081
|
"get": {
|
|
1015
1082
|
"operationId": "get_auth_web_callback",
|
|
@@ -1742,6 +1809,37 @@
|
|
|
1742
1809
|
]
|
|
1743
1810
|
}
|
|
1744
1811
|
},
|
|
1812
|
+
"/box/scope": {
|
|
1813
|
+
"get": {
|
|
1814
|
+
"operationId": "get_box_scope",
|
|
1815
|
+
"tags": [
|
|
1816
|
+
"box"
|
|
1817
|
+
],
|
|
1818
|
+
"summary": "GET /box/scope",
|
|
1819
|
+
"description": "GET /box/scope — the credential-FREE companion to /box/source-access (BV1.R100 / goal 1000051). Answers \"what code does my box hold RIGHT NOW?\" — the resolved sparse set + the module keys of the builder's active claims — WITHOUT issuing the pull credential. The laptop app reads it to confirm \"your box now has <module> for task N\" after a pick+claim; R104's proof reads it to VERIFY the scope is minimal (excludes other modules). Same live rank+ status + lifecycle-port scope logic as source-access, so the answer can't drift from the actual checkout — it just omits the secret. Deliberately NOT gated on a live box (boxCanHoldSource): the SCOPE is metadata, so a builder can ask \"what WOULD my box hold for my current claims\" the instant they claim, before the box has even synced. The ALLOW/DENY still comes from the live rank+status (a demoted/inactive builder gets the same 403 as source-access). allowBoxScope so it works both from the laptop app (full session) and on the box (box-scoped session) — safe here precisely because no credential is returned.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
1820
|
+
"x-rank": "any-builder",
|
|
1821
|
+
"x-source": "modules/dev-box/routes/box.js",
|
|
1822
|
+
"responses": {
|
|
1823
|
+
"200": {
|
|
1824
|
+
"description": "Success."
|
|
1825
|
+
},
|
|
1826
|
+
"400": {
|
|
1827
|
+
"$ref": "#/components/responses/BadRequest"
|
|
1828
|
+
},
|
|
1829
|
+
"401": {
|
|
1830
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
1831
|
+
},
|
|
1832
|
+
"403": {
|
|
1833
|
+
"$ref": "#/components/responses/Forbidden"
|
|
1834
|
+
}
|
|
1835
|
+
},
|
|
1836
|
+
"security": [
|
|
1837
|
+
{
|
|
1838
|
+
"builderSession": []
|
|
1839
|
+
}
|
|
1840
|
+
]
|
|
1841
|
+
}
|
|
1842
|
+
},
|
|
1745
1843
|
"/box/source-access": {
|
|
1746
1844
|
"get": {
|
|
1747
1845
|
"operationId": "get_box_source_access",
|
|
@@ -3257,7 +3355,7 @@
|
|
|
3257
3355
|
"done-when"
|
|
3258
3356
|
],
|
|
3259
3357
|
"summary": "POST /done-when/:criterionId/satisfy",
|
|
3260
|
-
"description": "Auth (Metic+): confirm a criterion — flip it to satisfied. Accepts optional satisfied_by_task_id so the UI can show which ship-task fulfilled it. When the criterion belongs to a goal and was its LAST unsatisfied one, the goal auto- flips open→achieved (ADR 0086 §6 / BV1.R63). Re-ranked Archon→Metic+ so the planner — not only the Archon — closes the criterion/goal loop; the route is pinned in route-rank-check.
|
|
3358
|
+
"description": "Auth (Metic+): confirm a criterion — flip it to satisfied. Accepts optional satisfied_by_task_id so the UI can show which ship-task fulfilled it. When the criterion belongs to a goal and was its LAST unsatisfied one, the goal auto- flips open→achieved (ADR 0086 §6 / BV1.R63). Re-ranked Archon→Metic+ so the planner — not only the Archon — closes the criterion/goal loop; the route is pinned in route-rank-check.MODULE_EXPECTED_RANKS.lifecycle so a further downgrade is caught. rank: metic+archon — criterion confirmation + goal auto-achieve (the closing loop).\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).",
|
|
3261
3359
|
"x-rank": "metic+archon",
|
|
3262
3360
|
"x-source": "modules/lifecycle/routes/done-when.js",
|
|
3263
3361
|
"parameters": [
|
|
@@ -5157,6 +5255,62 @@
|
|
|
5157
5255
|
]
|
|
5158
5256
|
}
|
|
5159
5257
|
},
|
|
5258
|
+
"/inbox/{id}/ratify": {
|
|
5259
|
+
"post": {
|
|
5260
|
+
"operationId": "post_inbox_id_ratify",
|
|
5261
|
+
"tags": [
|
|
5262
|
+
"inbox"
|
|
5263
|
+
],
|
|
5264
|
+
"summary": "POST /inbox/:id/ratify",
|
|
5265
|
+
"description": "V3.R31 (task 252) — Archon ratifies a criterion-proposal idea, atomically: - INSERT done_when_criteria row on the target version - UPDATE idea_inbox SET status='promoted', reviewed_at=now() - INSERT karma_log (delta=+3, reason='proposal_ratified') for proposer (V3.R28 / task 248 tuned the delta from +5 → +3; tunable.) - INSERT criterion_proposal_audit row capturing who/when/what Archon-only — done_when_criteria writes are scope-shaping (criterion C2 in canonical-permissions.md). The kind='criterion-proposal' POST is Metic+ (gated above), but the ratification is the Archon decision. Returns 400 if the source idea isn't kind='criterion-proposal' or its body_md isn't a parseable {target_version, criterion_md, sort_order_hint} JSON object. Returns 404 if the idea doesn't exist. Returns 409 if the idea is already promoted/discarded/merged (status != 'open'). All four writes happen in one transaction — partial failures roll back cleanly.\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
5266
|
+
"x-rank": "archon",
|
|
5267
|
+
"x-source": "modules/ideas/routes/inbox.js",
|
|
5268
|
+
"parameters": [
|
|
5269
|
+
{
|
|
5270
|
+
"name": "id",
|
|
5271
|
+
"in": "path",
|
|
5272
|
+
"required": true,
|
|
5273
|
+
"schema": {
|
|
5274
|
+
"type": "string"
|
|
5275
|
+
},
|
|
5276
|
+
"description": "Path parameter `id`."
|
|
5277
|
+
}
|
|
5278
|
+
],
|
|
5279
|
+
"requestBody": {
|
|
5280
|
+
"required": false,
|
|
5281
|
+
"content": {
|
|
5282
|
+
"application/json": {
|
|
5283
|
+
"schema": {
|
|
5284
|
+
"$ref": "#/components/schemas/PostInboxIdRatifyRequest"
|
|
5285
|
+
}
|
|
5286
|
+
}
|
|
5287
|
+
},
|
|
5288
|
+
"x-validated": true
|
|
5289
|
+
},
|
|
5290
|
+
"responses": {
|
|
5291
|
+
"200": {
|
|
5292
|
+
"description": "Success."
|
|
5293
|
+
},
|
|
5294
|
+
"400": {
|
|
5295
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
5296
|
+
},
|
|
5297
|
+
"401": {
|
|
5298
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
5299
|
+
},
|
|
5300
|
+
"403": {
|
|
5301
|
+
"$ref": "#/components/responses/Forbidden"
|
|
5302
|
+
},
|
|
5303
|
+
"404": {
|
|
5304
|
+
"$ref": "#/components/responses/NotFound"
|
|
5305
|
+
}
|
|
5306
|
+
},
|
|
5307
|
+
"security": [
|
|
5308
|
+
{
|
|
5309
|
+
"builderSession": []
|
|
5310
|
+
}
|
|
5311
|
+
]
|
|
5312
|
+
}
|
|
5313
|
+
},
|
|
5160
5314
|
"/instance": {
|
|
5161
5315
|
"get": {
|
|
5162
5316
|
"operationId": "get_instance",
|
|
@@ -6432,6 +6586,110 @@
|
|
|
6432
6586
|
]
|
|
6433
6587
|
}
|
|
6434
6588
|
},
|
|
6589
|
+
"/memory/builders/{builderId}/file": {
|
|
6590
|
+
"get": {
|
|
6591
|
+
"operationId": "get_memory_builders_builderId_file",
|
|
6592
|
+
"tags": [
|
|
6593
|
+
"memory"
|
|
6594
|
+
],
|
|
6595
|
+
"summary": "GET /memory/builders/:builderId/file",
|
|
6596
|
+
"description": "GET /memory/builders/:builderId/file?path=... — Archon reads ONE of ANOTHER builder's files (content included). Audit-logged. 404 if the target has no file at that path.\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
6597
|
+
"x-rank": "archon",
|
|
6598
|
+
"x-source": "modules/memory/routes/memory.js",
|
|
6599
|
+
"parameters": [
|
|
6600
|
+
{
|
|
6601
|
+
"name": "builderId",
|
|
6602
|
+
"in": "path",
|
|
6603
|
+
"required": true,
|
|
6604
|
+
"schema": {
|
|
6605
|
+
"type": "string"
|
|
6606
|
+
},
|
|
6607
|
+
"description": "Path parameter `builderId`."
|
|
6608
|
+
}
|
|
6609
|
+
],
|
|
6610
|
+
"responses": {
|
|
6611
|
+
"200": {
|
|
6612
|
+
"description": "Success.",
|
|
6613
|
+
"content": {
|
|
6614
|
+
"application/json": {
|
|
6615
|
+
"schema": {
|
|
6616
|
+
"$ref": "#/components/schemas/GetMemoryBuildersBuilderIdFileResponse"
|
|
6617
|
+
}
|
|
6618
|
+
}
|
|
6619
|
+
}
|
|
6620
|
+
},
|
|
6621
|
+
"400": {
|
|
6622
|
+
"$ref": "#/components/responses/BadRequest"
|
|
6623
|
+
},
|
|
6624
|
+
"401": {
|
|
6625
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
6626
|
+
},
|
|
6627
|
+
"403": {
|
|
6628
|
+
"$ref": "#/components/responses/Forbidden"
|
|
6629
|
+
},
|
|
6630
|
+
"404": {
|
|
6631
|
+
"$ref": "#/components/responses/NotFound"
|
|
6632
|
+
}
|
|
6633
|
+
},
|
|
6634
|
+
"security": [
|
|
6635
|
+
{
|
|
6636
|
+
"builderSession": []
|
|
6637
|
+
}
|
|
6638
|
+
]
|
|
6639
|
+
}
|
|
6640
|
+
},
|
|
6641
|
+
"/memory/builders/{builderId}/files": {
|
|
6642
|
+
"get": {
|
|
6643
|
+
"operationId": "get_memory_builders_builderId_files",
|
|
6644
|
+
"tags": [
|
|
6645
|
+
"memory"
|
|
6646
|
+
],
|
|
6647
|
+
"summary": "GET /memory/builders/:builderId/files",
|
|
6648
|
+
"description": "GET /memory/builders/:builderId/files — Archon lists ANOTHER builder's memory file metadata. Audit-logged.\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
6649
|
+
"x-rank": "archon",
|
|
6650
|
+
"x-source": "modules/memory/routes/memory.js",
|
|
6651
|
+
"parameters": [
|
|
6652
|
+
{
|
|
6653
|
+
"name": "builderId",
|
|
6654
|
+
"in": "path",
|
|
6655
|
+
"required": true,
|
|
6656
|
+
"schema": {
|
|
6657
|
+
"type": "string"
|
|
6658
|
+
},
|
|
6659
|
+
"description": "Path parameter `builderId`."
|
|
6660
|
+
}
|
|
6661
|
+
],
|
|
6662
|
+
"responses": {
|
|
6663
|
+
"200": {
|
|
6664
|
+
"description": "Success.",
|
|
6665
|
+
"content": {
|
|
6666
|
+
"application/json": {
|
|
6667
|
+
"schema": {
|
|
6668
|
+
"$ref": "#/components/schemas/GetMemoryBuildersBuilderIdFilesResponse"
|
|
6669
|
+
}
|
|
6670
|
+
}
|
|
6671
|
+
}
|
|
6672
|
+
},
|
|
6673
|
+
"400": {
|
|
6674
|
+
"$ref": "#/components/responses/BadRequest"
|
|
6675
|
+
},
|
|
6676
|
+
"401": {
|
|
6677
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
6678
|
+
},
|
|
6679
|
+
"403": {
|
|
6680
|
+
"$ref": "#/components/responses/Forbidden"
|
|
6681
|
+
},
|
|
6682
|
+
"404": {
|
|
6683
|
+
"$ref": "#/components/responses/NotFound"
|
|
6684
|
+
}
|
|
6685
|
+
},
|
|
6686
|
+
"security": [
|
|
6687
|
+
{
|
|
6688
|
+
"builderSession": []
|
|
6689
|
+
}
|
|
6690
|
+
]
|
|
6691
|
+
}
|
|
6692
|
+
},
|
|
6435
6693
|
"/memory/file": {
|
|
6436
6694
|
"get": {
|
|
6437
6695
|
"operationId": "get_memory_file",
|
|
@@ -8525,6 +8783,37 @@
|
|
|
8525
8783
|
]
|
|
8526
8784
|
}
|
|
8527
8785
|
},
|
|
8786
|
+
"/security/adr": {
|
|
8787
|
+
"get": {
|
|
8788
|
+
"operationId": "get_security_adr",
|
|
8789
|
+
"tags": [
|
|
8790
|
+
"security"
|
|
8791
|
+
],
|
|
8792
|
+
"summary": "GET /security/adr",
|
|
8793
|
+
"description": "GET /api/gds/security/adr Metic+ only. Returns the full security ADR as { adr_md, source, fetched_at } when the file is provisioned; otherwise 404 with a structured hint. The rank gate runs BEFORE the file-existence check so a Xenos sees 403 regardless of whether the document is provisioned — we don't want existence-or-not to leak below the rank line. rank: metic+archon — trust-tier access to the threat model + defenses inventory (ADR 0020).\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).",
|
|
8794
|
+
"x-rank": "metic+archon",
|
|
8795
|
+
"x-source": "src/bongos/routes/security.js",
|
|
8796
|
+
"responses": {
|
|
8797
|
+
"200": {
|
|
8798
|
+
"description": "Success."
|
|
8799
|
+
},
|
|
8800
|
+
"400": {
|
|
8801
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8802
|
+
},
|
|
8803
|
+
"401": {
|
|
8804
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8805
|
+
},
|
|
8806
|
+
"403": {
|
|
8807
|
+
"$ref": "#/components/responses/Forbidden"
|
|
8808
|
+
}
|
|
8809
|
+
},
|
|
8810
|
+
"security": [
|
|
8811
|
+
{
|
|
8812
|
+
"builderSession": []
|
|
8813
|
+
}
|
|
8814
|
+
]
|
|
8815
|
+
}
|
|
8816
|
+
},
|
|
8528
8817
|
"/security/docs": {
|
|
8529
8818
|
"get": {
|
|
8530
8819
|
"operationId": "get_security_docs",
|
|
@@ -8662,7 +8951,322 @@
|
|
|
8662
8951
|
]
|
|
8663
8952
|
}
|
|
8664
8953
|
},
|
|
8665
|
-
"/
|
|
8954
|
+
"/security/reports": {
|
|
8955
|
+
"get": {
|
|
8956
|
+
"operationId": "get_security_reports",
|
|
8957
|
+
"tags": [
|
|
8958
|
+
"security"
|
|
8959
|
+
],
|
|
8960
|
+
"summary": "GET /security/reports",
|
|
8961
|
+
"description": "GET /api/bongos/security/reports?status=<status> Archon-only, newest-first. The Archon dashboard view fetches this on load + after each adjudication action. ?status= narrows to one lifecycle bucket (open / repro_attempted / confirmed / disputed / fixed / wontfix); omitted = all. rank: archon — adjudication surface; reading every builder's reports.\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
8962
|
+
"x-rank": "archon",
|
|
8963
|
+
"x-source": "modules/security/routes/reports.js",
|
|
8964
|
+
"responses": {
|
|
8965
|
+
"200": {
|
|
8966
|
+
"description": "Success.",
|
|
8967
|
+
"content": {
|
|
8968
|
+
"application/json": {
|
|
8969
|
+
"schema": {
|
|
8970
|
+
"$ref": "#/components/schemas/GetSecurityReportsResponse"
|
|
8971
|
+
}
|
|
8972
|
+
}
|
|
8973
|
+
}
|
|
8974
|
+
},
|
|
8975
|
+
"400": {
|
|
8976
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8977
|
+
},
|
|
8978
|
+
"401": {
|
|
8979
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8980
|
+
},
|
|
8981
|
+
"403": {
|
|
8982
|
+
"$ref": "#/components/responses/Forbidden"
|
|
8983
|
+
}
|
|
8984
|
+
},
|
|
8985
|
+
"security": [
|
|
8986
|
+
{
|
|
8987
|
+
"builderSession": []
|
|
8988
|
+
}
|
|
8989
|
+
]
|
|
8990
|
+
},
|
|
8991
|
+
"post": {
|
|
8992
|
+
"operationId": "post_security_reports",
|
|
8993
|
+
"tags": [
|
|
8994
|
+
"security"
|
|
8995
|
+
],
|
|
8996
|
+
"summary": "POST /security/reports",
|
|
8997
|
+
"description": "POST /api/bongos/security/reports — file a new vulnerability report. V3.R64 (task 283). Used by the /builder-redteam skill. Metic+ only — Xenos can't open the bounty surface (the rank gate keeps the noise-floor sane; a Xenos who finds a real flaw can flag it through normal channels). Body: { target, severity, title, description?, repro_steps_md? } Returns 201 + the inserted row (status='open' by default; the Archon view picks it up immediately). rank: metic+archon — bounty intake; Xenos kept out by design (V3.R63).\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).",
|
|
8998
|
+
"x-rank": "metic+archon",
|
|
8999
|
+
"x-source": "modules/security/routes/reports.js",
|
|
9000
|
+
"requestBody": {
|
|
9001
|
+
"required": true,
|
|
9002
|
+
"content": {
|
|
9003
|
+
"application/json": {
|
|
9004
|
+
"schema": {
|
|
9005
|
+
"$ref": "#/components/schemas/PostSecurityReportsRequest"
|
|
9006
|
+
}
|
|
9007
|
+
}
|
|
9008
|
+
},
|
|
9009
|
+
"x-validated": true
|
|
9010
|
+
},
|
|
9011
|
+
"responses": {
|
|
9012
|
+
"200": {
|
|
9013
|
+
"description": "Success.",
|
|
9014
|
+
"content": {
|
|
9015
|
+
"application/json": {
|
|
9016
|
+
"schema": {
|
|
9017
|
+
"$ref": "#/components/schemas/PostSecurityReportsResponse"
|
|
9018
|
+
}
|
|
9019
|
+
}
|
|
9020
|
+
}
|
|
9021
|
+
},
|
|
9022
|
+
"400": {
|
|
9023
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
9024
|
+
},
|
|
9025
|
+
"401": {
|
|
9026
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
9027
|
+
},
|
|
9028
|
+
"403": {
|
|
9029
|
+
"$ref": "#/components/responses/Forbidden"
|
|
9030
|
+
}
|
|
9031
|
+
},
|
|
9032
|
+
"security": [
|
|
9033
|
+
{
|
|
9034
|
+
"builderSession": []
|
|
9035
|
+
}
|
|
9036
|
+
]
|
|
9037
|
+
}
|
|
9038
|
+
},
|
|
9039
|
+
"/security/reports/{id}/confirm": {
|
|
9040
|
+
"post": {
|
|
9041
|
+
"operationId": "post_security_reports_id_confirm",
|
|
9042
|
+
"tags": [
|
|
9043
|
+
"security"
|
|
9044
|
+
],
|
|
9045
|
+
"summary": "POST /security/reports/:id/confirm",
|
|
9046
|
+
"description": "POST /api/bongos/security/reports/:id/confirm Body: { drachmae_awarded?: integer } — defaults to the severity tier bounty if omitted. Marks the report confirmed, stamps confirmed_at, and sets drachmae_awarded. rank: archon — confirms a payout-eligible report.\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
9047
|
+
"x-rank": "archon",
|
|
9048
|
+
"x-source": "modules/security/routes/reports.js",
|
|
9049
|
+
"parameters": [
|
|
9050
|
+
{
|
|
9051
|
+
"name": "id",
|
|
9052
|
+
"in": "path",
|
|
9053
|
+
"required": true,
|
|
9054
|
+
"schema": {
|
|
9055
|
+
"type": "string"
|
|
9056
|
+
},
|
|
9057
|
+
"description": "Path parameter `id`."
|
|
9058
|
+
}
|
|
9059
|
+
],
|
|
9060
|
+
"requestBody": {
|
|
9061
|
+
"required": false,
|
|
9062
|
+
"content": {
|
|
9063
|
+
"application/json": {
|
|
9064
|
+
"schema": {
|
|
9065
|
+
"$ref": "#/components/schemas/PostSecurityReportsIdConfirmRequest"
|
|
9066
|
+
}
|
|
9067
|
+
}
|
|
9068
|
+
},
|
|
9069
|
+
"x-validated": true
|
|
9070
|
+
},
|
|
9071
|
+
"responses": {
|
|
9072
|
+
"200": {
|
|
9073
|
+
"description": "Success.",
|
|
9074
|
+
"content": {
|
|
9075
|
+
"application/json": {
|
|
9076
|
+
"schema": {
|
|
9077
|
+
"$ref": "#/components/schemas/PostSecurityReportsIdConfirmResponse"
|
|
9078
|
+
}
|
|
9079
|
+
}
|
|
9080
|
+
}
|
|
9081
|
+
},
|
|
9082
|
+
"400": {
|
|
9083
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
9084
|
+
},
|
|
9085
|
+
"401": {
|
|
9086
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
9087
|
+
},
|
|
9088
|
+
"403": {
|
|
9089
|
+
"$ref": "#/components/responses/Forbidden"
|
|
9090
|
+
},
|
|
9091
|
+
"404": {
|
|
9092
|
+
"$ref": "#/components/responses/NotFound"
|
|
9093
|
+
}
|
|
9094
|
+
},
|
|
9095
|
+
"security": [
|
|
9096
|
+
{
|
|
9097
|
+
"builderSession": []
|
|
9098
|
+
}
|
|
9099
|
+
]
|
|
9100
|
+
}
|
|
9101
|
+
},
|
|
9102
|
+
"/security/reports/{id}/dispute": {
|
|
9103
|
+
"post": {
|
|
9104
|
+
"operationId": "post_security_reports_id_dispute",
|
|
9105
|
+
"tags": [
|
|
9106
|
+
"security"
|
|
9107
|
+
],
|
|
9108
|
+
"summary": "POST /security/reports/:id/dispute",
|
|
9109
|
+
"description": "POST /api/bongos/security/reports/:id/dispute Marks the report disputed and clears drachmae_awarded. rank: archon — dispute adjudication.\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
9110
|
+
"x-rank": "archon",
|
|
9111
|
+
"x-source": "modules/security/routes/reports.js",
|
|
9112
|
+
"parameters": [
|
|
9113
|
+
{
|
|
9114
|
+
"name": "id",
|
|
9115
|
+
"in": "path",
|
|
9116
|
+
"required": true,
|
|
9117
|
+
"schema": {
|
|
9118
|
+
"type": "string"
|
|
9119
|
+
},
|
|
9120
|
+
"description": "Path parameter `id`."
|
|
9121
|
+
}
|
|
9122
|
+
],
|
|
9123
|
+
"responses": {
|
|
9124
|
+
"200": {
|
|
9125
|
+
"description": "Success.",
|
|
9126
|
+
"content": {
|
|
9127
|
+
"application/json": {
|
|
9128
|
+
"schema": {
|
|
9129
|
+
"$ref": "#/components/schemas/PostSecurityReportsIdDisputeResponse"
|
|
9130
|
+
}
|
|
9131
|
+
}
|
|
9132
|
+
}
|
|
9133
|
+
},
|
|
9134
|
+
"400": {
|
|
9135
|
+
"$ref": "#/components/responses/BadRequest"
|
|
9136
|
+
},
|
|
9137
|
+
"401": {
|
|
9138
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
9139
|
+
},
|
|
9140
|
+
"403": {
|
|
9141
|
+
"$ref": "#/components/responses/Forbidden"
|
|
9142
|
+
},
|
|
9143
|
+
"404": {
|
|
9144
|
+
"$ref": "#/components/responses/NotFound"
|
|
9145
|
+
}
|
|
9146
|
+
},
|
|
9147
|
+
"security": [
|
|
9148
|
+
{
|
|
9149
|
+
"builderSession": []
|
|
9150
|
+
}
|
|
9151
|
+
]
|
|
9152
|
+
}
|
|
9153
|
+
},
|
|
9154
|
+
"/security/reports/{id}/fix": {
|
|
9155
|
+
"post": {
|
|
9156
|
+
"operationId": "post_security_reports_id_fix",
|
|
9157
|
+
"tags": [
|
|
9158
|
+
"security"
|
|
9159
|
+
],
|
|
9160
|
+
"summary": "POST /security/reports/:id/fix",
|
|
9161
|
+
"description": "POST /api/bongos/security/reports/:id/fix Marks the report fixed and stamps fixed_at. Does not change fix_task_id — link that separately via /link-fix. rank: archon — fix-confirmation adjudication.\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
9162
|
+
"x-rank": "archon",
|
|
9163
|
+
"x-source": "modules/security/routes/reports.js",
|
|
9164
|
+
"parameters": [
|
|
9165
|
+
{
|
|
9166
|
+
"name": "id",
|
|
9167
|
+
"in": "path",
|
|
9168
|
+
"required": true,
|
|
9169
|
+
"schema": {
|
|
9170
|
+
"type": "string"
|
|
9171
|
+
},
|
|
9172
|
+
"description": "Path parameter `id`."
|
|
9173
|
+
}
|
|
9174
|
+
],
|
|
9175
|
+
"responses": {
|
|
9176
|
+
"200": {
|
|
9177
|
+
"description": "Success.",
|
|
9178
|
+
"content": {
|
|
9179
|
+
"application/json": {
|
|
9180
|
+
"schema": {
|
|
9181
|
+
"$ref": "#/components/schemas/PostSecurityReportsIdFixResponse"
|
|
9182
|
+
}
|
|
9183
|
+
}
|
|
9184
|
+
}
|
|
9185
|
+
},
|
|
9186
|
+
"400": {
|
|
9187
|
+
"$ref": "#/components/responses/BadRequest"
|
|
9188
|
+
},
|
|
9189
|
+
"401": {
|
|
9190
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
9191
|
+
},
|
|
9192
|
+
"403": {
|
|
9193
|
+
"$ref": "#/components/responses/Forbidden"
|
|
9194
|
+
},
|
|
9195
|
+
"404": {
|
|
9196
|
+
"$ref": "#/components/responses/NotFound"
|
|
9197
|
+
}
|
|
9198
|
+
},
|
|
9199
|
+
"security": [
|
|
9200
|
+
{
|
|
9201
|
+
"builderSession": []
|
|
9202
|
+
}
|
|
9203
|
+
]
|
|
9204
|
+
}
|
|
9205
|
+
},
|
|
9206
|
+
"/security/reports/{id}/link-fix": {
|
|
9207
|
+
"post": {
|
|
9208
|
+
"operationId": "post_security_reports_id_link_fix",
|
|
9209
|
+
"tags": [
|
|
9210
|
+
"security"
|
|
9211
|
+
],
|
|
9212
|
+
"summary": "POST /security/reports/:id/link-fix",
|
|
9213
|
+
"description": "POST /api/bongos/security/reports/:id/link-fix Body: { task_id: integer } — attaches a fix-task FK. Doesn't change status (a confirmed report can have a linked fix-task while still open work). 422 if the referenced task doesn't exist. rank: archon — linking a report to its fix-task in the queue.\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
9214
|
+
"x-rank": "archon",
|
|
9215
|
+
"x-source": "modules/security/routes/reports.js",
|
|
9216
|
+
"parameters": [
|
|
9217
|
+
{
|
|
9218
|
+
"name": "id",
|
|
9219
|
+
"in": "path",
|
|
9220
|
+
"required": true,
|
|
9221
|
+
"schema": {
|
|
9222
|
+
"type": "string"
|
|
9223
|
+
},
|
|
9224
|
+
"description": "Path parameter `id`."
|
|
9225
|
+
}
|
|
9226
|
+
],
|
|
9227
|
+
"requestBody": {
|
|
9228
|
+
"required": true,
|
|
9229
|
+
"content": {
|
|
9230
|
+
"application/json": {
|
|
9231
|
+
"schema": {
|
|
9232
|
+
"$ref": "#/components/schemas/PostSecurityReportsIdLinkFixRequest"
|
|
9233
|
+
}
|
|
9234
|
+
}
|
|
9235
|
+
},
|
|
9236
|
+
"x-validated": true
|
|
9237
|
+
},
|
|
9238
|
+
"responses": {
|
|
9239
|
+
"200": {
|
|
9240
|
+
"description": "Success.",
|
|
9241
|
+
"content": {
|
|
9242
|
+
"application/json": {
|
|
9243
|
+
"schema": {
|
|
9244
|
+
"$ref": "#/components/schemas/PostSecurityReportsIdLinkFixResponse"
|
|
9245
|
+
}
|
|
9246
|
+
}
|
|
9247
|
+
}
|
|
9248
|
+
},
|
|
9249
|
+
"400": {
|
|
9250
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
9251
|
+
},
|
|
9252
|
+
"401": {
|
|
9253
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
9254
|
+
},
|
|
9255
|
+
"403": {
|
|
9256
|
+
"$ref": "#/components/responses/Forbidden"
|
|
9257
|
+
},
|
|
9258
|
+
"404": {
|
|
9259
|
+
"$ref": "#/components/responses/NotFound"
|
|
9260
|
+
}
|
|
9261
|
+
},
|
|
9262
|
+
"security": [
|
|
9263
|
+
{
|
|
9264
|
+
"builderSession": []
|
|
9265
|
+
}
|
|
9266
|
+
]
|
|
9267
|
+
}
|
|
9268
|
+
},
|
|
9269
|
+
"/session/optimize": {
|
|
8666
9270
|
"post": {
|
|
8667
9271
|
"operationId": "post_session_optimize",
|
|
8668
9272
|
"tags": [
|
|
@@ -9478,8 +10082,8 @@
|
|
|
9478
10082
|
"tasks"
|
|
9479
10083
|
],
|
|
9480
10084
|
"summary": "POST /tasks/:id/abandon",
|
|
9481
|
-
"description": "POST /tasks/:id/abandon — terminal \"retire this task\" transition (task 987). The lifecycle had promote/ship/confirm/resolve but no first-class way to KILL a task that is no longer relevant: the only paths to status='abandoned' were offboarding a builder or a raw SQL UPDATE, so stale/moot tasks lingered in 'ready' as claimable noise. Refuses on a shipped task (immutable history) and on a task with an active claim (release it first); idempotent on an already- abandoned task. The abandon + its `reason` land in audit_log via the writing middleware, so the ledger keeps a record of who retired what. rank: archon —
|
|
9482
|
-
"x-rank": "archon",
|
|
10085
|
+
"description": "POST /tasks/:id/abandon — terminal \"retire this task\" transition (task 987). The lifecycle had promote/ship/confirm/resolve but no first-class way to KILL a task that is no longer relevant: the only paths to status='abandoned' were offboarding a builder or a raw SQL UPDATE, so stale/moot tasks lingered in 'ready' as claimable noise. Refuses on a shipped task (immutable history) and on a task with an active claim (release it first); idempotent on an already- abandoned task. The abandon + its `reason` land in audit_log via the writing middleware, so the ledger keeps a record of who retired what. rank: metic+archon — scope removal; the inverse of /promote, and re-ranked to match it (ADR 0152, was archon under ADR 0090). A Metic who may author, shape, and promote work may also retire it: leaving the kill switch an Archon rung higher than the create switch only forced the owner to clean up after the triage they already delegated. Not one-way any more — /promote restores an abandoned task to backlog at the same rank — and the guards below (shipped refused, active claim refused) plus the audit_log entry are unchanged.\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).",
|
|
10086
|
+
"x-rank": "metic+archon",
|
|
9483
10087
|
"x-source": "modules/lifecycle/routes/tasks.js",
|
|
9484
10088
|
"parameters": [
|
|
9485
10089
|
{
|
|
@@ -10233,7 +10837,7 @@
|
|
|
10233
10837
|
"tasks"
|
|
10234
10838
|
],
|
|
10235
10839
|
"summary": "POST /tasks/:id/promote",
|
|
10236
|
-
"description": "backlog→ready promotion; scope mutation; ADR 0090 (was archon).\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).",
|
|
10840
|
+
"description": "backlog→ready promotion; scope mutation; ADR 0090 (was archon). Also the UN-ABANDON path (ADR 0152): 'abandoned' → 'backlog'. When abandon moved down to Metic+ it needed an undo at the same rank, or a Metic's mis-retire would be unrecoverable without Archon SQL (no other route restores an abandoned task — PATCH refuses `status` outright). A restore lands in **backlog**, never straight to ready: the task was retired for a reason, so it re-enters as un-workable and takes a second, deliberate promote to become claimable again.\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).",
|
|
10237
10841
|
"x-rank": "metic+archon",
|
|
10238
10842
|
"x-source": "modules/lifecycle/routes/tasks.js",
|
|
10239
10843
|
"parameters": [
|
|
@@ -10672,8 +11276,8 @@
|
|
|
10672
11276
|
"versions"
|
|
10673
11277
|
],
|
|
10674
11278
|
"summary": "POST /versions/:id/done-when",
|
|
10675
|
-
"description": "Auth (
|
|
10676
|
-
"x-rank": "archon",
|
|
11279
|
+
"description": "Auth (Metic+, then the goal's own authority): create a done-when criterion at RUNTIME. ADR 0105 moved scope-truth seeds (versions/goals/criteria) out of the normal migration path, so a brand-new criterion on a RUNNING instance can no longer be added by a plain migration (migrations/instance/ applies only under the owner opt-in GDS_APPLY_INSTANCE_SEEDS=1, a DR step). This is the vector a planning session uses to add a criterion to a live version WITHOUT a droplet migrate. ADR 0154 — authority over a GOAL's criteria follows GOAL OWNERSHIP, not global rank. A Metic who may create the goal (POST /goals) and author the tasks under it (POST /tasks, ADR 0090) may now write the criteria those tasks gate — but only inside a goal they own or manage. Deliberately NOT a flat re-rank: - An unsatisfied criterion permanently blocks version close (version-close.js counts satisfied === total per VERSION, regardless of goal) and goal auto-achieve (db.achieveGoalIfComplete). There is NO delete route, so it cannot be undone via the API — the same backward ratchet as unsatisfy, which stays Archon. - So a non-Archon must name a goal_id (version-level criteria stay Archon), must be that goal's OWNER or MANAGER (isGoalOwnerOrManager — the same predicate behind visibility/invite/role management), and the goal must be open on a planning/building version. That bounds the blast radius to a workspace they already hold. An unauthorized caller is masked behind bad_goal_id so the route is not an existence oracle (ADR 0112). Pinned in route-rank-check.MODULE_EXPECTED_RANKS. rank: metic+archon — criterion create, walled by goal ownership (ADR 0154).\n\n**Rank:** `metic+archon` — Metic or Archon rank (review/triage powers).",
|
|
11280
|
+
"x-rank": "metic+archon",
|
|
10677
11281
|
"x-source": "modules/lifecycle/routes/done-when.js",
|
|
10678
11282
|
"parameters": [
|
|
10679
11283
|
{
|
|
@@ -10929,18 +11533,33 @@
|
|
|
10929
11533
|
"status"
|
|
10930
11534
|
]
|
|
10931
11535
|
},
|
|
11536
|
+
"GetAuthWebAdmissionStatusResponse": {
|
|
11537
|
+
"type": "object",
|
|
11538
|
+
"properties": {
|
|
11539
|
+
"admitted": {
|
|
11540
|
+
"type": "boolean"
|
|
11541
|
+
}
|
|
11542
|
+
},
|
|
11543
|
+
"required": [
|
|
11544
|
+
"admitted"
|
|
11545
|
+
]
|
|
11546
|
+
},
|
|
10932
11547
|
"GetBackupStatusResponse": {
|
|
10933
11548
|
"type": "object",
|
|
10934
11549
|
"properties": {
|
|
10935
11550
|
"backup_dir": {},
|
|
10936
11551
|
"db_name": {},
|
|
10937
11552
|
"latest_dump": {},
|
|
11553
|
+
"stale": {},
|
|
11554
|
+
"age_hours": {},
|
|
10938
11555
|
"trigger_running": {}
|
|
10939
11556
|
},
|
|
10940
11557
|
"required": [
|
|
10941
11558
|
"backup_dir",
|
|
10942
11559
|
"db_name",
|
|
10943
11560
|
"latest_dump",
|
|
11561
|
+
"stale",
|
|
11562
|
+
"age_hours",
|
|
10944
11563
|
"trigger_running"
|
|
10945
11564
|
]
|
|
10946
11565
|
},
|
|
@@ -11398,6 +12017,50 @@
|
|
|
11398
12017
|
"files"
|
|
11399
12018
|
]
|
|
11400
12019
|
},
|
|
12020
|
+
"GetMemoryBuildersBuilderIdFileResponse": {
|
|
12021
|
+
"type": "object",
|
|
12022
|
+
"properties": {
|
|
12023
|
+
"builder_id": {},
|
|
12024
|
+
"forensic": {
|
|
12025
|
+
"type": "boolean"
|
|
12026
|
+
},
|
|
12027
|
+
"path": {},
|
|
12028
|
+
"content": {},
|
|
12029
|
+
"sha256": {},
|
|
12030
|
+
"byte_len": {},
|
|
12031
|
+
"mtime": {},
|
|
12032
|
+
"updated_at": {},
|
|
12033
|
+
"created_at": {}
|
|
12034
|
+
},
|
|
12035
|
+
"required": [
|
|
12036
|
+
"builder_id",
|
|
12037
|
+
"forensic",
|
|
12038
|
+
"path",
|
|
12039
|
+
"content",
|
|
12040
|
+
"sha256",
|
|
12041
|
+
"byte_len",
|
|
12042
|
+
"mtime",
|
|
12043
|
+
"updated_at",
|
|
12044
|
+
"created_at"
|
|
12045
|
+
]
|
|
12046
|
+
},
|
|
12047
|
+
"GetMemoryBuildersBuilderIdFilesResponse": {
|
|
12048
|
+
"type": "object",
|
|
12049
|
+
"properties": {
|
|
12050
|
+
"builder_id": {},
|
|
12051
|
+
"forensic": {
|
|
12052
|
+
"type": "boolean"
|
|
12053
|
+
},
|
|
12054
|
+
"count": {},
|
|
12055
|
+
"files": {}
|
|
12056
|
+
},
|
|
12057
|
+
"required": [
|
|
12058
|
+
"builder_id",
|
|
12059
|
+
"forensic",
|
|
12060
|
+
"count",
|
|
12061
|
+
"files"
|
|
12062
|
+
]
|
|
12063
|
+
},
|
|
11401
12064
|
"GetMemoryFileResponse": {
|
|
11402
12065
|
"type": "object",
|
|
11403
12066
|
"properties": {
|
|
@@ -11761,6 +12424,19 @@
|
|
|
11761
12424
|
"doc"
|
|
11762
12425
|
]
|
|
11763
12426
|
},
|
|
12427
|
+
"GetSecurityReportsResponse": {
|
|
12428
|
+
"type": "object",
|
|
12429
|
+
"properties": {
|
|
12430
|
+
"reports": {},
|
|
12431
|
+
"bounty_table": {},
|
|
12432
|
+
"statuses": {}
|
|
12433
|
+
},
|
|
12434
|
+
"required": [
|
|
12435
|
+
"reports",
|
|
12436
|
+
"bounty_table",
|
|
12437
|
+
"statuses"
|
|
12438
|
+
]
|
|
12439
|
+
},
|
|
11764
12440
|
"GetSessionsIdResponse": {
|
|
11765
12441
|
"type": "object",
|
|
11766
12442
|
"properties": {
|
|
@@ -12136,7 +12812,14 @@
|
|
|
12136
12812
|
"type": "integer",
|
|
12137
12813
|
"minimum": 1
|
|
12138
12814
|
},
|
|
12139
|
-
"reviewed_at": {}
|
|
12815
|
+
"reviewed_at": {},
|
|
12816
|
+
"merged_into_idea_id": {
|
|
12817
|
+
"type": "integer",
|
|
12818
|
+
"minimum": 1
|
|
12819
|
+
},
|
|
12820
|
+
"triage_note": {
|
|
12821
|
+
"type": "string"
|
|
12822
|
+
}
|
|
12140
12823
|
},
|
|
12141
12824
|
"additionalProperties": false
|
|
12142
12825
|
},
|
|
@@ -12409,6 +13092,30 @@
|
|
|
12409
13092
|
"interval"
|
|
12410
13093
|
]
|
|
12411
13094
|
},
|
|
13095
|
+
"PostAuthBackchannelLogoutRequest": {
|
|
13096
|
+
"type": "object",
|
|
13097
|
+
"properties": {
|
|
13098
|
+
"logout_token": {
|
|
13099
|
+
"type": "string",
|
|
13100
|
+
"maxLength": 4096
|
|
13101
|
+
}
|
|
13102
|
+
},
|
|
13103
|
+
"required": [
|
|
13104
|
+
"logout_token"
|
|
13105
|
+
],
|
|
13106
|
+
"additionalProperties": false
|
|
13107
|
+
},
|
|
13108
|
+
"PostAuthBackchannelLogoutResponse": {
|
|
13109
|
+
"type": "object",
|
|
13110
|
+
"properties": {
|
|
13111
|
+
"ok": {
|
|
13112
|
+
"type": "boolean"
|
|
13113
|
+
}
|
|
13114
|
+
},
|
|
13115
|
+
"required": [
|
|
13116
|
+
"ok"
|
|
13117
|
+
]
|
|
13118
|
+
},
|
|
12412
13119
|
"PostAuthCliTokenIssueResponse": {
|
|
12413
13120
|
"type": "object",
|
|
12414
13121
|
"properties": {
|
|
@@ -12964,13 +13671,15 @@
|
|
|
12964
13671
|
"claim": {},
|
|
12965
13672
|
"task": {},
|
|
12966
13673
|
"just_unlocked": {},
|
|
12967
|
-
"overlap_warning": {}
|
|
13674
|
+
"overlap_warning": {},
|
|
13675
|
+
"reward": {}
|
|
12968
13676
|
},
|
|
12969
13677
|
"required": [
|
|
12970
13678
|
"claim",
|
|
12971
13679
|
"task",
|
|
12972
13680
|
"just_unlocked",
|
|
12973
|
-
"overlap_warning"
|
|
13681
|
+
"overlap_warning",
|
|
13682
|
+
"reward"
|
|
12974
13683
|
]
|
|
12975
13684
|
},
|
|
12976
13685
|
"PostCostRequest": {
|
|
@@ -13617,6 +14326,16 @@
|
|
|
13617
14326
|
"succeeds_goal_id"
|
|
13618
14327
|
]
|
|
13619
14328
|
},
|
|
14329
|
+
"PostInboxIdRatifyRequest": {
|
|
14330
|
+
"type": "object",
|
|
14331
|
+
"properties": {
|
|
14332
|
+
"notes_md": {
|
|
14333
|
+
"type": "string",
|
|
14334
|
+
"maxLength": 10000
|
|
14335
|
+
}
|
|
14336
|
+
},
|
|
14337
|
+
"additionalProperties": false
|
|
14338
|
+
},
|
|
13620
14339
|
"PostInboxRequest": {
|
|
13621
14340
|
"type": "object",
|
|
13622
14341
|
"properties": {
|
|
@@ -13728,7 +14447,9 @@
|
|
|
13728
14447
|
"PostLlmCacheLookupResponse": {
|
|
13729
14448
|
"type": "object",
|
|
13730
14449
|
"properties": {
|
|
13731
|
-
"hit": {
|
|
14450
|
+
"hit": {
|
|
14451
|
+
"type": "boolean"
|
|
14452
|
+
},
|
|
13732
14453
|
"result": {}
|
|
13733
14454
|
},
|
|
13734
14455
|
"required": [
|
|
@@ -13748,7 +14469,9 @@
|
|
|
13748
14469
|
"PostLlmCacheStoreResponse": {
|
|
13749
14470
|
"type": "object",
|
|
13750
14471
|
"properties": {
|
|
13751
|
-
"stored": {
|
|
14472
|
+
"stored": {
|
|
14473
|
+
"type": "boolean"
|
|
14474
|
+
},
|
|
13752
14475
|
"result_cost_usd": {}
|
|
13753
14476
|
},
|
|
13754
14477
|
"required": [
|
|
@@ -14209,6 +14932,109 @@
|
|
|
14209
14932
|
"doc"
|
|
14210
14933
|
]
|
|
14211
14934
|
},
|
|
14935
|
+
"PostSecurityReportsIdConfirmRequest": {
|
|
14936
|
+
"type": "object",
|
|
14937
|
+
"properties": {
|
|
14938
|
+
"drachmae_awarded": {}
|
|
14939
|
+
},
|
|
14940
|
+
"additionalProperties": false
|
|
14941
|
+
},
|
|
14942
|
+
"PostSecurityReportsIdConfirmResponse": {
|
|
14943
|
+
"type": "object",
|
|
14944
|
+
"properties": {
|
|
14945
|
+
"report": {}
|
|
14946
|
+
},
|
|
14947
|
+
"required": [
|
|
14948
|
+
"report"
|
|
14949
|
+
]
|
|
14950
|
+
},
|
|
14951
|
+
"PostSecurityReportsIdDisputeResponse": {
|
|
14952
|
+
"type": "object",
|
|
14953
|
+
"properties": {
|
|
14954
|
+
"report": {}
|
|
14955
|
+
},
|
|
14956
|
+
"required": [
|
|
14957
|
+
"report"
|
|
14958
|
+
]
|
|
14959
|
+
},
|
|
14960
|
+
"PostSecurityReportsIdFixResponse": {
|
|
14961
|
+
"type": "object",
|
|
14962
|
+
"properties": {
|
|
14963
|
+
"report": {}
|
|
14964
|
+
},
|
|
14965
|
+
"required": [
|
|
14966
|
+
"report"
|
|
14967
|
+
]
|
|
14968
|
+
},
|
|
14969
|
+
"PostSecurityReportsIdLinkFixRequest": {
|
|
14970
|
+
"type": "object",
|
|
14971
|
+
"properties": {
|
|
14972
|
+
"task_id": {
|
|
14973
|
+
"$ref": "#/components/schemas/StringifiableId"
|
|
14974
|
+
}
|
|
14975
|
+
},
|
|
14976
|
+
"required": [
|
|
14977
|
+
"task_id"
|
|
14978
|
+
],
|
|
14979
|
+
"additionalProperties": false
|
|
14980
|
+
},
|
|
14981
|
+
"PostSecurityReportsIdLinkFixResponse": {
|
|
14982
|
+
"type": "object",
|
|
14983
|
+
"properties": {
|
|
14984
|
+
"report": {}
|
|
14985
|
+
},
|
|
14986
|
+
"required": [
|
|
14987
|
+
"report"
|
|
14988
|
+
]
|
|
14989
|
+
},
|
|
14990
|
+
"PostSecurityReportsRequest": {
|
|
14991
|
+
"type": "object",
|
|
14992
|
+
"properties": {
|
|
14993
|
+
"target": {
|
|
14994
|
+
"type": "string",
|
|
14995
|
+
"minLength": 1,
|
|
14996
|
+
"maxLength": 200
|
|
14997
|
+
},
|
|
14998
|
+
"severity": {
|
|
14999
|
+
"type": "string",
|
|
15000
|
+
"maxLength": 32
|
|
15001
|
+
},
|
|
15002
|
+
"title": {
|
|
15003
|
+
"type": "string",
|
|
15004
|
+
"minLength": 1,
|
|
15005
|
+
"maxLength": 200
|
|
15006
|
+
},
|
|
15007
|
+
"description": {
|
|
15008
|
+
"type": "string",
|
|
15009
|
+
"maxLength": 50000
|
|
15010
|
+
},
|
|
15011
|
+
"repro_steps_md": {
|
|
15012
|
+
"type": "string",
|
|
15013
|
+
"maxLength": 50000
|
|
15014
|
+
}
|
|
15015
|
+
},
|
|
15016
|
+
"required": [
|
|
15017
|
+
"target",
|
|
15018
|
+
"severity",
|
|
15019
|
+
"title"
|
|
15020
|
+
],
|
|
15021
|
+
"additionalProperties": false
|
|
15022
|
+
},
|
|
15023
|
+
"PostSecurityReportsResponse": {
|
|
15024
|
+
"type": "object",
|
|
15025
|
+
"properties": {
|
|
15026
|
+
"ok": {
|
|
15027
|
+
"type": "boolean"
|
|
15028
|
+
},
|
|
15029
|
+
"report": {},
|
|
15030
|
+
"bounty_table": {}
|
|
15031
|
+
},
|
|
15032
|
+
"required": [
|
|
15033
|
+
"ok",
|
|
15034
|
+
"report",
|
|
15035
|
+
"bounty_table"
|
|
15036
|
+
]
|
|
15037
|
+
},
|
|
14212
15038
|
"PostSessionOptimizeRequest": {
|
|
14213
15039
|
"type": "object",
|
|
14214
15040
|
"properties": {
|
|
@@ -15058,9 +15884,9 @@
|
|
|
15058
15884
|
"description": "A required dependency/feature is not configured or is temporarily down."
|
|
15059
15885
|
}
|
|
15060
15886
|
},
|
|
15061
|
-
"x-endpoint-count":
|
|
15062
|
-
"x-schema-count":
|
|
15887
|
+
"x-endpoint-count": 258,
|
|
15888
|
+
"x-schema-count": 288,
|
|
15063
15889
|
"x-undocumented-bodies": 8,
|
|
15064
|
-
"x-response-schemas":
|
|
15890
|
+
"x-response-schemas": 194,
|
|
15065
15891
|
"x-generated-by": "scripts/gds/gen-api-docs.js"
|
|
15066
15892
|
}
|