@bongos/core 1.18.0 → 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 +1740 -640
- 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 +5 -3
- 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 +11 -2
- 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/0142-project-context-is-prose-only.md +41 -0
- package/docs/adr/0143-onboarding-repo-picker-oauth-scope.md +35 -0
- 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 +15 -2
- package/docs/api/openapi.json +2648 -483
- package/docs/api-reference.md +73 -13
- 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 +15 -7
- 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/packaging-the-core.md +13 -0
- 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/upgrading-the-core.md +5 -2
- 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/039_newcomer_friendly_column.sql +5 -0
- package/migrations/102_remove_box_first_provision_approval.sql +4 -0
- package/migrations/core_192_github_oauth_tokens.sql +33 -0
- 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/my-projects.html +78 -0
- package/modules/hall-ui/public/my-projects.js +142 -0
- 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/scouting.html +45 -0
- package/modules/hall-ui/public/scouting.js +73 -0
- 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/modules/status-ui/public/explore.html +54 -0
- package/modules/status-ui/public/explore.js +67 -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 +252 -62
- 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 -21
- 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/lint-migrations.js +102 -0
- package/scripts/gds/login.js +58 -11
- package/scripts/gds/mirror-redact.js +5 -0
- package/scripts/gds/package-core.js +263 -4
- package/scripts/gds/paste-token.js +7 -1
- package/scripts/gds/preflight.js +126 -0
- package/scripts/gds/provision.js +268 -19
- package/scripts/gds/publish-manifest.js +22 -1
- package/scripts/gds/reauth.js +7 -3
- package/scripts/gds/regen-instance-docs.js +47 -0
- package/scripts/gds/run-unit-tests.js +42 -16
- 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 +72 -5
- package/scripts/gds/shell.js +5 -3
- package/scripts/gds/ship.js +433 -59
- 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 +271 -7
- package/scripts/migrate.sh +10 -0
- package/scripts/status-mirror-sync.js +114 -84
- package/src/bongos/api-errors.js +1 -0
- package/src/bongos/auth.js +809 -107
- package/src/bongos/db-kernel.js +27 -0
- package/src/bongos/db.js +105 -0
- package/src/bongos/github-repos.js +93 -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 +312 -13
- package/src/bongos/routes/backup.js +58 -2
- package/src/bongos/routes/github.js +90 -0
- package/src/bongos/routes/instance.js +15 -3
- package/src/bongos/routes/me.js +35 -1
- package/src/bongos/routes.js +2 -0
- package/src/bongos/serve-internal.js +84 -15
- package/src/branding.js +49 -2
- package/src/instance-config.js +46 -0
- package/src/module-api.js +140 -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 +41 -23
- 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/github_repos_helpers.mjs +91 -0
- package/tests/github_token_store.mjs +121 -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 +198 -0
- package/tests/idp_federation.mjs +100 -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/migrations_forward_safe.mjs +86 -0
- package/tests/module_api.mjs +1 -1
- 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/package_core.mjs +246 -1
- 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 +289 -7
- package/tests/pruned_lockfile_integrity.mjs +79 -0
- 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 +140 -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 +393 -5
- package/tests/web_admission_status.mjs +162 -0
- package/tests/write_validation_gaps.mjs +110 -0
- package/.gitignore +0 -91
- package/docs/adr/0139-platform-history-migration-to-cloudbongos.md +0 -94
- package/docs/adr/0140-cloudbongos-standalone-reprovision.md +0 -43
- package/scripts/hall-preview/fixtures/access-requests.json +0 -20
- package/scripts/hall-preview/fixtures/achievements.json +0 -76
- package/scripts/hall-preview/fixtures/analytics__builder.json +0 -251
- package/scripts/hall-preview/fixtures/audit-log.json +0 -68
- package/scripts/hall-preview/fixtures/blockers__detail.json +0 -12
- package/scripts/hall-preview/fixtures/box__me.json +0 -5
- package/scripts/hall-preview/fixtures/boxes__cost-ledger.json +0 -69
- package/scripts/hall-preview/fixtures/builders__active-claims.json +0 -1
- package/scripts/hall-preview/fixtures/builders__directory.json +0 -81
- package/scripts/hall-preview/fixtures/builders__roster.json +0 -48
- package/scripts/hall-preview/fixtures/goals.json +0 -502
- package/scripts/hall-preview/fixtures/goals__25.json +0 -96
- package/scripts/hall-preview/fixtures/goals__26.json +0 -67
- package/scripts/hall-preview/fixtures/goals__3.json +0 -103
- package/scripts/hall-preview/fixtures/goals__35.json +0 -49
- package/scripts/hall-preview/fixtures/goals__conflicts.json +0 -154
- package/scripts/hall-preview/fixtures/goals__detail.json +0 -96
- package/scripts/hall-preview/fixtures/goals__inbox.json +0 -5
- package/scripts/hall-preview/fixtures/goals__requests.json +0 -3
- package/scripts/hall-preview/fixtures/grades__by-builder.json +0 -32
- package/scripts/hall-preview/fixtures/inbox.json +0 -330
- package/scripts/hall-preview/fixtures/inbox__detail.json +0 -15
- package/scripts/hall-preview/fixtures/instance.json +0 -124
- package/scripts/hall-preview/fixtures/leaderboard.json +0 -184
- package/scripts/hall-preview/fixtures/me.json +0 -476
- package/scripts/hall-preview/fixtures/me__art-key__own.json +0 -6
- package/scripts/hall-preview/fixtures/me__event-sound-prefs.json +0 -209
- package/scripts/hall-preview/fixtures/me__recent-ships.json +0 -304
- package/scripts/hall-preview/fixtures/me__render.json +0 -5
- package/scripts/hall-preview/fixtures/me__skill-prefs.json +0 -143
- package/scripts/hall-preview/fixtures/me__sound-prefs.json +0 -67
- package/scripts/hall-preview/fixtures/me__wandering.json +0 -43
- package/scripts/hall-preview/fixtures/override-requests.json +0 -15
- package/scripts/hall-preview/fixtures/provisioning__fleet.json +0 -1
- package/scripts/hall-preview/fixtures/provisioning__fleet__cost-ledger.json +0 -1
- package/scripts/hall-preview/fixtures/provisioning__instances.json +0 -1
- package/scripts/hall-preview/fixtures/public__analytics__ecosystem.json +0 -516
- package/scripts/hall-preview/fixtures/public__bounty-table.json +0 -37
- package/scripts/hall-preview/fixtures/public__cost-summary.json +0 -742
- package/scripts/hall-preview/fixtures/public__estimation-drift.json +0 -41
- package/scripts/hall-preview/fixtures/public__grades.json +0 -50
- package/scripts/hall-preview/fixtures/public__progress.json +0 -124
- package/scripts/hall-preview/fixtures/public__recent-shipped.json +0 -426
- package/scripts/hall-preview/fixtures/public__repo-health.json +0 -160
- package/scripts/hall-preview/fixtures/public__repo-info.json +0 -5
- package/scripts/hall-preview/fixtures/security__docs.json +0 -10
- package/scripts/hall-preview/fixtures/security__reports.json +0 -31
- package/scripts/hall-preview/fixtures/sessions__search.json +0 -9
- package/scripts/hall-preview/fixtures/tasks.json +0 -2420
- package/scripts/hall-preview/fixtures/tasks__claimable.json +0 -2555
- package/scripts/hall-preview/fixtures/tasks__detail.json +0 -111
- package/scripts/hall-preview/fixtures/tasks__peer-votes__feed.json +0 -330
- package/scripts/hall-preview/fixtures/versions.json +0 -89
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": [
|
|
@@ -93,6 +93,10 @@
|
|
|
93
93
|
"name": "gate-approvals",
|
|
94
94
|
"description": "Endpoints under `/api/bongos/gate-approvals`."
|
|
95
95
|
},
|
|
96
|
+
{
|
|
97
|
+
"name": "github",
|
|
98
|
+
"description": "Endpoints under `/api/bongos/github`."
|
|
99
|
+
},
|
|
96
100
|
{
|
|
97
101
|
"name": "goals",
|
|
98
102
|
"description": "Endpoints under `/api/bongos/goals`."
|
|
@@ -141,10 +145,18 @@
|
|
|
141
145
|
"name": "modules",
|
|
142
146
|
"description": "Endpoints under `/api/bongos/modules`."
|
|
143
147
|
},
|
|
148
|
+
{
|
|
149
|
+
"name": "my-projects",
|
|
150
|
+
"description": "Endpoints under `/api/bongos/my-projects`."
|
|
151
|
+
},
|
|
144
152
|
{
|
|
145
153
|
"name": "override-requests",
|
|
146
154
|
"description": "Endpoints under `/api/bongos/override-requests`."
|
|
147
155
|
},
|
|
156
|
+
{
|
|
157
|
+
"name": "projects",
|
|
158
|
+
"description": "Endpoints under `/api/bongos/projects`."
|
|
159
|
+
},
|
|
148
160
|
{
|
|
149
161
|
"name": "provisioning",
|
|
150
162
|
"description": "Endpoints under `/api/bongos/provisioning`."
|
|
@@ -153,6 +165,10 @@
|
|
|
153
165
|
"name": "public",
|
|
154
166
|
"description": "Endpoints under `/api/bongos/public`."
|
|
155
167
|
},
|
|
168
|
+
{
|
|
169
|
+
"name": "scouting",
|
|
170
|
+
"description": "Endpoints under `/api/bongos/scouting`."
|
|
171
|
+
},
|
|
156
172
|
{
|
|
157
173
|
"name": "search",
|
|
158
174
|
"description": "Endpoints under `/api/bongos/search`."
|
|
@@ -169,6 +185,10 @@
|
|
|
169
185
|
"name": "sessions",
|
|
170
186
|
"description": "Endpoints under `/api/bongos/sessions`."
|
|
171
187
|
},
|
|
188
|
+
{
|
|
189
|
+
"name": "sso",
|
|
190
|
+
"description": "Endpoints under `/api/bongos/sso`."
|
|
191
|
+
},
|
|
172
192
|
{
|
|
173
193
|
"name": "tasks",
|
|
174
194
|
"description": "Endpoints under `/api/bongos/tasks`."
|
|
@@ -624,6 +644,45 @@
|
|
|
624
644
|
"security": []
|
|
625
645
|
}
|
|
626
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
|
+
},
|
|
627
686
|
"/auth/cli-token/issue": {
|
|
628
687
|
"post": {
|
|
629
688
|
"operationId": "post_auth_cli_token_issue",
|
|
@@ -662,6 +721,45 @@
|
|
|
662
721
|
]
|
|
663
722
|
}
|
|
664
723
|
},
|
|
724
|
+
"/auth/device/exchange": {
|
|
725
|
+
"post": {
|
|
726
|
+
"operationId": "post_auth_device_exchange",
|
|
727
|
+
"tags": [
|
|
728
|
+
"auth"
|
|
729
|
+
],
|
|
730
|
+
"summary": "POST /auth/device/exchange",
|
|
731
|
+
"description": "POST /auth/device/exchange — CLI federation (ADR 0141 §1). The CLI ran the device flow against the HUB and got a hub-signed assertion; it presents it here. The instance verifies the Ed25519 signature OFFLINE against the provisioned hub public key (aud must equal this instance's client_id, unexpired), then runs the instance's OWN admission gate + upsertBuilder + createSession(source='cli') and returns the existing { token, builder }. Only reachable when auth.idp is set. rank: public — an auth-establishment endpoint; the hub-signed assertion IS the bearer and is cryptographically verified before any session is minted.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
732
|
+
"x-rank": "public",
|
|
733
|
+
"x-source": "src/bongos/routes/auth.js",
|
|
734
|
+
"requestBody": {
|
|
735
|
+
"required": true,
|
|
736
|
+
"content": {
|
|
737
|
+
"application/json": {
|
|
738
|
+
"schema": {
|
|
739
|
+
"$ref": "#/components/schemas/PostAuthDeviceExchangeRequest"
|
|
740
|
+
}
|
|
741
|
+
}
|
|
742
|
+
},
|
|
743
|
+
"x-validated": true
|
|
744
|
+
},
|
|
745
|
+
"responses": {
|
|
746
|
+
"200": {
|
|
747
|
+
"description": "Success.",
|
|
748
|
+
"content": {
|
|
749
|
+
"application/json": {
|
|
750
|
+
"schema": {
|
|
751
|
+
"$ref": "#/components/schemas/PostAuthDeviceExchangeResponse"
|
|
752
|
+
}
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
},
|
|
756
|
+
"400": {
|
|
757
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
758
|
+
}
|
|
759
|
+
},
|
|
760
|
+
"security": []
|
|
761
|
+
}
|
|
762
|
+
},
|
|
665
763
|
"/auth/device/poll": {
|
|
666
764
|
"post": {
|
|
667
765
|
"operationId": "post_auth_device_poll",
|
|
@@ -951,6 +1049,34 @@
|
|
|
951
1049
|
]
|
|
952
1050
|
}
|
|
953
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
|
+
},
|
|
954
1080
|
"/auth/web/callback": {
|
|
955
1081
|
"get": {
|
|
956
1082
|
"operationId": "get_auth_web_callback",
|
|
@@ -1683,6 +1809,37 @@
|
|
|
1683
1809
|
]
|
|
1684
1810
|
}
|
|
1685
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
|
+
},
|
|
1686
1843
|
"/box/source-access": {
|
|
1687
1844
|
"get": {
|
|
1688
1845
|
"operationId": "get_box_source_access",
|
|
@@ -3198,7 +3355,7 @@
|
|
|
3198
3355
|
"done-when"
|
|
3199
3356
|
],
|
|
3200
3357
|
"summary": "POST /done-when/:criterionId/satisfy",
|
|
3201
|
-
"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).",
|
|
3202
3359
|
"x-rank": "metic+archon",
|
|
3203
3360
|
"x-source": "modules/lifecycle/routes/done-when.js",
|
|
3204
3361
|
"parameters": [
|
|
@@ -3389,6 +3546,91 @@
|
|
|
3389
3546
|
]
|
|
3390
3547
|
}
|
|
3391
3548
|
},
|
|
3549
|
+
"/github/repos": {
|
|
3550
|
+
"get": {
|
|
3551
|
+
"operationId": "get_github_repos",
|
|
3552
|
+
"tags": [
|
|
3553
|
+
"github"
|
|
3554
|
+
],
|
|
3555
|
+
"summary": "GET /github/repos",
|
|
3556
|
+
"description": "acts only on the caller's OWN GitHub identity (the token they granted). No rank gate beyond being a signed-in builder.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
3557
|
+
"x-rank": "any-builder",
|
|
3558
|
+
"x-source": "src/bongos/routes/github.js",
|
|
3559
|
+
"responses": {
|
|
3560
|
+
"200": {
|
|
3561
|
+
"description": "Success.",
|
|
3562
|
+
"content": {
|
|
3563
|
+
"application/json": {
|
|
3564
|
+
"schema": {
|
|
3565
|
+
"$ref": "#/components/schemas/GetGithubReposResponse"
|
|
3566
|
+
}
|
|
3567
|
+
}
|
|
3568
|
+
}
|
|
3569
|
+
},
|
|
3570
|
+
"400": {
|
|
3571
|
+
"$ref": "#/components/responses/BadRequest"
|
|
3572
|
+
},
|
|
3573
|
+
"401": {
|
|
3574
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
3575
|
+
},
|
|
3576
|
+
"403": {
|
|
3577
|
+
"$ref": "#/components/responses/Forbidden"
|
|
3578
|
+
}
|
|
3579
|
+
},
|
|
3580
|
+
"security": [
|
|
3581
|
+
{
|
|
3582
|
+
"builderSession": []
|
|
3583
|
+
}
|
|
3584
|
+
]
|
|
3585
|
+
},
|
|
3586
|
+
"post": {
|
|
3587
|
+
"operationId": "post_github_repos",
|
|
3588
|
+
"tags": [
|
|
3589
|
+
"github"
|
|
3590
|
+
],
|
|
3591
|
+
"summary": "POST /github/repos",
|
|
3592
|
+
"description": "creates a repo in the caller's OWN account.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
3593
|
+
"x-rank": "any-builder",
|
|
3594
|
+
"x-source": "src/bongos/routes/github.js",
|
|
3595
|
+
"requestBody": {
|
|
3596
|
+
"required": true,
|
|
3597
|
+
"content": {
|
|
3598
|
+
"application/json": {
|
|
3599
|
+
"schema": {
|
|
3600
|
+
"$ref": "#/components/schemas/PostGithubReposRequest"
|
|
3601
|
+
}
|
|
3602
|
+
}
|
|
3603
|
+
},
|
|
3604
|
+
"x-validated": true
|
|
3605
|
+
},
|
|
3606
|
+
"responses": {
|
|
3607
|
+
"200": {
|
|
3608
|
+
"description": "Success.",
|
|
3609
|
+
"content": {
|
|
3610
|
+
"application/json": {
|
|
3611
|
+
"schema": {
|
|
3612
|
+
"$ref": "#/components/schemas/PostGithubReposResponse"
|
|
3613
|
+
}
|
|
3614
|
+
}
|
|
3615
|
+
}
|
|
3616
|
+
},
|
|
3617
|
+
"400": {
|
|
3618
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
3619
|
+
},
|
|
3620
|
+
"401": {
|
|
3621
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
3622
|
+
},
|
|
3623
|
+
"403": {
|
|
3624
|
+
"$ref": "#/components/responses/Forbidden"
|
|
3625
|
+
}
|
|
3626
|
+
},
|
|
3627
|
+
"security": [
|
|
3628
|
+
{
|
|
3629
|
+
"builderSession": []
|
|
3630
|
+
}
|
|
3631
|
+
]
|
|
3632
|
+
}
|
|
3633
|
+
},
|
|
3392
3634
|
"/goals": {
|
|
3393
3635
|
"get": {
|
|
3394
3636
|
"operationId": "get_goals",
|
|
@@ -5013,6 +5255,62 @@
|
|
|
5013
5255
|
]
|
|
5014
5256
|
}
|
|
5015
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
|
+
},
|
|
5016
5314
|
"/instance": {
|
|
5017
5315
|
"get": {
|
|
5018
5316
|
"operationId": "get_instance",
|
|
@@ -6288,18 +6586,122 @@
|
|
|
6288
6586
|
]
|
|
6289
6587
|
}
|
|
6290
6588
|
},
|
|
6291
|
-
"/memory/file": {
|
|
6589
|
+
"/memory/builders/{builderId}/file": {
|
|
6292
6590
|
"get": {
|
|
6293
|
-
"operationId": "
|
|
6591
|
+
"operationId": "get_memory_builders_builderId_file",
|
|
6294
6592
|
"tags": [
|
|
6295
6593
|
"memory"
|
|
6296
6594
|
],
|
|
6297
|
-
"summary": "GET /memory/file",
|
|
6298
|
-
"description": "GET /memory/file?path=... —
|
|
6299
|
-
"x-rank": "
|
|
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",
|
|
6300
6598
|
"x-source": "modules/memory/routes/memory.js",
|
|
6301
|
-
"
|
|
6302
|
-
|
|
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
|
+
},
|
|
6693
|
+
"/memory/file": {
|
|
6694
|
+
"get": {
|
|
6695
|
+
"operationId": "get_memory_file",
|
|
6696
|
+
"tags": [
|
|
6697
|
+
"memory"
|
|
6698
|
+
],
|
|
6699
|
+
"summary": "GET /memory/file",
|
|
6700
|
+
"description": "GET /memory/file?path=... — fetch ONE of the AUTHENTICATED builder's files (content included). Single query (fetchMemoryFile is one SELECT). 404 if this builder has no file at that path. We use a ?path= query rather than a path-segment param because the stored keys are relative paths that may contain '/' (e.g. 'sub/dir/notes.md'); a single :path segment can't carry a slash, and a wildcard segment re-opens the traversal surface that assertValidPath exists to close. The query value is validated by assertValidPath (no leading '/', no '..', no NUL, no backslash) before it ever reaches the store. Auth: any authenticated builder. Self-scoped: owner is req.builder.id. Response 200: { builder_id, path, content, sha256, byte_len, mtime, updated_at, created_at }\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
6701
|
+
"x-rank": "any-builder",
|
|
6702
|
+
"x-source": "modules/memory/routes/memory.js",
|
|
6703
|
+
"responses": {
|
|
6704
|
+
"200": {
|
|
6303
6705
|
"description": "Success.",
|
|
6304
6706
|
"content": {
|
|
6305
6707
|
"application/json": {
|
|
@@ -6656,23 +7058,23 @@
|
|
|
6656
7058
|
]
|
|
6657
7059
|
}
|
|
6658
7060
|
},
|
|
6659
|
-
"/
|
|
7061
|
+
"/my-projects": {
|
|
6660
7062
|
"get": {
|
|
6661
|
-
"operationId": "
|
|
7063
|
+
"operationId": "get_my_projects",
|
|
6662
7064
|
"tags": [
|
|
6663
|
-
"
|
|
7065
|
+
"my-projects"
|
|
6664
7066
|
],
|
|
6665
|
-
"summary": "GET /
|
|
6666
|
-
"description": "
|
|
6667
|
-
"x-rank": "
|
|
6668
|
-
"x-source": "modules/
|
|
7067
|
+
"summary": "GET /my-projects",
|
|
7068
|
+
"description": "the caller's OWN cross-project memberships (own data).\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
7069
|
+
"x-rank": "any-builder",
|
|
7070
|
+
"x-source": "modules/platform-identity/routes/my-projects.js",
|
|
6669
7071
|
"responses": {
|
|
6670
7072
|
"200": {
|
|
6671
7073
|
"description": "Success.",
|
|
6672
7074
|
"content": {
|
|
6673
7075
|
"application/json": {
|
|
6674
7076
|
"schema": {
|
|
6675
|
-
"$ref": "#/components/schemas/
|
|
7077
|
+
"$ref": "#/components/schemas/GetMyProjectsResponse"
|
|
6676
7078
|
}
|
|
6677
7079
|
}
|
|
6678
7080
|
}
|
|
@@ -6694,44 +7096,78 @@
|
|
|
6694
7096
|
]
|
|
6695
7097
|
}
|
|
6696
7098
|
},
|
|
6697
|
-
"/
|
|
7099
|
+
"/my-projects/invites": {
|
|
7100
|
+
"get": {
|
|
7101
|
+
"operationId": "get_my_projects_invites",
|
|
7102
|
+
"tags": [
|
|
7103
|
+
"my-projects"
|
|
7104
|
+
],
|
|
7105
|
+
"summary": "GET /my-projects/invites",
|
|
7106
|
+
"description": "the caller's OWN pending invitations (ADR 0141 §5).\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
7107
|
+
"x-rank": "any-builder",
|
|
7108
|
+
"x-source": "modules/platform-identity/routes/my-projects.js",
|
|
7109
|
+
"responses": {
|
|
7110
|
+
"200": {
|
|
7111
|
+
"description": "Success.",
|
|
7112
|
+
"content": {
|
|
7113
|
+
"application/json": {
|
|
7114
|
+
"schema": {
|
|
7115
|
+
"$ref": "#/components/schemas/GetMyProjectsInvitesResponse"
|
|
7116
|
+
}
|
|
7117
|
+
}
|
|
7118
|
+
}
|
|
7119
|
+
},
|
|
7120
|
+
"400": {
|
|
7121
|
+
"$ref": "#/components/responses/BadRequest"
|
|
7122
|
+
},
|
|
7123
|
+
"401": {
|
|
7124
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
7125
|
+
},
|
|
7126
|
+
"403": {
|
|
7127
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7128
|
+
}
|
|
7129
|
+
},
|
|
7130
|
+
"security": [
|
|
7131
|
+
{
|
|
7132
|
+
"builderSession": []
|
|
7133
|
+
}
|
|
7134
|
+
]
|
|
7135
|
+
}
|
|
7136
|
+
},
|
|
7137
|
+
"/my-projects/invites/{clientId}/accept": {
|
|
6698
7138
|
"post": {
|
|
6699
|
-
"operationId": "
|
|
7139
|
+
"operationId": "post_my_projects_invites_clientId_accept",
|
|
6700
7140
|
"tags": [
|
|
6701
|
-
"
|
|
7141
|
+
"my-projects"
|
|
6702
7142
|
],
|
|
6703
|
-
"summary": "POST /
|
|
6704
|
-
"description": "
|
|
6705
|
-
"x-rank": "
|
|
6706
|
-
"x-source": "modules/
|
|
7143
|
+
"summary": "POST /my-projects/invites/:clientId/accept",
|
|
7144
|
+
"description": "accept an invite (pending → builder) for the caller's OWN account.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
7145
|
+
"x-rank": "any-builder",
|
|
7146
|
+
"x-source": "modules/platform-identity/routes/my-projects.js",
|
|
6707
7147
|
"parameters": [
|
|
6708
7148
|
{
|
|
6709
|
-
"name": "
|
|
7149
|
+
"name": "clientId",
|
|
6710
7150
|
"in": "path",
|
|
6711
7151
|
"required": true,
|
|
6712
7152
|
"schema": {
|
|
6713
7153
|
"type": "string"
|
|
6714
7154
|
},
|
|
6715
|
-
"description": "Path parameter `
|
|
7155
|
+
"description": "Path parameter `clientId`."
|
|
6716
7156
|
}
|
|
6717
7157
|
],
|
|
6718
|
-
"requestBody": {
|
|
6719
|
-
"required": true,
|
|
6720
|
-
"content": {
|
|
6721
|
-
"application/json": {
|
|
6722
|
-
"schema": {
|
|
6723
|
-
"$ref": "#/components/schemas/PostOverrideRequestsIdDecideRequest"
|
|
6724
|
-
}
|
|
6725
|
-
}
|
|
6726
|
-
},
|
|
6727
|
-
"x-validated": true
|
|
6728
|
-
},
|
|
6729
7158
|
"responses": {
|
|
6730
7159
|
"200": {
|
|
6731
|
-
"description": "Success."
|
|
7160
|
+
"description": "Success.",
|
|
7161
|
+
"content": {
|
|
7162
|
+
"application/json": {
|
|
7163
|
+
"schema": {
|
|
7164
|
+
"$ref": "#/components/schemas/PostMyProjectsInvitesClientIdAcceptResponse"
|
|
7165
|
+
}
|
|
7166
|
+
}
|
|
7167
|
+
}
|
|
6732
7168
|
},
|
|
6733
7169
|
"400": {
|
|
6734
|
-
"$ref": "#/components/responses/
|
|
7170
|
+
"$ref": "#/components/responses/BadRequest"
|
|
6735
7171
|
},
|
|
6736
7172
|
"401": {
|
|
6737
7173
|
"$ref": "#/components/responses/Unauthorized"
|
|
@@ -6750,23 +7186,34 @@
|
|
|
6750
7186
|
]
|
|
6751
7187
|
}
|
|
6752
7188
|
},
|
|
6753
|
-
"/
|
|
6754
|
-
"
|
|
6755
|
-
"operationId": "
|
|
7189
|
+
"/my-projects/invites/{clientId}/decline": {
|
|
7190
|
+
"post": {
|
|
7191
|
+
"operationId": "post_my_projects_invites_clientId_decline",
|
|
6756
7192
|
"tags": [
|
|
6757
|
-
"
|
|
7193
|
+
"my-projects"
|
|
7194
|
+
],
|
|
7195
|
+
"summary": "POST /my-projects/invites/:clientId/decline",
|
|
7196
|
+
"description": "decline an invite (delete the pending row) for the caller's OWN account.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
7197
|
+
"x-rank": "any-builder",
|
|
7198
|
+
"x-source": "modules/platform-identity/routes/my-projects.js",
|
|
7199
|
+
"parameters": [
|
|
7200
|
+
{
|
|
7201
|
+
"name": "clientId",
|
|
7202
|
+
"in": "path",
|
|
7203
|
+
"required": true,
|
|
7204
|
+
"schema": {
|
|
7205
|
+
"type": "string"
|
|
7206
|
+
},
|
|
7207
|
+
"description": "Path parameter `clientId`."
|
|
7208
|
+
}
|
|
6758
7209
|
],
|
|
6759
|
-
"summary": "GET /provisioning/fleet",
|
|
6760
|
-
"description": "GET /provisioning/fleet — the full instance roster across all owners. rank: archon (exposes every owner's instance + cost; the /boxes precedent).\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
6761
|
-
"x-rank": "archon",
|
|
6762
|
-
"x-source": "modules/provisioning/routes/provisioning.js",
|
|
6763
7210
|
"responses": {
|
|
6764
7211
|
"200": {
|
|
6765
7212
|
"description": "Success.",
|
|
6766
7213
|
"content": {
|
|
6767
7214
|
"application/json": {
|
|
6768
7215
|
"schema": {
|
|
6769
|
-
"$ref": "#/components/schemas/
|
|
7216
|
+
"$ref": "#/components/schemas/PostMyProjectsInvitesClientIdDeclineResponse"
|
|
6770
7217
|
}
|
|
6771
7218
|
}
|
|
6772
7219
|
}
|
|
@@ -6779,6 +7226,9 @@
|
|
|
6779
7226
|
},
|
|
6780
7227
|
"403": {
|
|
6781
7228
|
"$ref": "#/components/responses/Forbidden"
|
|
7229
|
+
},
|
|
7230
|
+
"404": {
|
|
7231
|
+
"$ref": "#/components/responses/NotFound"
|
|
6782
7232
|
}
|
|
6783
7233
|
},
|
|
6784
7234
|
"security": [
|
|
@@ -6788,22 +7238,40 @@
|
|
|
6788
7238
|
]
|
|
6789
7239
|
}
|
|
6790
7240
|
},
|
|
6791
|
-
"/
|
|
6792
|
-
"
|
|
6793
|
-
"operationId": "
|
|
7241
|
+
"/my-projects/join": {
|
|
7242
|
+
"post": {
|
|
7243
|
+
"operationId": "post_my_projects_join",
|
|
6794
7244
|
"tags": [
|
|
6795
|
-
"
|
|
7245
|
+
"my-projects"
|
|
6796
7246
|
],
|
|
6797
|
-
"summary": "
|
|
6798
|
-
"description": "
|
|
6799
|
-
"x-rank": "
|
|
6800
|
-
"x-source": "modules/
|
|
7247
|
+
"summary": "POST /my-projects/join",
|
|
7248
|
+
"description": "request to join a project. The hub RELAYS the request to the target project's own admission surface (it does NOT admit locally — authority stays local). SSRF guard: only relay to an origin that is a REGISTERED, active client — never an arbitrary builder-supplied URL.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
7249
|
+
"x-rank": "any-builder",
|
|
7250
|
+
"x-source": "modules/platform-identity/routes/my-projects.js",
|
|
7251
|
+
"requestBody": {
|
|
7252
|
+
"required": true,
|
|
7253
|
+
"content": {
|
|
7254
|
+
"application/json": {
|
|
7255
|
+
"schema": {
|
|
7256
|
+
"$ref": "#/components/schemas/PostMyProjectsJoinRequest"
|
|
7257
|
+
}
|
|
7258
|
+
}
|
|
7259
|
+
},
|
|
7260
|
+
"x-validated": true
|
|
7261
|
+
},
|
|
6801
7262
|
"responses": {
|
|
6802
7263
|
"200": {
|
|
6803
|
-
"description": "Success."
|
|
7264
|
+
"description": "Success.",
|
|
7265
|
+
"content": {
|
|
7266
|
+
"application/json": {
|
|
7267
|
+
"schema": {
|
|
7268
|
+
"$ref": "#/components/schemas/PostMyProjectsJoinResponse"
|
|
7269
|
+
}
|
|
7270
|
+
}
|
|
7271
|
+
}
|
|
6804
7272
|
},
|
|
6805
7273
|
"400": {
|
|
6806
|
-
"$ref": "#/components/responses/
|
|
7274
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
6807
7275
|
},
|
|
6808
7276
|
"401": {
|
|
6809
7277
|
"$ref": "#/components/responses/Unauthorized"
|
|
@@ -6819,100 +7287,169 @@
|
|
|
6819
7287
|
]
|
|
6820
7288
|
}
|
|
6821
7289
|
},
|
|
6822
|
-
"/
|
|
6823
|
-
"
|
|
6824
|
-
"operationId": "
|
|
7290
|
+
"/my-projects/{clientId}/leave": {
|
|
7291
|
+
"post": {
|
|
7292
|
+
"operationId": "post_my_projects_clientId_leave",
|
|
6825
7293
|
"tags": [
|
|
6826
|
-
"
|
|
7294
|
+
"my-projects"
|
|
7295
|
+
],
|
|
7296
|
+
"summary": "POST /my-projects/:clientId/leave",
|
|
7297
|
+
"description": "leave a project from the caller's OWN membership list.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
7298
|
+
"x-rank": "any-builder",
|
|
7299
|
+
"x-source": "modules/platform-identity/routes/my-projects.js",
|
|
7300
|
+
"parameters": [
|
|
7301
|
+
{
|
|
7302
|
+
"name": "clientId",
|
|
7303
|
+
"in": "path",
|
|
7304
|
+
"required": true,
|
|
7305
|
+
"schema": {
|
|
7306
|
+
"type": "string"
|
|
7307
|
+
},
|
|
7308
|
+
"description": "Path parameter `clientId`."
|
|
7309
|
+
}
|
|
6827
7310
|
],
|
|
6828
|
-
"summary": "GET /provisioning/github-app/callback",
|
|
6829
|
-
"description": "GET /provisioning/github-app/callback?code=&state= — GitHub redirects the owner's BROWSER here after they approve the App Manifest (task 2080, ADR 0133). It is a browser redirect with no session guaranteed, so it is PUBLIC — the unguessable, single-use, TTL'd `state` token (minted only for the signed-in owner and matched against provisioning_oauth_manifests) is the authorization, exactly as GitHub's own conversion `code` is \"the code IS the auth\". The web tier ONLY stores the code + flips status → 'code_received'; the control-plane runner (the sole token-holder) exchanges it for the client secret and places it in web.env. The secret NEVER touches the browser or the web tier. rank: public — no session, no mutation of authority, no secret revealed; a bad/expired/replayed state is a no-op error page.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
6830
|
-
"x-rank": "public",
|
|
6831
|
-
"x-source": "modules/provisioning/routes/provisioning.js",
|
|
6832
7311
|
"responses": {
|
|
6833
7312
|
"200": {
|
|
6834
|
-
"description": "Success."
|
|
7313
|
+
"description": "Success.",
|
|
7314
|
+
"content": {
|
|
7315
|
+
"application/json": {
|
|
7316
|
+
"schema": {
|
|
7317
|
+
"$ref": "#/components/schemas/PostMyProjectsClientIdLeaveResponse"
|
|
7318
|
+
}
|
|
7319
|
+
}
|
|
7320
|
+
}
|
|
6835
7321
|
},
|
|
6836
7322
|
"400": {
|
|
6837
7323
|
"$ref": "#/components/responses/BadRequest"
|
|
6838
|
-
}
|
|
6839
|
-
|
|
6840
|
-
|
|
6841
|
-
|
|
6842
|
-
|
|
6843
|
-
|
|
7324
|
+
},
|
|
7325
|
+
"401": {
|
|
7326
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
7327
|
+
},
|
|
7328
|
+
"403": {
|
|
7329
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7330
|
+
},
|
|
7331
|
+
"404": {
|
|
7332
|
+
"$ref": "#/components/responses/NotFound"
|
|
7333
|
+
}
|
|
7334
|
+
},
|
|
7335
|
+
"security": [
|
|
7336
|
+
{
|
|
7337
|
+
"builderSession": []
|
|
7338
|
+
}
|
|
7339
|
+
]
|
|
7340
|
+
}
|
|
7341
|
+
},
|
|
7342
|
+
"/override-requests": {
|
|
6844
7343
|
"get": {
|
|
6845
|
-
"operationId": "
|
|
7344
|
+
"operationId": "get_override_requests",
|
|
6846
7345
|
"tags": [
|
|
6847
|
-
"
|
|
7346
|
+
"override-requests"
|
|
6848
7347
|
],
|
|
6849
|
-
"summary": "GET /
|
|
6850
|
-
"description": "GET /
|
|
6851
|
-
"x-rank": "
|
|
6852
|
-
"x-source": "modules/
|
|
7348
|
+
"summary": "GET /override-requests",
|
|
7349
|
+
"description": "GET /override-requests?status=open — Archon queue. Status defaults to open; pass ?status=approved or ?status=denied for the resolved history. rank: archon — same gate as the audit log + Archon view.\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
7350
|
+
"x-rank": "archon",
|
|
7351
|
+
"x-source": "modules/lifecycle/routes/tasks.js",
|
|
6853
7352
|
"responses": {
|
|
6854
7353
|
"200": {
|
|
6855
7354
|
"description": "Success.",
|
|
6856
7355
|
"content": {
|
|
6857
7356
|
"application/json": {
|
|
6858
7357
|
"schema": {
|
|
6859
|
-
"$ref": "#/components/schemas/
|
|
7358
|
+
"$ref": "#/components/schemas/GetOverrideRequestsResponse"
|
|
6860
7359
|
}
|
|
6861
7360
|
}
|
|
6862
7361
|
}
|
|
6863
7362
|
},
|
|
6864
7363
|
"400": {
|
|
6865
7364
|
"$ref": "#/components/responses/BadRequest"
|
|
7365
|
+
},
|
|
7366
|
+
"401": {
|
|
7367
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
7368
|
+
},
|
|
7369
|
+
"403": {
|
|
7370
|
+
"$ref": "#/components/responses/Forbidden"
|
|
6866
7371
|
}
|
|
6867
7372
|
},
|
|
6868
|
-
"security": [
|
|
7373
|
+
"security": [
|
|
7374
|
+
{
|
|
7375
|
+
"builderSession": []
|
|
7376
|
+
}
|
|
7377
|
+
]
|
|
6869
7378
|
}
|
|
6870
7379
|
},
|
|
6871
|
-
"/
|
|
6872
|
-
"
|
|
6873
|
-
"operationId": "
|
|
7380
|
+
"/override-requests/{id}/decide": {
|
|
7381
|
+
"post": {
|
|
7382
|
+
"operationId": "post_override_requests_id_decide",
|
|
6874
7383
|
"tags": [
|
|
6875
|
-
"
|
|
7384
|
+
"override-requests"
|
|
6876
7385
|
],
|
|
6877
|
-
"summary": "
|
|
6878
|
-
"description": "
|
|
6879
|
-
"x-rank": "
|
|
6880
|
-
"x-source": "modules/
|
|
6881
|
-
"
|
|
6882
|
-
|
|
6883
|
-
"
|
|
6884
|
-
"
|
|
6885
|
-
|
|
6886
|
-
|
|
6887
|
-
|
|
6888
|
-
|
|
7386
|
+
"summary": "POST /override-requests/:id/decide",
|
|
7387
|
+
"description": "POST /override-requests/:id/decide — body: { decision: 'approve'|'deny', note? } On approve, atomically flips the task completed→confirmed and awards the credits to the original requester (NOT the Archon). On deny, only the row updates; the task stays at completed and the builder must release or re-ship after fixing whatever the grader caught. rank: archon — grader-bypass authority; same gate as POST /tasks/:id/confirm.\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
7388
|
+
"x-rank": "archon",
|
|
7389
|
+
"x-source": "modules/lifecycle/routes/tasks.js",
|
|
7390
|
+
"parameters": [
|
|
7391
|
+
{
|
|
7392
|
+
"name": "id",
|
|
7393
|
+
"in": "path",
|
|
7394
|
+
"required": true,
|
|
7395
|
+
"schema": {
|
|
7396
|
+
"type": "string"
|
|
7397
|
+
},
|
|
7398
|
+
"description": "Path parameter `id`."
|
|
7399
|
+
}
|
|
7400
|
+
],
|
|
7401
|
+
"requestBody": {
|
|
7402
|
+
"required": true,
|
|
7403
|
+
"content": {
|
|
7404
|
+
"application/json": {
|
|
7405
|
+
"schema": {
|
|
7406
|
+
"$ref": "#/components/schemas/PostOverrideRequestsIdDecideRequest"
|
|
6889
7407
|
}
|
|
6890
7408
|
}
|
|
6891
7409
|
},
|
|
7410
|
+
"x-validated": true
|
|
7411
|
+
},
|
|
7412
|
+
"responses": {
|
|
7413
|
+
"200": {
|
|
7414
|
+
"description": "Success."
|
|
7415
|
+
},
|
|
6892
7416
|
"400": {
|
|
6893
|
-
"$ref": "#/components/responses/
|
|
7417
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
7418
|
+
},
|
|
7419
|
+
"401": {
|
|
7420
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
7421
|
+
},
|
|
7422
|
+
"403": {
|
|
7423
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7424
|
+
},
|
|
7425
|
+
"404": {
|
|
7426
|
+
"$ref": "#/components/responses/NotFound"
|
|
6894
7427
|
}
|
|
6895
7428
|
},
|
|
6896
|
-
"security": [
|
|
7429
|
+
"security": [
|
|
7430
|
+
{
|
|
7431
|
+
"builderSession": []
|
|
7432
|
+
}
|
|
7433
|
+
]
|
|
6897
7434
|
}
|
|
6898
7435
|
},
|
|
6899
|
-
"/
|
|
7436
|
+
"/projects": {
|
|
6900
7437
|
"get": {
|
|
6901
|
-
"operationId": "
|
|
7438
|
+
"operationId": "get_projects",
|
|
6902
7439
|
"tags": [
|
|
6903
|
-
"
|
|
7440
|
+
"projects"
|
|
6904
7441
|
],
|
|
6905
|
-
"summary": "GET /
|
|
6906
|
-
"description": "
|
|
6907
|
-
"x-rank": "
|
|
6908
|
-
"x-source": "modules/
|
|
7442
|
+
"summary": "GET /projects",
|
|
7443
|
+
"description": "the full curation list (includes unfeatured + owner attribution).\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
7444
|
+
"x-rank": "archon",
|
|
7445
|
+
"x-source": "modules/platform-identity/routes/projects.js",
|
|
6909
7446
|
"responses": {
|
|
6910
7447
|
"200": {
|
|
6911
7448
|
"description": "Success.",
|
|
6912
7449
|
"content": {
|
|
6913
7450
|
"application/json": {
|
|
6914
7451
|
"schema": {
|
|
6915
|
-
"$ref": "#/components/schemas/
|
|
7452
|
+
"$ref": "#/components/schemas/GetProjectsResponse"
|
|
6916
7453
|
}
|
|
6917
7454
|
}
|
|
6918
7455
|
}
|
|
@@ -6934,20 +7471,20 @@
|
|
|
6934
7471
|
]
|
|
6935
7472
|
},
|
|
6936
7473
|
"post": {
|
|
6937
|
-
"operationId": "
|
|
7474
|
+
"operationId": "post_projects",
|
|
6938
7475
|
"tags": [
|
|
6939
|
-
"
|
|
7476
|
+
"projects"
|
|
6940
7477
|
],
|
|
6941
|
-
"summary": "POST /
|
|
6942
|
-
"description": "
|
|
6943
|
-
"x-rank": "
|
|
6944
|
-
"x-source": "modules/
|
|
7478
|
+
"summary": "POST /projects",
|
|
7479
|
+
"description": "create / update a catalog entry (manual seed for hand-wired instances; federated projects auto-catalogue at registration).\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
7480
|
+
"x-rank": "archon",
|
|
7481
|
+
"x-source": "modules/platform-identity/routes/projects.js",
|
|
6945
7482
|
"requestBody": {
|
|
6946
7483
|
"required": true,
|
|
6947
7484
|
"content": {
|
|
6948
7485
|
"application/json": {
|
|
6949
7486
|
"schema": {
|
|
6950
|
-
"$ref": "#/components/schemas/
|
|
7487
|
+
"$ref": "#/components/schemas/PostProjectsRequest"
|
|
6951
7488
|
}
|
|
6952
7489
|
}
|
|
6953
7490
|
},
|
|
@@ -6955,7 +7492,14 @@
|
|
|
6955
7492
|
},
|
|
6956
7493
|
"responses": {
|
|
6957
7494
|
"200": {
|
|
6958
|
-
"description": "Success."
|
|
7495
|
+
"description": "Success.",
|
|
7496
|
+
"content": {
|
|
7497
|
+
"application/json": {
|
|
7498
|
+
"schema": {
|
|
7499
|
+
"$ref": "#/components/schemas/PostProjectsResponse"
|
|
7500
|
+
}
|
|
7501
|
+
}
|
|
7502
|
+
}
|
|
6959
7503
|
},
|
|
6960
7504
|
"400": {
|
|
6961
7505
|
"$ref": "#/components/responses/ValidationFailed"
|
|
@@ -6974,101 +7518,67 @@
|
|
|
6974
7518
|
]
|
|
6975
7519
|
}
|
|
6976
7520
|
},
|
|
6977
|
-
"/
|
|
7521
|
+
"/projects/featured": {
|
|
6978
7522
|
"get": {
|
|
6979
|
-
"operationId": "
|
|
7523
|
+
"operationId": "get_projects_featured",
|
|
6980
7524
|
"tags": [
|
|
6981
|
-
"
|
|
6982
|
-
],
|
|
6983
|
-
"summary": "GET /provisioning/instances/:id",
|
|
6984
|
-
"description": "GET /provisioning/instances/:id — read one of the caller's own instances. rank: any authenticated builder (own resource). 404 when the id isn't the caller's (own-scoped; does not leak another owner's instance existence).\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
6985
|
-
"x-rank": "any-builder",
|
|
6986
|
-
"x-source": "modules/provisioning/routes/provisioning.js",
|
|
6987
|
-
"parameters": [
|
|
6988
|
-
{
|
|
6989
|
-
"name": "id",
|
|
6990
|
-
"in": "path",
|
|
6991
|
-
"required": true,
|
|
6992
|
-
"schema": {
|
|
6993
|
-
"type": "string"
|
|
6994
|
-
},
|
|
6995
|
-
"description": "Path parameter `id`."
|
|
6996
|
-
}
|
|
7525
|
+
"projects"
|
|
6997
7526
|
],
|
|
7527
|
+
"summary": "GET /projects/featured",
|
|
7528
|
+
"description": "a curated public showcase; no auth by design.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
7529
|
+
"x-rank": "public",
|
|
7530
|
+
"x-source": "modules/platform-identity/routes/projects.js",
|
|
6998
7531
|
"responses": {
|
|
6999
7532
|
"200": {
|
|
7000
7533
|
"description": "Success.",
|
|
7001
7534
|
"content": {
|
|
7002
7535
|
"application/json": {
|
|
7003
7536
|
"schema": {
|
|
7004
|
-
"$ref": "#/components/schemas/
|
|
7537
|
+
"$ref": "#/components/schemas/GetProjectsFeaturedResponse"
|
|
7005
7538
|
}
|
|
7006
7539
|
}
|
|
7007
7540
|
}
|
|
7008
7541
|
},
|
|
7009
7542
|
"400": {
|
|
7010
7543
|
"$ref": "#/components/responses/BadRequest"
|
|
7011
|
-
},
|
|
7012
|
-
"401": {
|
|
7013
|
-
"$ref": "#/components/responses/Unauthorized"
|
|
7014
|
-
},
|
|
7015
|
-
"403": {
|
|
7016
|
-
"$ref": "#/components/responses/Forbidden"
|
|
7017
|
-
},
|
|
7018
|
-
"404": {
|
|
7019
|
-
"$ref": "#/components/responses/NotFound"
|
|
7020
7544
|
}
|
|
7021
7545
|
},
|
|
7022
|
-
"security": [
|
|
7023
|
-
{
|
|
7024
|
-
"builderSession": []
|
|
7025
|
-
}
|
|
7026
|
-
]
|
|
7546
|
+
"security": []
|
|
7027
7547
|
}
|
|
7028
7548
|
},
|
|
7029
|
-
"/
|
|
7549
|
+
"/projects/invite": {
|
|
7030
7550
|
"post": {
|
|
7031
|
-
"operationId": "
|
|
7551
|
+
"operationId": "post_projects_invite",
|
|
7032
7552
|
"tags": [
|
|
7033
|
-
"
|
|
7553
|
+
"projects"
|
|
7034
7554
|
],
|
|
7035
|
-
"summary": "POST /
|
|
7036
|
-
"description": "
|
|
7555
|
+
"summary": "POST /projects/invite",
|
|
7556
|
+
"description": "invite a builder into a project (ADR 0141 §5, task #1002115). Pre-seeds a 'pending' membership the invitee accepts from My Projects. V1 invites by github_login and requires the invitee to already have a platform account (they build on some project); inviting someone entirely new to the platform (GitHub-id resolution) is a follow-up.\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
7037
7557
|
"x-rank": "archon",
|
|
7038
|
-
"x-source": "modules/
|
|
7039
|
-
"
|
|
7040
|
-
|
|
7041
|
-
|
|
7042
|
-
"
|
|
7043
|
-
|
|
7044
|
-
|
|
7045
|
-
"type": "string"
|
|
7046
|
-
},
|
|
7047
|
-
"description": "Path parameter `id`."
|
|
7048
|
-
}
|
|
7049
|
-
],
|
|
7050
|
-
"responses": {
|
|
7051
|
-
"200": {
|
|
7052
|
-
"description": "Success.",
|
|
7053
|
-
"content": {
|
|
7054
|
-
"application/json": {
|
|
7055
|
-
"schema": {
|
|
7056
|
-
"$ref": "#/components/schemas/PostProvisioningInstancesIdForceTeardownResponse"
|
|
7057
|
-
}
|
|
7558
|
+
"x-source": "modules/platform-identity/routes/projects.js",
|
|
7559
|
+
"requestBody": {
|
|
7560
|
+
"required": true,
|
|
7561
|
+
"content": {
|
|
7562
|
+
"application/json": {
|
|
7563
|
+
"schema": {
|
|
7564
|
+
"$ref": "#/components/schemas/PostProjectsInviteRequest"
|
|
7058
7565
|
}
|
|
7059
7566
|
}
|
|
7060
7567
|
},
|
|
7568
|
+
"x-validated": true
|
|
7569
|
+
},
|
|
7570
|
+
"responses": {
|
|
7571
|
+
"200": {
|
|
7572
|
+
"description": "Success."
|
|
7573
|
+
},
|
|
7061
7574
|
"400": {
|
|
7062
|
-
"$ref": "#/components/responses/
|
|
7575
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
7063
7576
|
},
|
|
7064
7577
|
"401": {
|
|
7065
7578
|
"$ref": "#/components/responses/Unauthorized"
|
|
7066
7579
|
},
|
|
7067
7580
|
"403": {
|
|
7068
7581
|
"$ref": "#/components/responses/Forbidden"
|
|
7069
|
-
},
|
|
7070
|
-
"404": {
|
|
7071
|
-
"$ref": "#/components/responses/NotFound"
|
|
7072
7582
|
}
|
|
7073
7583
|
},
|
|
7074
7584
|
"security": [
|
|
@@ -7078,16 +7588,16 @@
|
|
|
7078
7588
|
]
|
|
7079
7589
|
}
|
|
7080
7590
|
},
|
|
7081
|
-
"/
|
|
7082
|
-
"
|
|
7083
|
-
"operationId": "
|
|
7591
|
+
"/projects/{id}/featured": {
|
|
7592
|
+
"patch": {
|
|
7593
|
+
"operationId": "patch_projects_id_featured",
|
|
7084
7594
|
"tags": [
|
|
7085
|
-
"
|
|
7595
|
+
"projects"
|
|
7086
7596
|
],
|
|
7087
|
-
"summary": "
|
|
7088
|
-
"description": "
|
|
7089
|
-
"x-rank": "
|
|
7090
|
-
"x-source": "modules/
|
|
7597
|
+
"summary": "PATCH /projects/:id/featured",
|
|
7598
|
+
"description": "the feature / unfeature control (the ADR 0141 §5 curation gate).\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
7599
|
+
"x-rank": "archon",
|
|
7600
|
+
"x-source": "modules/platform-identity/routes/projects.js",
|
|
7091
7601
|
"parameters": [
|
|
7092
7602
|
{
|
|
7093
7603
|
"name": "id",
|
|
@@ -7100,11 +7610,11 @@
|
|
|
7100
7610
|
}
|
|
7101
7611
|
],
|
|
7102
7612
|
"requestBody": {
|
|
7103
|
-
"required":
|
|
7613
|
+
"required": true,
|
|
7104
7614
|
"content": {
|
|
7105
7615
|
"application/json": {
|
|
7106
7616
|
"schema": {
|
|
7107
|
-
"$ref": "#/components/schemas/
|
|
7617
|
+
"$ref": "#/components/schemas/PatchProjectsIdFeaturedRequest"
|
|
7108
7618
|
}
|
|
7109
7619
|
}
|
|
7110
7620
|
},
|
|
@@ -7116,7 +7626,7 @@
|
|
|
7116
7626
|
"content": {
|
|
7117
7627
|
"application/json": {
|
|
7118
7628
|
"schema": {
|
|
7119
|
-
"$ref": "#/components/schemas/
|
|
7629
|
+
"$ref": "#/components/schemas/PatchProjectsIdFeaturedResponse"
|
|
7120
7630
|
}
|
|
7121
7631
|
}
|
|
7122
7632
|
}
|
|
@@ -7141,34 +7651,23 @@
|
|
|
7141
7651
|
]
|
|
7142
7652
|
}
|
|
7143
7653
|
},
|
|
7144
|
-
"/provisioning/
|
|
7145
|
-
"
|
|
7146
|
-
"operationId": "
|
|
7654
|
+
"/provisioning/fleet": {
|
|
7655
|
+
"get": {
|
|
7656
|
+
"operationId": "get_provisioning_fleet",
|
|
7147
7657
|
"tags": [
|
|
7148
7658
|
"provisioning"
|
|
7149
7659
|
],
|
|
7150
|
-
"summary": "
|
|
7151
|
-
"description": "
|
|
7152
|
-
"x-rank": "
|
|
7660
|
+
"summary": "GET /provisioning/fleet",
|
|
7661
|
+
"description": "GET /provisioning/fleet — the full instance roster across all owners. rank: archon (exposes every owner's instance + cost; the /boxes precedent).\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
7662
|
+
"x-rank": "archon",
|
|
7153
7663
|
"x-source": "modules/provisioning/routes/provisioning.js",
|
|
7154
|
-
"parameters": [
|
|
7155
|
-
{
|
|
7156
|
-
"name": "id",
|
|
7157
|
-
"in": "path",
|
|
7158
|
-
"required": true,
|
|
7159
|
-
"schema": {
|
|
7160
|
-
"type": "string"
|
|
7161
|
-
},
|
|
7162
|
-
"description": "Path parameter `id`."
|
|
7163
|
-
}
|
|
7164
|
-
],
|
|
7165
7664
|
"responses": {
|
|
7166
7665
|
"200": {
|
|
7167
7666
|
"description": "Success.",
|
|
7168
7667
|
"content": {
|
|
7169
7668
|
"application/json": {
|
|
7170
7669
|
"schema": {
|
|
7171
|
-
"$ref": "#/components/schemas/
|
|
7670
|
+
"$ref": "#/components/schemas/GetProvisioningFleetResponse"
|
|
7172
7671
|
}
|
|
7173
7672
|
}
|
|
7174
7673
|
}
|
|
@@ -7181,9 +7680,6 @@
|
|
|
7181
7680
|
},
|
|
7182
7681
|
"403": {
|
|
7183
7682
|
"$ref": "#/components/responses/Forbidden"
|
|
7184
|
-
},
|
|
7185
|
-
"404": {
|
|
7186
|
-
"$ref": "#/components/responses/NotFound"
|
|
7187
7683
|
}
|
|
7188
7684
|
},
|
|
7189
7685
|
"security": [
|
|
@@ -7193,9 +7689,414 @@
|
|
|
7193
7689
|
]
|
|
7194
7690
|
}
|
|
7195
7691
|
},
|
|
7196
|
-
"/provisioning/
|
|
7692
|
+
"/provisioning/fleet/cost-ledger": {
|
|
7197
7693
|
"get": {
|
|
7198
|
-
"operationId": "
|
|
7694
|
+
"operationId": "get_provisioning_fleet_cost_ledger",
|
|
7695
|
+
"tags": [
|
|
7696
|
+
"provisioning"
|
|
7697
|
+
],
|
|
7698
|
+
"summary": "GET /provisioning/fleet/cost-ledger",
|
|
7699
|
+
"description": "GET /provisioning/fleet/cost-ledger — per-instance monthly estimate + total. rank: archon — cost oversight across the fleet (the /boxes/cost-ledger precedent). Declared among the archon routes (archon-first) for correct auditor classification.\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
7700
|
+
"x-rank": "archon",
|
|
7701
|
+
"x-source": "modules/provisioning/routes/provisioning.js",
|
|
7702
|
+
"responses": {
|
|
7703
|
+
"200": {
|
|
7704
|
+
"description": "Success."
|
|
7705
|
+
},
|
|
7706
|
+
"400": {
|
|
7707
|
+
"$ref": "#/components/responses/BadRequest"
|
|
7708
|
+
},
|
|
7709
|
+
"401": {
|
|
7710
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
7711
|
+
},
|
|
7712
|
+
"403": {
|
|
7713
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7714
|
+
}
|
|
7715
|
+
},
|
|
7716
|
+
"security": [
|
|
7717
|
+
{
|
|
7718
|
+
"builderSession": []
|
|
7719
|
+
}
|
|
7720
|
+
]
|
|
7721
|
+
}
|
|
7722
|
+
},
|
|
7723
|
+
"/provisioning/github-app/callback": {
|
|
7724
|
+
"get": {
|
|
7725
|
+
"operationId": "get_provisioning_github_app_callback",
|
|
7726
|
+
"tags": [
|
|
7727
|
+
"provisioning"
|
|
7728
|
+
],
|
|
7729
|
+
"summary": "GET /provisioning/github-app/callback",
|
|
7730
|
+
"description": "GET /provisioning/github-app/callback?code=&state= — GitHub redirects the owner's BROWSER here after they approve the App Manifest (task 2080, ADR 0133). It is a browser redirect with no session guaranteed, so it is PUBLIC — the unguessable, single-use, TTL'd `state` token (minted only for the signed-in owner and matched against provisioning_oauth_manifests) is the authorization, exactly as GitHub's own conversion `code` is \"the code IS the auth\". The web tier ONLY stores the code + flips status → 'code_received'; the control-plane runner (the sole token-holder) exchanges it for the client secret and places it in web.env. The secret NEVER touches the browser or the web tier. rank: public — no session, no mutation of authority, no secret revealed; a bad/expired/replayed state is a no-op error page.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
7731
|
+
"x-rank": "public",
|
|
7732
|
+
"x-source": "modules/provisioning/routes/provisioning.js",
|
|
7733
|
+
"responses": {
|
|
7734
|
+
"200": {
|
|
7735
|
+
"description": "Success."
|
|
7736
|
+
},
|
|
7737
|
+
"400": {
|
|
7738
|
+
"$ref": "#/components/responses/BadRequest"
|
|
7739
|
+
}
|
|
7740
|
+
},
|
|
7741
|
+
"security": []
|
|
7742
|
+
}
|
|
7743
|
+
},
|
|
7744
|
+
"/provisioning/github-app/status": {
|
|
7745
|
+
"get": {
|
|
7746
|
+
"operationId": "get_provisioning_github_app_status",
|
|
7747
|
+
"tags": [
|
|
7748
|
+
"provisioning"
|
|
7749
|
+
],
|
|
7750
|
+
"summary": "GET /provisioning/github-app/status",
|
|
7751
|
+
"description": "GET /provisioning/github-app/status?state=<> — the PUBLIC progress read the onboarding callback page polls (task 2096) to know when setup is done + where to send the owner. Same public-by-state model as the callback: the unguessable, single-use `state` token is the only key, and the response reveals only the manifest lifecycle status + the instance's own (already-public) domain — never a secret. Per-IP rate-limited because the page polls it every ~3s. `ready` is true iff the manifest reached 'done' (creds placed + /healthz verified) — the page then auto-redirects to https://<domain>. rank: public — no session, no mutation, no secret; an unknown state is a 404 no-op.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
7752
|
+
"x-rank": "public",
|
|
7753
|
+
"x-source": "modules/provisioning/routes/provisioning.js",
|
|
7754
|
+
"responses": {
|
|
7755
|
+
"200": {
|
|
7756
|
+
"description": "Success.",
|
|
7757
|
+
"content": {
|
|
7758
|
+
"application/json": {
|
|
7759
|
+
"schema": {
|
|
7760
|
+
"$ref": "#/components/schemas/GetProvisioningGithubAppStatusResponse"
|
|
7761
|
+
}
|
|
7762
|
+
}
|
|
7763
|
+
}
|
|
7764
|
+
},
|
|
7765
|
+
"400": {
|
|
7766
|
+
"$ref": "#/components/responses/BadRequest"
|
|
7767
|
+
}
|
|
7768
|
+
},
|
|
7769
|
+
"security": []
|
|
7770
|
+
}
|
|
7771
|
+
},
|
|
7772
|
+
"/provisioning/health": {
|
|
7773
|
+
"get": {
|
|
7774
|
+
"operationId": "get_provisioning_health",
|
|
7775
|
+
"tags": [
|
|
7776
|
+
"provisioning"
|
|
7777
|
+
],
|
|
7778
|
+
"summary": "GET /provisioning/health",
|
|
7779
|
+
"description": "GET /provisioning/health — liveness + the core version this module mounted against. rank: public (a plain liveness read; no write, no sensitive data).\n\n**Rank:** `public` — No authentication — any caller.",
|
|
7780
|
+
"x-rank": "public",
|
|
7781
|
+
"x-source": "modules/provisioning/routes/provisioning.js",
|
|
7782
|
+
"responses": {
|
|
7783
|
+
"200": {
|
|
7784
|
+
"description": "Success.",
|
|
7785
|
+
"content": {
|
|
7786
|
+
"application/json": {
|
|
7787
|
+
"schema": {
|
|
7788
|
+
"$ref": "#/components/schemas/GetProvisioningHealthResponse"
|
|
7789
|
+
}
|
|
7790
|
+
}
|
|
7791
|
+
}
|
|
7792
|
+
},
|
|
7793
|
+
"400": {
|
|
7794
|
+
"$ref": "#/components/responses/BadRequest"
|
|
7795
|
+
}
|
|
7796
|
+
},
|
|
7797
|
+
"security": []
|
|
7798
|
+
}
|
|
7799
|
+
},
|
|
7800
|
+
"/provisioning/instances": {
|
|
7801
|
+
"get": {
|
|
7802
|
+
"operationId": "get_provisioning_instances",
|
|
7803
|
+
"tags": [
|
|
7804
|
+
"provisioning"
|
|
7805
|
+
],
|
|
7806
|
+
"summary": "GET /provisioning/instances",
|
|
7807
|
+
"description": "GET /provisioning/instances — the caller's own instances + each open intent. rank: any authenticated builder (own resource read).\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
7808
|
+
"x-rank": "any-builder",
|
|
7809
|
+
"x-source": "modules/provisioning/routes/provisioning.js",
|
|
7810
|
+
"responses": {
|
|
7811
|
+
"200": {
|
|
7812
|
+
"description": "Success.",
|
|
7813
|
+
"content": {
|
|
7814
|
+
"application/json": {
|
|
7815
|
+
"schema": {
|
|
7816
|
+
"$ref": "#/components/schemas/GetProvisioningInstancesResponse"
|
|
7817
|
+
}
|
|
7818
|
+
}
|
|
7819
|
+
}
|
|
7820
|
+
},
|
|
7821
|
+
"400": {
|
|
7822
|
+
"$ref": "#/components/responses/BadRequest"
|
|
7823
|
+
},
|
|
7824
|
+
"401": {
|
|
7825
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
7826
|
+
},
|
|
7827
|
+
"403": {
|
|
7828
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7829
|
+
}
|
|
7830
|
+
},
|
|
7831
|
+
"security": [
|
|
7832
|
+
{
|
|
7833
|
+
"builderSession": []
|
|
7834
|
+
}
|
|
7835
|
+
]
|
|
7836
|
+
},
|
|
7837
|
+
"post": {
|
|
7838
|
+
"operationId": "post_provisioning_instances",
|
|
7839
|
+
"tags": [
|
|
7840
|
+
"provisioning"
|
|
7841
|
+
],
|
|
7842
|
+
"summary": "POST /provisioning/instances",
|
|
7843
|
+
"description": "POST /provisioning/instances — request a new instance. rank: any authenticated builder (own resource). ENQUEUES a 'provision' intent + records the request; the runner (task P3) does the real standup. Idempotent on slug for the SAME owner (re-request returns the existing row); a slug owned by ANOTHER builder → 409. Body: { slug (required), target_ref?, hosting_shape? (co-tenant|dedicated), domain?, tier? }.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
7844
|
+
"x-rank": "any-builder",
|
|
7845
|
+
"x-source": "modules/provisioning/routes/provisioning.js",
|
|
7846
|
+
"requestBody": {
|
|
7847
|
+
"required": true,
|
|
7848
|
+
"content": {
|
|
7849
|
+
"application/json": {
|
|
7850
|
+
"schema": {
|
|
7851
|
+
"$ref": "#/components/schemas/PostProvisioningInstancesRequest"
|
|
7852
|
+
}
|
|
7853
|
+
}
|
|
7854
|
+
},
|
|
7855
|
+
"x-validated": true
|
|
7856
|
+
},
|
|
7857
|
+
"responses": {
|
|
7858
|
+
"200": {
|
|
7859
|
+
"description": "Success."
|
|
7860
|
+
},
|
|
7861
|
+
"400": {
|
|
7862
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
7863
|
+
},
|
|
7864
|
+
"401": {
|
|
7865
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
7866
|
+
},
|
|
7867
|
+
"403": {
|
|
7868
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7869
|
+
}
|
|
7870
|
+
},
|
|
7871
|
+
"security": [
|
|
7872
|
+
{
|
|
7873
|
+
"builderSession": []
|
|
7874
|
+
}
|
|
7875
|
+
]
|
|
7876
|
+
}
|
|
7877
|
+
},
|
|
7878
|
+
"/provisioning/instances/{id}": {
|
|
7879
|
+
"get": {
|
|
7880
|
+
"operationId": "get_provisioning_instances_id",
|
|
7881
|
+
"tags": [
|
|
7882
|
+
"provisioning"
|
|
7883
|
+
],
|
|
7884
|
+
"summary": "GET /provisioning/instances/:id",
|
|
7885
|
+
"description": "GET /provisioning/instances/:id — read one of the caller's own instances. rank: any authenticated builder (own resource). 404 when the id isn't the caller's (own-scoped; does not leak another owner's instance existence).\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
7886
|
+
"x-rank": "any-builder",
|
|
7887
|
+
"x-source": "modules/provisioning/routes/provisioning.js",
|
|
7888
|
+
"parameters": [
|
|
7889
|
+
{
|
|
7890
|
+
"name": "id",
|
|
7891
|
+
"in": "path",
|
|
7892
|
+
"required": true,
|
|
7893
|
+
"schema": {
|
|
7894
|
+
"type": "string"
|
|
7895
|
+
},
|
|
7896
|
+
"description": "Path parameter `id`."
|
|
7897
|
+
}
|
|
7898
|
+
],
|
|
7899
|
+
"responses": {
|
|
7900
|
+
"200": {
|
|
7901
|
+
"description": "Success.",
|
|
7902
|
+
"content": {
|
|
7903
|
+
"application/json": {
|
|
7904
|
+
"schema": {
|
|
7905
|
+
"$ref": "#/components/schemas/GetProvisioningInstancesIdResponse"
|
|
7906
|
+
}
|
|
7907
|
+
}
|
|
7908
|
+
}
|
|
7909
|
+
},
|
|
7910
|
+
"400": {
|
|
7911
|
+
"$ref": "#/components/responses/BadRequest"
|
|
7912
|
+
},
|
|
7913
|
+
"401": {
|
|
7914
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
7915
|
+
},
|
|
7916
|
+
"403": {
|
|
7917
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7918
|
+
},
|
|
7919
|
+
"404": {
|
|
7920
|
+
"$ref": "#/components/responses/NotFound"
|
|
7921
|
+
}
|
|
7922
|
+
},
|
|
7923
|
+
"security": [
|
|
7924
|
+
{
|
|
7925
|
+
"builderSession": []
|
|
7926
|
+
}
|
|
7927
|
+
]
|
|
7928
|
+
}
|
|
7929
|
+
},
|
|
7930
|
+
"/provisioning/instances/{id}/force-teardown": {
|
|
7931
|
+
"post": {
|
|
7932
|
+
"operationId": "post_provisioning_instances_id_force_teardown",
|
|
7933
|
+
"tags": [
|
|
7934
|
+
"provisioning"
|
|
7935
|
+
],
|
|
7936
|
+
"summary": "POST /provisioning/instances/:id/force-teardown",
|
|
7937
|
+
"description": "POST /provisioning/instances/:id/force-teardown — Archon tears down ANY instance. Trust-safe by the same mechanism as the owner's own teardown: it ENQUEUES a 'teardown' intent for the control-plane runner; the web tier never holds cloud tokens. rank: archon (acts on another owner's infrastructure). Declared among the archon routes (archon-first).\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
7938
|
+
"x-rank": "archon",
|
|
7939
|
+
"x-source": "modules/provisioning/routes/provisioning.js",
|
|
7940
|
+
"parameters": [
|
|
7941
|
+
{
|
|
7942
|
+
"name": "id",
|
|
7943
|
+
"in": "path",
|
|
7944
|
+
"required": true,
|
|
7945
|
+
"schema": {
|
|
7946
|
+
"type": "string"
|
|
7947
|
+
},
|
|
7948
|
+
"description": "Path parameter `id`."
|
|
7949
|
+
}
|
|
7950
|
+
],
|
|
7951
|
+
"responses": {
|
|
7952
|
+
"200": {
|
|
7953
|
+
"description": "Success.",
|
|
7954
|
+
"content": {
|
|
7955
|
+
"application/json": {
|
|
7956
|
+
"schema": {
|
|
7957
|
+
"$ref": "#/components/schemas/PostProvisioningInstancesIdForceTeardownResponse"
|
|
7958
|
+
}
|
|
7959
|
+
}
|
|
7960
|
+
}
|
|
7961
|
+
},
|
|
7962
|
+
"400": {
|
|
7963
|
+
"$ref": "#/components/responses/BadRequest"
|
|
7964
|
+
},
|
|
7965
|
+
"401": {
|
|
7966
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
7967
|
+
},
|
|
7968
|
+
"403": {
|
|
7969
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7970
|
+
},
|
|
7971
|
+
"404": {
|
|
7972
|
+
"$ref": "#/components/responses/NotFound"
|
|
7973
|
+
}
|
|
7974
|
+
},
|
|
7975
|
+
"security": [
|
|
7976
|
+
{
|
|
7977
|
+
"builderSession": []
|
|
7978
|
+
}
|
|
7979
|
+
]
|
|
7980
|
+
}
|
|
7981
|
+
},
|
|
7982
|
+
"/provisioning/instances/{id}/github-app": {
|
|
7983
|
+
"post": {
|
|
7984
|
+
"operationId": "post_provisioning_instances_id_github_app",
|
|
7985
|
+
"tags": [
|
|
7986
|
+
"provisioning"
|
|
7987
|
+
],
|
|
7988
|
+
"summary": "POST /provisioning/instances/:id/github-app",
|
|
7989
|
+
"description": "POST /provisioning/instances/:id/github-app — mint a GitHub-App-Manifest onboarding link for the caller's OWN instance (task 2080, ADR 0133). rank: any authenticated builder (own resource). Returns the pre-filled manifest + the GitHub form-POST target (personal + org variants) + a one-time `state`; the browser POSTs the manifest to GitHub, the owner approves, and GitHub redirects back to the public callback below. The web tier only RECORDS the attempt (state token) — the control-plane runner does the token exchange + cred placement (trust boundary intact, ADR 0111 §2). Body: { account? ('personal'|'org') }.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
7990
|
+
"x-rank": "any-builder",
|
|
7991
|
+
"x-source": "modules/provisioning/routes/provisioning.js",
|
|
7992
|
+
"parameters": [
|
|
7993
|
+
{
|
|
7994
|
+
"name": "id",
|
|
7995
|
+
"in": "path",
|
|
7996
|
+
"required": true,
|
|
7997
|
+
"schema": {
|
|
7998
|
+
"type": "string"
|
|
7999
|
+
},
|
|
8000
|
+
"description": "Path parameter `id`."
|
|
8001
|
+
}
|
|
8002
|
+
],
|
|
8003
|
+
"requestBody": {
|
|
8004
|
+
"required": false,
|
|
8005
|
+
"content": {
|
|
8006
|
+
"application/json": {
|
|
8007
|
+
"schema": {
|
|
8008
|
+
"$ref": "#/components/schemas/PostProvisioningInstancesIdGithubAppRequest"
|
|
8009
|
+
}
|
|
8010
|
+
}
|
|
8011
|
+
},
|
|
8012
|
+
"x-validated": true
|
|
8013
|
+
},
|
|
8014
|
+
"responses": {
|
|
8015
|
+
"200": {
|
|
8016
|
+
"description": "Success.",
|
|
8017
|
+
"content": {
|
|
8018
|
+
"application/json": {
|
|
8019
|
+
"schema": {
|
|
8020
|
+
"$ref": "#/components/schemas/PostProvisioningInstancesIdGithubAppResponse"
|
|
8021
|
+
}
|
|
8022
|
+
}
|
|
8023
|
+
}
|
|
8024
|
+
},
|
|
8025
|
+
"400": {
|
|
8026
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
8027
|
+
},
|
|
8028
|
+
"401": {
|
|
8029
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8030
|
+
},
|
|
8031
|
+
"403": {
|
|
8032
|
+
"$ref": "#/components/responses/Forbidden"
|
|
8033
|
+
},
|
|
8034
|
+
"404": {
|
|
8035
|
+
"$ref": "#/components/responses/NotFound"
|
|
8036
|
+
}
|
|
8037
|
+
},
|
|
8038
|
+
"security": [
|
|
8039
|
+
{
|
|
8040
|
+
"builderSession": []
|
|
8041
|
+
}
|
|
8042
|
+
]
|
|
8043
|
+
}
|
|
8044
|
+
},
|
|
8045
|
+
"/provisioning/instances/{id}/teardown": {
|
|
8046
|
+
"post": {
|
|
8047
|
+
"operationId": "post_provisioning_instances_id_teardown",
|
|
8048
|
+
"tags": [
|
|
8049
|
+
"provisioning"
|
|
8050
|
+
],
|
|
8051
|
+
"summary": "POST /provisioning/instances/:id/teardown",
|
|
8052
|
+
"description": "POST /provisioning/instances/:id/teardown — request teardown of the caller's OWN instance. rank: any authenticated builder (own resource). Enqueues a 'teardown' intent; the runner executes it (web tier holds no tokens). 404 when the id isn't the caller's; 409 when the instance isn't in a teardownable state.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
8053
|
+
"x-rank": "any-builder",
|
|
8054
|
+
"x-source": "modules/provisioning/routes/provisioning.js",
|
|
8055
|
+
"parameters": [
|
|
8056
|
+
{
|
|
8057
|
+
"name": "id",
|
|
8058
|
+
"in": "path",
|
|
8059
|
+
"required": true,
|
|
8060
|
+
"schema": {
|
|
8061
|
+
"type": "string"
|
|
8062
|
+
},
|
|
8063
|
+
"description": "Path parameter `id`."
|
|
8064
|
+
}
|
|
8065
|
+
],
|
|
8066
|
+
"responses": {
|
|
8067
|
+
"200": {
|
|
8068
|
+
"description": "Success.",
|
|
8069
|
+
"content": {
|
|
8070
|
+
"application/json": {
|
|
8071
|
+
"schema": {
|
|
8072
|
+
"$ref": "#/components/schemas/PostProvisioningInstancesIdTeardownResponse"
|
|
8073
|
+
}
|
|
8074
|
+
}
|
|
8075
|
+
}
|
|
8076
|
+
},
|
|
8077
|
+
"400": {
|
|
8078
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8079
|
+
},
|
|
8080
|
+
"401": {
|
|
8081
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8082
|
+
},
|
|
8083
|
+
"403": {
|
|
8084
|
+
"$ref": "#/components/responses/Forbidden"
|
|
8085
|
+
},
|
|
8086
|
+
"404": {
|
|
8087
|
+
"$ref": "#/components/responses/NotFound"
|
|
8088
|
+
}
|
|
8089
|
+
},
|
|
8090
|
+
"security": [
|
|
8091
|
+
{
|
|
8092
|
+
"builderSession": []
|
|
8093
|
+
}
|
|
8094
|
+
]
|
|
8095
|
+
}
|
|
8096
|
+
},
|
|
8097
|
+
"/provisioning/onboard-plan": {
|
|
8098
|
+
"get": {
|
|
8099
|
+
"operationId": "get_provisioning_onboard_plan",
|
|
7199
8100
|
"tags": [
|
|
7200
8101
|
"provisioning"
|
|
7201
8102
|
],
|
|
@@ -7233,7 +8134,259 @@
|
|
|
7233
8134
|
"x-source": "modules/provisioning/routes/provisioning.js",
|
|
7234
8135
|
"responses": {
|
|
7235
8136
|
"200": {
|
|
7236
|
-
"description": "Success."
|
|
8137
|
+
"description": "Success."
|
|
8138
|
+
},
|
|
8139
|
+
"400": {
|
|
8140
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8141
|
+
}
|
|
8142
|
+
},
|
|
8143
|
+
"security": []
|
|
8144
|
+
}
|
|
8145
|
+
},
|
|
8146
|
+
"/public/analytics/ecosystem": {
|
|
8147
|
+
"get": {
|
|
8148
|
+
"operationId": "get_public_analytics_ecosystem",
|
|
8149
|
+
"tags": [
|
|
8150
|
+
"public"
|
|
8151
|
+
],
|
|
8152
|
+
"summary": "GET /public/analytics/ecosystem",
|
|
8153
|
+
"description": "ecosystem-wide dev-curve aggregate; individuals stripped.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
8154
|
+
"x-rank": "public",
|
|
8155
|
+
"x-source": "modules/lifecycle/routes/analytics.js",
|
|
8156
|
+
"responses": {
|
|
8157
|
+
"200": {
|
|
8158
|
+
"description": "Success."
|
|
8159
|
+
},
|
|
8160
|
+
"400": {
|
|
8161
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8162
|
+
}
|
|
8163
|
+
},
|
|
8164
|
+
"security": []
|
|
8165
|
+
}
|
|
8166
|
+
},
|
|
8167
|
+
"/public/blockers/{id}": {
|
|
8168
|
+
"get": {
|
|
8169
|
+
"operationId": "get_public_blockers_id",
|
|
8170
|
+
"tags": [
|
|
8171
|
+
"public"
|
|
8172
|
+
],
|
|
8173
|
+
"summary": "GET /public/blockers/:id",
|
|
8174
|
+
"description": "Public blocker resolver (task 654) — same minimal-projection posture as the idea resolver. id + status ONLY (title/body/resolution_note are all internal). rank: public — id/status only.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
8175
|
+
"x-rank": "public",
|
|
8176
|
+
"x-source": "src/bongos/routes/public.js",
|
|
8177
|
+
"parameters": [
|
|
8178
|
+
{
|
|
8179
|
+
"name": "id",
|
|
8180
|
+
"in": "path",
|
|
8181
|
+
"required": true,
|
|
8182
|
+
"schema": {
|
|
8183
|
+
"type": "string"
|
|
8184
|
+
},
|
|
8185
|
+
"description": "Path parameter `id`."
|
|
8186
|
+
}
|
|
8187
|
+
],
|
|
8188
|
+
"responses": {
|
|
8189
|
+
"200": {
|
|
8190
|
+
"description": "Success.",
|
|
8191
|
+
"content": {
|
|
8192
|
+
"application/json": {
|
|
8193
|
+
"schema": {
|
|
8194
|
+
"$ref": "#/components/schemas/GetPublicBlockersIdResponse"
|
|
8195
|
+
}
|
|
8196
|
+
}
|
|
8197
|
+
}
|
|
8198
|
+
},
|
|
8199
|
+
"400": {
|
|
8200
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8201
|
+
},
|
|
8202
|
+
"404": {
|
|
8203
|
+
"$ref": "#/components/responses/NotFound"
|
|
8204
|
+
}
|
|
8205
|
+
},
|
|
8206
|
+
"security": []
|
|
8207
|
+
}
|
|
8208
|
+
},
|
|
8209
|
+
"/public/bounty-table": {
|
|
8210
|
+
"get": {
|
|
8211
|
+
"operationId": "get_public_bounty_table",
|
|
8212
|
+
"tags": [
|
|
8213
|
+
"public"
|
|
8214
|
+
],
|
|
8215
|
+
"summary": "GET /public/bounty-table",
|
|
8216
|
+
"description": "V3.R65 task 284: red-team bounty payout table by severity. Single source of truth is modules/security/security.js (defaults + env overrides), carved to the `security` kernel PORT (BV1.R79 / ADR 0093 §1); the /builders hall renders this under \"Red-team rewards\". Same port-resolve pattern as /public/cost-summary resolving the `reward` port. No auth — it's just the public reward schedule (security is default-on). rank: public — red-team bounty payout table (reward schedule).\n\n**Rank:** `public` — No authentication — any caller.",
|
|
8217
|
+
"x-rank": "public",
|
|
8218
|
+
"x-source": "src/bongos/routes/public.js",
|
|
8219
|
+
"responses": {
|
|
8220
|
+
"200": {
|
|
8221
|
+
"description": "Success.",
|
|
8222
|
+
"content": {
|
|
8223
|
+
"application/json": {
|
|
8224
|
+
"schema": {
|
|
8225
|
+
"$ref": "#/components/schemas/GetPublicBountyTableResponse"
|
|
8226
|
+
}
|
|
8227
|
+
}
|
|
8228
|
+
}
|
|
8229
|
+
},
|
|
8230
|
+
"400": {
|
|
8231
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8232
|
+
}
|
|
8233
|
+
},
|
|
8234
|
+
"security": []
|
|
8235
|
+
}
|
|
8236
|
+
},
|
|
8237
|
+
"/public/branding": {
|
|
8238
|
+
"get": {
|
|
8239
|
+
"operationId": "get_public_branding",
|
|
8240
|
+
"tags": [
|
|
8241
|
+
"public"
|
|
8242
|
+
],
|
|
8243
|
+
"summary": "GET /public/branding",
|
|
8244
|
+
"description": "the client-safe branding projection (R56 task 1195, ADR 0062 §3). Lets the hall + the OFF-BOX status page (served from GitHub Pages, so it can only read branding cross-origin — it can't be server-injected) resolve instance strings from config instead of hard-coding them. R56 exposes the configurable currency label; R57 (task 1196) extends clientBranding() with identity + theme + copy. Long cache: the pack is committed config, not live state, and the resolver is a boot-time singleton.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
8245
|
+
"x-rank": "public",
|
|
8246
|
+
"x-source": "src/bongos/routes/public.js",
|
|
8247
|
+
"responses": {
|
|
8248
|
+
"200": {
|
|
8249
|
+
"description": "Success."
|
|
8250
|
+
},
|
|
8251
|
+
"400": {
|
|
8252
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8253
|
+
}
|
|
8254
|
+
},
|
|
8255
|
+
"security": []
|
|
8256
|
+
}
|
|
8257
|
+
},
|
|
8258
|
+
"/public/cost-summary": {
|
|
8259
|
+
"get": {
|
|
8260
|
+
"operationId": "get_public_cost_summary",
|
|
8261
|
+
"tags": [
|
|
8262
|
+
"public"
|
|
8263
|
+
],
|
|
8264
|
+
"summary": "GET /public/cost-summary",
|
|
8265
|
+
"description": "GDS task 118: `daily` + `daily_credits` are guaranteed gap-free (one row per day from the earliest event through CURRENT_DATE, server timezone) so the treasury chart's cumulative line carries forward on idle days and always reaches today. The gap-fill is implemented inside db.costSummary() via generate_series + LEFT JOIN. System 1 / task 1345: the same payload now also carries additive by_source / by_tier / savings blocks (existing keys keep their shape) — a pure passthrough; the shaping + the savings-table guard live in costSummary(). rank: public — treasury chart feed.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
8266
|
+
"x-rank": "public",
|
|
8267
|
+
"x-source": "src/bongos/routes/public.js",
|
|
8268
|
+
"responses": {
|
|
8269
|
+
"200": {
|
|
8270
|
+
"description": "Success."
|
|
8271
|
+
},
|
|
8272
|
+
"400": {
|
|
8273
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8274
|
+
}
|
|
8275
|
+
},
|
|
8276
|
+
"security": []
|
|
8277
|
+
}
|
|
8278
|
+
},
|
|
8279
|
+
"/public/estimation-drift": {
|
|
8280
|
+
"get": {
|
|
8281
|
+
"operationId": "get_public_estimation_drift",
|
|
8282
|
+
"tags": [
|
|
8283
|
+
"public"
|
|
8284
|
+
],
|
|
8285
|
+
"summary": "GET /public/estimation-drift",
|
|
8286
|
+
"description": "est-vs-actual aggregate.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
8287
|
+
"x-rank": "public",
|
|
8288
|
+
"x-source": "src/bongos/routes/public.js",
|
|
8289
|
+
"responses": {
|
|
8290
|
+
"200": {
|
|
8291
|
+
"description": "Success."
|
|
8292
|
+
},
|
|
8293
|
+
"400": {
|
|
8294
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8295
|
+
}
|
|
8296
|
+
},
|
|
8297
|
+
"security": []
|
|
8298
|
+
}
|
|
8299
|
+
},
|
|
8300
|
+
"/public/grades": {
|
|
8301
|
+
"get": {
|
|
8302
|
+
"operationId": "get_public_grades",
|
|
8303
|
+
"tags": [
|
|
8304
|
+
"public"
|
|
8305
|
+
],
|
|
8306
|
+
"summary": "GET /public/grades",
|
|
8307
|
+
"description": "PMS-V2 task 197: rolling 7d quality-grade tile + 30d trend for the dashboard. rank: public — rolling quality-grade tile + 30d trend.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
8308
|
+
"x-rank": "public",
|
|
8309
|
+
"x-source": "src/bongos/routes/public.js",
|
|
8310
|
+
"responses": {
|
|
8311
|
+
"200": {
|
|
8312
|
+
"description": "Success.",
|
|
8313
|
+
"content": {
|
|
8314
|
+
"application/json": {
|
|
8315
|
+
"schema": {
|
|
8316
|
+
"$ref": "#/components/schemas/GetPublicGradesResponse"
|
|
8317
|
+
}
|
|
8318
|
+
}
|
|
8319
|
+
}
|
|
8320
|
+
},
|
|
8321
|
+
"400": {
|
|
8322
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8323
|
+
}
|
|
8324
|
+
},
|
|
8325
|
+
"security": []
|
|
8326
|
+
}
|
|
8327
|
+
},
|
|
8328
|
+
"/public/ideas/{id}": {
|
|
8329
|
+
"get": {
|
|
8330
|
+
"operationId": "get_public_ideas_id",
|
|
8331
|
+
"tags": [
|
|
8332
|
+
"public"
|
|
8333
|
+
],
|
|
8334
|
+
"summary": "GET /public/ideas/:id",
|
|
8335
|
+
"description": "Public idea resolver (task 654) — the open-web counterpart to the hall's authenticated /inbox/:id. Minimal projection ONLY (id, status, kind): an idea's title/body is internal and may name unshipped work, so it is NEVER returned here. The status dashboard renders this as a minimal card + an \"open in Builders' Hall\" link (where a signed-in builder sees the full record). SELECT only the non-sensitive columns so the title never even leaves the DB. rank: public — id/status/type only.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
8336
|
+
"x-rank": "public",
|
|
8337
|
+
"x-source": "src/bongos/routes/public.js",
|
|
8338
|
+
"parameters": [
|
|
8339
|
+
{
|
|
8340
|
+
"name": "id",
|
|
8341
|
+
"in": "path",
|
|
8342
|
+
"required": true,
|
|
8343
|
+
"schema": {
|
|
8344
|
+
"type": "string"
|
|
8345
|
+
},
|
|
8346
|
+
"description": "Path parameter `id`."
|
|
8347
|
+
}
|
|
8348
|
+
],
|
|
8349
|
+
"responses": {
|
|
8350
|
+
"200": {
|
|
8351
|
+
"description": "Success.",
|
|
8352
|
+
"content": {
|
|
8353
|
+
"application/json": {
|
|
8354
|
+
"schema": {
|
|
8355
|
+
"$ref": "#/components/schemas/GetPublicIdeasIdResponse"
|
|
8356
|
+
}
|
|
8357
|
+
}
|
|
8358
|
+
}
|
|
8359
|
+
},
|
|
8360
|
+
"400": {
|
|
8361
|
+
"$ref": "#/components/responses/BadRequest"
|
|
8362
|
+
},
|
|
8363
|
+
"404": {
|
|
8364
|
+
"$ref": "#/components/responses/NotFound"
|
|
8365
|
+
}
|
|
8366
|
+
},
|
|
8367
|
+
"security": []
|
|
8368
|
+
}
|
|
8369
|
+
},
|
|
8370
|
+
"/public/leaderboard": {
|
|
8371
|
+
"get": {
|
|
8372
|
+
"operationId": "get_public_leaderboard",
|
|
8373
|
+
"tags": [
|
|
8374
|
+
"public"
|
|
8375
|
+
],
|
|
8376
|
+
"summary": "GET /public/leaderboard",
|
|
8377
|
+
"description": "PMS-V2 task 188: each row now carries an `achievements` string[] (top 5 unlocked IDs by sort_order) so the dashboard can render inline emoji rows without a follow-up API call. Single SQL query — no N+1. rank: public — leaderboard with achievements; dashboard render.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
8378
|
+
"x-rank": "public",
|
|
8379
|
+
"x-source": "src/bongos/routes/public.js",
|
|
8380
|
+
"responses": {
|
|
8381
|
+
"200": {
|
|
8382
|
+
"description": "Success.",
|
|
8383
|
+
"content": {
|
|
8384
|
+
"application/json": {
|
|
8385
|
+
"schema": {
|
|
8386
|
+
"$ref": "#/components/schemas/GetPublicLeaderboardResponse"
|
|
8387
|
+
}
|
|
8388
|
+
}
|
|
8389
|
+
}
|
|
7237
8390
|
},
|
|
7238
8391
|
"400": {
|
|
7239
8392
|
"$ref": "#/components/responses/BadRequest"
|
|
@@ -7242,16 +8395,16 @@
|
|
|
7242
8395
|
"security": []
|
|
7243
8396
|
}
|
|
7244
8397
|
},
|
|
7245
|
-
"/public/
|
|
8398
|
+
"/public/modules": {
|
|
7246
8399
|
"get": {
|
|
7247
|
-
"operationId": "
|
|
8400
|
+
"operationId": "get_public_modules",
|
|
7248
8401
|
"tags": [
|
|
7249
8402
|
"public"
|
|
7250
8403
|
],
|
|
7251
|
-
"summary": "GET /public/
|
|
7252
|
-
"description": "
|
|
8404
|
+
"summary": "GET /public/modules",
|
|
8405
|
+
"description": "the client-safe feature-module set (R54 task 1193, ADR 0062 §4). Lets the off-box status page (served from GitHub Pages, cross-origin) hide UI sections for disabled modules, the same way /public/branding feeds it instance strings. Module flags are booleans — nothing secret. Long cache: committed config, resolved as a boot-time singleton.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
7253
8406
|
"x-rank": "public",
|
|
7254
|
-
"x-source": "
|
|
8407
|
+
"x-source": "src/bongos/routes/public.js",
|
|
7255
8408
|
"responses": {
|
|
7256
8409
|
"200": {
|
|
7257
8410
|
"description": "Success."
|
|
@@ -7263,56 +8416,42 @@
|
|
|
7263
8416
|
"security": []
|
|
7264
8417
|
}
|
|
7265
8418
|
},
|
|
7266
|
-
"/public/
|
|
8419
|
+
"/public/progress": {
|
|
7267
8420
|
"get": {
|
|
7268
|
-
"operationId": "
|
|
8421
|
+
"operationId": "get_public_progress",
|
|
7269
8422
|
"tags": [
|
|
7270
8423
|
"public"
|
|
7271
8424
|
],
|
|
7272
|
-
"summary": "GET /public/
|
|
7273
|
-
"description": "
|
|
8425
|
+
"summary": "GET /public/progress",
|
|
8426
|
+
"description": "version progress aggregate.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
7274
8427
|
"x-rank": "public",
|
|
7275
8428
|
"x-source": "src/bongos/routes/public.js",
|
|
7276
|
-
"parameters": [
|
|
7277
|
-
{
|
|
7278
|
-
"name": "id",
|
|
7279
|
-
"in": "path",
|
|
7280
|
-
"required": true,
|
|
7281
|
-
"schema": {
|
|
7282
|
-
"type": "string"
|
|
7283
|
-
},
|
|
7284
|
-
"description": "Path parameter `id`."
|
|
7285
|
-
}
|
|
7286
|
-
],
|
|
7287
8429
|
"responses": {
|
|
7288
8430
|
"200": {
|
|
7289
8431
|
"description": "Success.",
|
|
7290
8432
|
"content": {
|
|
7291
8433
|
"application/json": {
|
|
7292
8434
|
"schema": {
|
|
7293
|
-
"$ref": "#/components/schemas/
|
|
8435
|
+
"$ref": "#/components/schemas/GetPublicProgressResponse"
|
|
7294
8436
|
}
|
|
7295
8437
|
}
|
|
7296
8438
|
}
|
|
7297
8439
|
},
|
|
7298
8440
|
"400": {
|
|
7299
8441
|
"$ref": "#/components/responses/BadRequest"
|
|
7300
|
-
},
|
|
7301
|
-
"404": {
|
|
7302
|
-
"$ref": "#/components/responses/NotFound"
|
|
7303
8442
|
}
|
|
7304
8443
|
},
|
|
7305
8444
|
"security": []
|
|
7306
8445
|
}
|
|
7307
8446
|
},
|
|
7308
|
-
"/public/
|
|
8447
|
+
"/public/recent-shipped": {
|
|
7309
8448
|
"get": {
|
|
7310
|
-
"operationId": "
|
|
8449
|
+
"operationId": "get_public_recent_shipped",
|
|
7311
8450
|
"tags": [
|
|
7312
8451
|
"public"
|
|
7313
8452
|
],
|
|
7314
|
-
"summary": "GET /public/
|
|
7315
|
-
"description": "
|
|
8453
|
+
"summary": "GET /public/recent-shipped",
|
|
8454
|
+
"description": "GDS task 191: `?days=7|30|90` restricts to that trailing window; `?days=all` or omitted with no query returns the historical 30-row \"recent\" feed. Any other value falls back to all-time (still capped by the row limit) so a malformed query never produces an empty list. rank: public — recent shipped tasks (windowed).\n\n**Rank:** `public` — No authentication — any caller.",
|
|
7316
8455
|
"x-rank": "public",
|
|
7317
8456
|
"x-source": "src/bongos/routes/public.js",
|
|
7318
8457
|
"responses": {
|
|
@@ -7321,7 +8460,7 @@
|
|
|
7321
8460
|
"content": {
|
|
7322
8461
|
"application/json": {
|
|
7323
8462
|
"schema": {
|
|
7324
|
-
"$ref": "#/components/schemas/
|
|
8463
|
+
"$ref": "#/components/schemas/GetPublicRecentShippedResponse"
|
|
7325
8464
|
}
|
|
7326
8465
|
}
|
|
7327
8466
|
}
|
|
@@ -7333,40 +8472,26 @@
|
|
|
7333
8472
|
"security": []
|
|
7334
8473
|
}
|
|
7335
8474
|
},
|
|
7336
|
-
"/public/
|
|
7337
|
-
"get": {
|
|
7338
|
-
"operationId": "get_public_branding",
|
|
7339
|
-
"tags": [
|
|
7340
|
-
"public"
|
|
7341
|
-
],
|
|
7342
|
-
"summary": "GET /public/branding",
|
|
7343
|
-
"description": "the client-safe branding projection (R56 task 1195, ADR 0062 §3). Lets the hall + the OFF-BOX status page (served from GitHub Pages, so it can only read branding cross-origin — it can't be server-injected) resolve instance strings from config instead of hard-coding them. R56 exposes the configurable currency label; R57 (task 1196) extends clientBranding() with identity + theme + copy. Long cache: the pack is committed config, not live state, and the resolver is a boot-time singleton.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
7344
|
-
"x-rank": "public",
|
|
7345
|
-
"x-source": "src/bongos/routes/public.js",
|
|
7346
|
-
"responses": {
|
|
7347
|
-
"200": {
|
|
7348
|
-
"description": "Success."
|
|
7349
|
-
},
|
|
7350
|
-
"400": {
|
|
7351
|
-
"$ref": "#/components/responses/BadRequest"
|
|
7352
|
-
}
|
|
7353
|
-
},
|
|
7354
|
-
"security": []
|
|
7355
|
-
}
|
|
7356
|
-
},
|
|
7357
|
-
"/public/cost-summary": {
|
|
8475
|
+
"/public/ref-ids": {
|
|
7358
8476
|
"get": {
|
|
7359
|
-
"operationId": "
|
|
8477
|
+
"operationId": "get_public_ref_ids",
|
|
7360
8478
|
"tags": [
|
|
7361
8479
|
"public"
|
|
7362
8480
|
],
|
|
7363
|
-
"summary": "GET /public/
|
|
7364
|
-
"description": "
|
|
8481
|
+
"summary": "GET /public/ref-ids",
|
|
8482
|
+
"description": "The id allow-list the doc-ref linkifier (scripts/gds/linkify-refs.js) and its CI gate consult to decide which bare \"#NNN\" are real references worth rewriting — and to WHICH resolver (task 629: task vs idea vs blocker, since the hall resolves /#/task/N, /#/idea/N, /#/blocker/N). IDs only — no titles or bodies — so it exposes nothing beyond what a number already implies, and it needs no builder token (so CI can call it). Cached longer than the live feeds: the id sets grow slowly and a few minutes of staleness only delays linkifying a brand-new reference. `tasks` stays the first key for back-compat with the pre-task 629 linkifier shape. rank: public — task/idea/blocker id allow-lists for the linkifier + CI gate.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
7365
8483
|
"x-rank": "public",
|
|
7366
8484
|
"x-source": "src/bongos/routes/public.js",
|
|
7367
8485
|
"responses": {
|
|
7368
8486
|
"200": {
|
|
7369
|
-
"description": "Success."
|
|
8487
|
+
"description": "Success.",
|
|
8488
|
+
"content": {
|
|
8489
|
+
"application/json": {
|
|
8490
|
+
"schema": {
|
|
8491
|
+
"$ref": "#/components/schemas/GetPublicRefIdsResponse"
|
|
8492
|
+
}
|
|
8493
|
+
}
|
|
8494
|
+
}
|
|
7370
8495
|
},
|
|
7371
8496
|
"400": {
|
|
7372
8497
|
"$ref": "#/components/responses/BadRequest"
|
|
@@ -7375,19 +8500,26 @@
|
|
|
7375
8500
|
"security": []
|
|
7376
8501
|
}
|
|
7377
8502
|
},
|
|
7378
|
-
"/public/
|
|
8503
|
+
"/public/repo-health": {
|
|
7379
8504
|
"get": {
|
|
7380
|
-
"operationId": "
|
|
8505
|
+
"operationId": "get_public_repo_health",
|
|
7381
8506
|
"tags": [
|
|
7382
8507
|
"public"
|
|
7383
8508
|
],
|
|
7384
|
-
"summary": "GET /public/
|
|
7385
|
-
"description": "
|
|
8509
|
+
"summary": "GET /public/repo-health",
|
|
8510
|
+
"description": "V3.R91 task 352: repo-health substrate. Latest daily snapshot from repo_health_snapshots (written by scripts/gds/repo-metrics.js) + a small trailing trend so the status page can draw LOC / dead-exports / stale- branch lines over time. Same auth-free + cached + JSON-shape contract as the other public surfaces above. `?days=N` (1..90, default 30) sizes the trend window. rank: public — repo-health substrate (LOC, dead exports, stale branches).\n\n**Rank:** `public` — No authentication — any caller.",
|
|
7386
8511
|
"x-rank": "public",
|
|
7387
8512
|
"x-source": "src/bongos/routes/public.js",
|
|
7388
8513
|
"responses": {
|
|
7389
8514
|
"200": {
|
|
7390
|
-
"description": "Success."
|
|
8515
|
+
"description": "Success.",
|
|
8516
|
+
"content": {
|
|
8517
|
+
"application/json": {
|
|
8518
|
+
"schema": {
|
|
8519
|
+
"$ref": "#/components/schemas/GetPublicRepoHealthResponse"
|
|
8520
|
+
}
|
|
8521
|
+
}
|
|
8522
|
+
}
|
|
7391
8523
|
},
|
|
7392
8524
|
"400": {
|
|
7393
8525
|
"$ref": "#/components/responses/BadRequest"
|
|
@@ -7396,14 +8528,14 @@
|
|
|
7396
8528
|
"security": []
|
|
7397
8529
|
}
|
|
7398
8530
|
},
|
|
7399
|
-
"/public/
|
|
8531
|
+
"/public/repo-info": {
|
|
7400
8532
|
"get": {
|
|
7401
|
-
"operationId": "
|
|
8533
|
+
"operationId": "get_public_repo_info",
|
|
7402
8534
|
"tags": [
|
|
7403
8535
|
"public"
|
|
7404
8536
|
],
|
|
7405
|
-
"summary": "GET /public/
|
|
7406
|
-
"description": "
|
|
8537
|
+
"summary": "GET /public/repo-info",
|
|
8538
|
+
"description": "GitHub URL bases for the deployed checkout (V3.R13-followup-2 task 411). Derived from `git remote get-url origin` at server boot, cached. Used by /builders/primer to rewrite repo-relative markdown links to GitHub blob/tree URLs without hardcoding the repo identity in implementation code (V3.R12 task 236 rule). When ownership transfers, the deploy's git remote changes and the served links follow with no code edits.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
7407
8539
|
"x-rank": "public",
|
|
7408
8540
|
"x-source": "src/bongos/routes/public.js",
|
|
7409
8541
|
"responses": {
|
|
@@ -7412,7 +8544,7 @@
|
|
|
7412
8544
|
"content": {
|
|
7413
8545
|
"application/json": {
|
|
7414
8546
|
"schema": {
|
|
7415
|
-
"$ref": "#/components/schemas/
|
|
8547
|
+
"$ref": "#/components/schemas/GetPublicRepoInfoResponse"
|
|
7416
8548
|
}
|
|
7417
8549
|
}
|
|
7418
8550
|
}
|
|
@@ -7424,14 +8556,14 @@
|
|
|
7424
8556
|
"security": []
|
|
7425
8557
|
}
|
|
7426
8558
|
},
|
|
7427
|
-
"/public/
|
|
8559
|
+
"/public/tasks/{id}": {
|
|
7428
8560
|
"get": {
|
|
7429
|
-
"operationId": "
|
|
8561
|
+
"operationId": "get_public_tasks_id",
|
|
7430
8562
|
"tags": [
|
|
7431
8563
|
"public"
|
|
7432
8564
|
],
|
|
7433
|
-
"summary": "GET /public/
|
|
7434
|
-
"description": "
|
|
8565
|
+
"summary": "GET /public/tasks/:id",
|
|
8566
|
+
"description": "Single-task resolver for \"#NNN\" deep links. Our docs reference GDS task IDs as bare \"#NNN\"; read on github.com those collide with GitHub's own PR/issue autolinker (a separate number space) and mis-link, so they are rewritten to status-dashboard permalinks (status.amazonprimea.com/#/task/N) that resolve here. Privacy gate: a full title/summary is exposed ONLY for already-public work (status shipped|confirmed — same surface as /public/recent-shipped). In-flight tasks return status + version with the title WITHHELD, so unshipped or security-sensitive task names never leak to the open web. `kind`/`priority` are non-sensitive and always returned. rank: public — single-task resolver for doc deep links (title gated to shipped/confirmed).\n\n**Rank:** `public` — No authentication — any caller.",
|
|
7435
8567
|
"x-rank": "public",
|
|
7436
8568
|
"x-source": "src/bongos/routes/public.js",
|
|
7437
8569
|
"parameters": [
|
|
@@ -7451,7 +8583,7 @@
|
|
|
7451
8583
|
"content": {
|
|
7452
8584
|
"application/json": {
|
|
7453
8585
|
"schema": {
|
|
7454
|
-
"$ref": "#/components/schemas/
|
|
8586
|
+
"$ref": "#/components/schemas/GetPublicTasksIdResponse"
|
|
7455
8587
|
}
|
|
7456
8588
|
}
|
|
7457
8589
|
}
|
|
@@ -7466,14 +8598,14 @@
|
|
|
7466
8598
|
"security": []
|
|
7467
8599
|
}
|
|
7468
8600
|
},
|
|
7469
|
-
"/public/
|
|
8601
|
+
"/public/uptime": {
|
|
7470
8602
|
"get": {
|
|
7471
|
-
"operationId": "
|
|
8603
|
+
"operationId": "get_public_uptime",
|
|
7472
8604
|
"tags": [
|
|
7473
8605
|
"public"
|
|
7474
8606
|
],
|
|
7475
|
-
"summary": "GET /public/
|
|
7476
|
-
"description": "
|
|
8607
|
+
"summary": "GET /public/uptime",
|
|
8608
|
+
"description": "Uptime: current status + 90-day history bucketed by hour. Returns per-service: current_status, uptime_pct_90d, history (array of { hour: ISO string, up: n, total: n } for the last 90*24 hours). rank: public — uptime feed (90-day hourly history).\n\n**Rank:** `public` — No authentication — any caller.",
|
|
7477
8609
|
"x-rank": "public",
|
|
7478
8610
|
"x-source": "src/bongos/routes/public.js",
|
|
7479
8611
|
"responses": {
|
|
@@ -7482,7 +8614,7 @@
|
|
|
7482
8614
|
"content": {
|
|
7483
8615
|
"application/json": {
|
|
7484
8616
|
"schema": {
|
|
7485
|
-
"$ref": "#/components/schemas/
|
|
8617
|
+
"$ref": "#/components/schemas/GetPublicUptimeResponse"
|
|
7486
8618
|
}
|
|
7487
8619
|
}
|
|
7488
8620
|
}
|
|
@@ -7494,19 +8626,26 @@
|
|
|
7494
8626
|
"security": []
|
|
7495
8627
|
}
|
|
7496
8628
|
},
|
|
7497
|
-
"/public/
|
|
8629
|
+
"/public/versions": {
|
|
7498
8630
|
"get": {
|
|
7499
|
-
"operationId": "
|
|
8631
|
+
"operationId": "get_public_versions",
|
|
7500
8632
|
"tags": [
|
|
7501
8633
|
"public"
|
|
7502
8634
|
],
|
|
7503
|
-
"summary": "GET /public/
|
|
7504
|
-
"description": "
|
|
8635
|
+
"summary": "GET /public/versions",
|
|
8636
|
+
"description": "read-only surface for status.amazonprimea.com.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
7505
8637
|
"x-rank": "public",
|
|
7506
8638
|
"x-source": "src/bongos/routes/public.js",
|
|
7507
8639
|
"responses": {
|
|
7508
8640
|
"200": {
|
|
7509
|
-
"description": "Success."
|
|
8641
|
+
"description": "Success.",
|
|
8642
|
+
"content": {
|
|
8643
|
+
"application/json": {
|
|
8644
|
+
"schema": {
|
|
8645
|
+
"$ref": "#/components/schemas/GetPublicVersionsResponse"
|
|
8646
|
+
}
|
|
8647
|
+
}
|
|
8648
|
+
}
|
|
7510
8649
|
},
|
|
7511
8650
|
"400": {
|
|
7512
8651
|
"$ref": "#/components/responses/BadRequest"
|
|
@@ -7515,165 +8654,270 @@
|
|
|
7515
8654
|
"security": []
|
|
7516
8655
|
}
|
|
7517
8656
|
},
|
|
7518
|
-
"/
|
|
8657
|
+
"/scouting": {
|
|
7519
8658
|
"get": {
|
|
7520
|
-
"operationId": "
|
|
8659
|
+
"operationId": "get_scouting",
|
|
7521
8660
|
"tags": [
|
|
7522
|
-
"
|
|
8661
|
+
"scouting"
|
|
7523
8662
|
],
|
|
7524
|
-
"summary": "GET /
|
|
7525
|
-
"description": "
|
|
7526
|
-
"x-rank": "
|
|
7527
|
-
"x-source": "
|
|
8663
|
+
"summary": "GET /scouting",
|
|
8664
|
+
"description": "the internal talent directory across every project. The Archon gate here is the load-bearing protection (\"NOT shown to builders\"): a non-Archon is 403'd before any cross-builder data is read.\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
8665
|
+
"x-rank": "archon",
|
|
8666
|
+
"x-source": "modules/platform-identity/routes/scouting.js",
|
|
7528
8667
|
"responses": {
|
|
7529
8668
|
"200": {
|
|
7530
8669
|
"description": "Success.",
|
|
7531
8670
|
"content": {
|
|
7532
8671
|
"application/json": {
|
|
7533
8672
|
"schema": {
|
|
7534
|
-
"$ref": "#/components/schemas/
|
|
8673
|
+
"$ref": "#/components/schemas/GetScoutingResponse"
|
|
7535
8674
|
}
|
|
7536
8675
|
}
|
|
7537
8676
|
}
|
|
7538
8677
|
},
|
|
7539
8678
|
"400": {
|
|
7540
8679
|
"$ref": "#/components/responses/BadRequest"
|
|
8680
|
+
},
|
|
8681
|
+
"401": {
|
|
8682
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8683
|
+
},
|
|
8684
|
+
"403": {
|
|
8685
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7541
8686
|
}
|
|
7542
8687
|
},
|
|
7543
|
-
"security": [
|
|
8688
|
+
"security": [
|
|
8689
|
+
{
|
|
8690
|
+
"builderSession": []
|
|
8691
|
+
}
|
|
8692
|
+
]
|
|
7544
8693
|
}
|
|
7545
8694
|
},
|
|
7546
|
-
"/
|
|
7547
|
-
"
|
|
7548
|
-
"operationId": "
|
|
8695
|
+
"/search": {
|
|
8696
|
+
"post": {
|
|
8697
|
+
"operationId": "post_search",
|
|
7549
8698
|
"tags": [
|
|
7550
|
-
"
|
|
8699
|
+
"search"
|
|
7551
8700
|
],
|
|
7552
|
-
"summary": "
|
|
7553
|
-
"description": "
|
|
7554
|
-
"x-rank": "
|
|
7555
|
-
"x-source": "
|
|
8701
|
+
"summary": "POST /search",
|
|
8702
|
+
"description": "POST /search — two modes (ADR 0095 C1 / task 1658, progressive disclosure): 1. SUMMARY (default): body { q: string, limit?: 1..50, source_kind? }. Returns the ranked compact layer — each hit carries a snippet plus `snippet_tokens` (what you already see) and `full_tokens` (what a full expansion would COST), so the caller sees the price before paying it. 2. EXPAND: body { expand: <chunkId> } (with q optional). Returns that one chunk's FULL body + `body_tokens`, scoped exactly like search (rank + owner from the session), so expand can't widen visibility. Both shapes stay backward-compatible: the old { q } request still returns { query, count, results } — the new per-hit fields are additive. Single-line opener so the deterministic route-rank auditor classifies the chain (requireBuilder → 'any-builder') — ADR 0016 / route-rank-check.js.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
8703
|
+
"x-rank": "any-builder",
|
|
8704
|
+
"x-source": "modules/memory/routes/search.js",
|
|
8705
|
+
"requestBody": {
|
|
8706
|
+
"required": false,
|
|
8707
|
+
"content": {
|
|
8708
|
+
"application/json": {
|
|
8709
|
+
"schema": {
|
|
8710
|
+
"$ref": "#/components/schemas/PostSearchRequest"
|
|
8711
|
+
}
|
|
8712
|
+
}
|
|
8713
|
+
},
|
|
8714
|
+
"x-validated": true
|
|
8715
|
+
},
|
|
7556
8716
|
"responses": {
|
|
7557
8717
|
"200": {
|
|
7558
8718
|
"description": "Success.",
|
|
7559
8719
|
"content": {
|
|
7560
8720
|
"application/json": {
|
|
7561
8721
|
"schema": {
|
|
7562
|
-
"$ref": "#/components/schemas/
|
|
8722
|
+
"$ref": "#/components/schemas/PostSearchResponse"
|
|
7563
8723
|
}
|
|
7564
8724
|
}
|
|
7565
8725
|
}
|
|
7566
8726
|
},
|
|
7567
8727
|
"400": {
|
|
7568
|
-
"$ref": "#/components/responses/
|
|
8728
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
8729
|
+
},
|
|
8730
|
+
"401": {
|
|
8731
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8732
|
+
},
|
|
8733
|
+
"403": {
|
|
8734
|
+
"$ref": "#/components/responses/Forbidden"
|
|
8735
|
+
}
|
|
8736
|
+
},
|
|
8737
|
+
"security": [
|
|
8738
|
+
{
|
|
8739
|
+
"builderSession": []
|
|
8740
|
+
}
|
|
8741
|
+
]
|
|
8742
|
+
}
|
|
8743
|
+
},
|
|
8744
|
+
"/search/mark": {
|
|
8745
|
+
"post": {
|
|
8746
|
+
"operationId": "post_search_mark",
|
|
8747
|
+
"tags": [
|
|
8748
|
+
"search"
|
|
8749
|
+
],
|
|
8750
|
+
"summary": "POST /search/mark",
|
|
8751
|
+
"description": "POST /search/mark — the write half of the memory-usefulness feedback loop (ADR 0095 C3, task 1660). Body { chunk_id: int, useful?: bool }. Records that a recalled chunk did (useful=true, the default) or did NOT (useful=false) help, so the ranker lifts the useful and fades the dead-end. SCOPING (ADR 0016): the caller's id + rank come ONLY from the session, never the body — searchChunks-equivalent scope is re-applied in the UPDATE WHERE, so a chunk the caller couldn't have seen can't be voted on (→ updated:false). Single-line opener so the route-rank auditor classifies the chain.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
8752
|
+
"x-rank": "any-builder",
|
|
8753
|
+
"x-source": "modules/memory/routes/search.js",
|
|
8754
|
+
"requestBody": {
|
|
8755
|
+
"required": false,
|
|
8756
|
+
"content": {
|
|
8757
|
+
"application/json": {
|
|
8758
|
+
"schema": {
|
|
8759
|
+
"$ref": "#/components/schemas/PostSearchMarkRequest"
|
|
8760
|
+
}
|
|
8761
|
+
}
|
|
8762
|
+
},
|
|
8763
|
+
"x-validated": true
|
|
8764
|
+
},
|
|
8765
|
+
"responses": {
|
|
8766
|
+
"200": {
|
|
8767
|
+
"description": "Success."
|
|
8768
|
+
},
|
|
8769
|
+
"400": {
|
|
8770
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
8771
|
+
},
|
|
8772
|
+
"401": {
|
|
8773
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8774
|
+
},
|
|
8775
|
+
"403": {
|
|
8776
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7569
8777
|
}
|
|
7570
8778
|
},
|
|
7571
|
-
"security": [
|
|
8779
|
+
"security": [
|
|
8780
|
+
{
|
|
8781
|
+
"builderSession": []
|
|
8782
|
+
}
|
|
8783
|
+
]
|
|
7572
8784
|
}
|
|
7573
8785
|
},
|
|
7574
|
-
"/
|
|
8786
|
+
"/security/adr": {
|
|
7575
8787
|
"get": {
|
|
7576
|
-
"operationId": "
|
|
8788
|
+
"operationId": "get_security_adr",
|
|
7577
8789
|
"tags": [
|
|
7578
|
-
"
|
|
8790
|
+
"security"
|
|
7579
8791
|
],
|
|
7580
|
-
"summary": "GET /
|
|
7581
|
-
"description": "
|
|
7582
|
-
"x-rank": "
|
|
7583
|
-
"x-source": "src/bongos/routes/
|
|
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",
|
|
7584
8796
|
"responses": {
|
|
7585
8797
|
"200": {
|
|
7586
|
-
"description": "Success."
|
|
7587
|
-
"content": {
|
|
7588
|
-
"application/json": {
|
|
7589
|
-
"schema": {
|
|
7590
|
-
"$ref": "#/components/schemas/GetPublicRefIdsResponse"
|
|
7591
|
-
}
|
|
7592
|
-
}
|
|
7593
|
-
}
|
|
8798
|
+
"description": "Success."
|
|
7594
8799
|
},
|
|
7595
8800
|
"400": {
|
|
7596
8801
|
"$ref": "#/components/responses/BadRequest"
|
|
8802
|
+
},
|
|
8803
|
+
"401": {
|
|
8804
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8805
|
+
},
|
|
8806
|
+
"403": {
|
|
8807
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7597
8808
|
}
|
|
7598
8809
|
},
|
|
7599
|
-
"security": [
|
|
8810
|
+
"security": [
|
|
8811
|
+
{
|
|
8812
|
+
"builderSession": []
|
|
8813
|
+
}
|
|
8814
|
+
]
|
|
7600
8815
|
}
|
|
7601
8816
|
},
|
|
7602
|
-
"/
|
|
8817
|
+
"/security/docs": {
|
|
7603
8818
|
"get": {
|
|
7604
|
-
"operationId": "
|
|
8819
|
+
"operationId": "get_security_docs",
|
|
7605
8820
|
"tags": [
|
|
7606
|
-
"
|
|
8821
|
+
"security"
|
|
7607
8822
|
],
|
|
7608
|
-
"summary": "GET /
|
|
7609
|
-
"description": "
|
|
7610
|
-
"x-rank": "
|
|
7611
|
-
"x-source": "src/bongos/routes/
|
|
8823
|
+
"summary": "GET /security/docs",
|
|
8824
|
+
"description": "GET /api/gds/security/docs — list doc METADATA (no content). rank: archon — index of exploit-detail engagement reports.\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
8825
|
+
"x-rank": "archon",
|
|
8826
|
+
"x-source": "src/bongos/routes/security.js",
|
|
7612
8827
|
"responses": {
|
|
7613
8828
|
"200": {
|
|
7614
8829
|
"description": "Success.",
|
|
7615
8830
|
"content": {
|
|
7616
8831
|
"application/json": {
|
|
7617
8832
|
"schema": {
|
|
7618
|
-
"$ref": "#/components/schemas/
|
|
8833
|
+
"$ref": "#/components/schemas/GetSecurityDocsResponse"
|
|
7619
8834
|
}
|
|
7620
8835
|
}
|
|
7621
8836
|
}
|
|
7622
8837
|
},
|
|
7623
8838
|
"400": {
|
|
7624
8839
|
"$ref": "#/components/responses/BadRequest"
|
|
8840
|
+
},
|
|
8841
|
+
"401": {
|
|
8842
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8843
|
+
},
|
|
8844
|
+
"403": {
|
|
8845
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7625
8846
|
}
|
|
7626
8847
|
},
|
|
7627
|
-
"security": [
|
|
7628
|
-
|
|
7629
|
-
|
|
7630
|
-
|
|
7631
|
-
|
|
7632
|
-
|
|
8848
|
+
"security": [
|
|
8849
|
+
{
|
|
8850
|
+
"builderSession": []
|
|
8851
|
+
}
|
|
8852
|
+
]
|
|
8853
|
+
},
|
|
8854
|
+
"post": {
|
|
8855
|
+
"operationId": "post_security_docs",
|
|
7633
8856
|
"tags": [
|
|
7634
|
-
"
|
|
8857
|
+
"security"
|
|
7635
8858
|
],
|
|
7636
|
-
"summary": "
|
|
7637
|
-
"description": "
|
|
7638
|
-
"x-rank": "
|
|
7639
|
-
"x-source": "src/bongos/routes/
|
|
8859
|
+
"summary": "POST /security/docs",
|
|
8860
|
+
"description": "POST /api/gds/security/docs — upsert a doc by slug. The director uploads each dated engagement report here after deploy. Body: { slug, title, content_md }. content_md uses a large explicit cap (full reports), NOT the small LIMITS.DESCRIPTION. Returns 201 + the row. rank: archon — writes exploit-detail report bodies.\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
8861
|
+
"x-rank": "archon",
|
|
8862
|
+
"x-source": "src/bongos/routes/security.js",
|
|
8863
|
+
"requestBody": {
|
|
8864
|
+
"required": true,
|
|
8865
|
+
"content": {
|
|
8866
|
+
"application/json": {
|
|
8867
|
+
"schema": {
|
|
8868
|
+
"$ref": "#/components/schemas/PostSecurityDocsRequest"
|
|
8869
|
+
}
|
|
8870
|
+
}
|
|
8871
|
+
},
|
|
8872
|
+
"x-validated": true
|
|
8873
|
+
},
|
|
7640
8874
|
"responses": {
|
|
7641
8875
|
"200": {
|
|
7642
8876
|
"description": "Success.",
|
|
7643
8877
|
"content": {
|
|
7644
8878
|
"application/json": {
|
|
7645
8879
|
"schema": {
|
|
7646
|
-
"$ref": "#/components/schemas/
|
|
8880
|
+
"$ref": "#/components/schemas/PostSecurityDocsResponse"
|
|
7647
8881
|
}
|
|
7648
8882
|
}
|
|
7649
8883
|
}
|
|
7650
8884
|
},
|
|
7651
8885
|
"400": {
|
|
7652
|
-
"$ref": "#/components/responses/
|
|
8886
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
8887
|
+
},
|
|
8888
|
+
"401": {
|
|
8889
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8890
|
+
},
|
|
8891
|
+
"403": {
|
|
8892
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7653
8893
|
}
|
|
7654
8894
|
},
|
|
7655
|
-
"security": [
|
|
8895
|
+
"security": [
|
|
8896
|
+
{
|
|
8897
|
+
"builderSession": []
|
|
8898
|
+
}
|
|
8899
|
+
]
|
|
7656
8900
|
}
|
|
7657
8901
|
},
|
|
7658
|
-
"/
|
|
8902
|
+
"/security/docs/{slug}": {
|
|
7659
8903
|
"get": {
|
|
7660
|
-
"operationId": "
|
|
8904
|
+
"operationId": "get_security_docs_slug",
|
|
7661
8905
|
"tags": [
|
|
7662
|
-
"
|
|
8906
|
+
"security"
|
|
7663
8907
|
],
|
|
7664
|
-
"summary": "GET /
|
|
7665
|
-
"description": "
|
|
7666
|
-
"x-rank": "
|
|
7667
|
-
"x-source": "src/bongos/routes/
|
|
8908
|
+
"summary": "GET /security/docs/:slug",
|
|
8909
|
+
"description": "GET /api/gds/security/docs/:slug — one doc WITH content, or 404. rank: archon — reads the full exploit-detail report body.\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
8910
|
+
"x-rank": "archon",
|
|
8911
|
+
"x-source": "src/bongos/routes/security.js",
|
|
7668
8912
|
"parameters": [
|
|
7669
8913
|
{
|
|
7670
|
-
"name": "
|
|
8914
|
+
"name": "slug",
|
|
7671
8915
|
"in": "path",
|
|
7672
8916
|
"required": true,
|
|
7673
8917
|
"schema": {
|
|
7674
8918
|
"type": "string"
|
|
7675
8919
|
},
|
|
7676
|
-
"description": "Path parameter `
|
|
8920
|
+
"description": "Path parameter `slug`."
|
|
7677
8921
|
}
|
|
7678
8922
|
],
|
|
7679
8923
|
"responses": {
|
|
@@ -7682,7 +8926,7 @@
|
|
|
7682
8926
|
"content": {
|
|
7683
8927
|
"application/json": {
|
|
7684
8928
|
"schema": {
|
|
7685
|
-
"$ref": "#/components/schemas/
|
|
8929
|
+
"$ref": "#/components/schemas/GetSecurityDocsSlugResponse"
|
|
7686
8930
|
}
|
|
7687
8931
|
}
|
|
7688
8932
|
}
|
|
@@ -7690,85 +8934,75 @@
|
|
|
7690
8934
|
"400": {
|
|
7691
8935
|
"$ref": "#/components/responses/BadRequest"
|
|
7692
8936
|
},
|
|
8937
|
+
"401": {
|
|
8938
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8939
|
+
},
|
|
8940
|
+
"403": {
|
|
8941
|
+
"$ref": "#/components/responses/Forbidden"
|
|
8942
|
+
},
|
|
7693
8943
|
"404": {
|
|
7694
8944
|
"$ref": "#/components/responses/NotFound"
|
|
7695
8945
|
}
|
|
7696
8946
|
},
|
|
7697
|
-
"security": [
|
|
7698
|
-
|
|
7699
|
-
|
|
7700
|
-
"/public/uptime": {
|
|
7701
|
-
"get": {
|
|
7702
|
-
"operationId": "get_public_uptime",
|
|
7703
|
-
"tags": [
|
|
7704
|
-
"public"
|
|
7705
|
-
],
|
|
7706
|
-
"summary": "GET /public/uptime",
|
|
7707
|
-
"description": "Uptime: current status + 90-day history bucketed by hour. Returns per-service: current_status, uptime_pct_90d, history (array of { hour: ISO string, up: n, total: n } for the last 90*24 hours). rank: public — uptime feed (90-day hourly history).\n\n**Rank:** `public` — No authentication — any caller.",
|
|
7708
|
-
"x-rank": "public",
|
|
7709
|
-
"x-source": "src/bongos/routes/public.js",
|
|
7710
|
-
"responses": {
|
|
7711
|
-
"200": {
|
|
7712
|
-
"description": "Success.",
|
|
7713
|
-
"content": {
|
|
7714
|
-
"application/json": {
|
|
7715
|
-
"schema": {
|
|
7716
|
-
"$ref": "#/components/schemas/GetPublicUptimeResponse"
|
|
7717
|
-
}
|
|
7718
|
-
}
|
|
7719
|
-
}
|
|
7720
|
-
},
|
|
7721
|
-
"400": {
|
|
7722
|
-
"$ref": "#/components/responses/BadRequest"
|
|
8947
|
+
"security": [
|
|
8948
|
+
{
|
|
8949
|
+
"builderSession": []
|
|
7723
8950
|
}
|
|
7724
|
-
|
|
7725
|
-
"security": []
|
|
8951
|
+
]
|
|
7726
8952
|
}
|
|
7727
8953
|
},
|
|
7728
|
-
"/
|
|
8954
|
+
"/security/reports": {
|
|
7729
8955
|
"get": {
|
|
7730
|
-
"operationId": "
|
|
8956
|
+
"operationId": "get_security_reports",
|
|
7731
8957
|
"tags": [
|
|
7732
|
-
"
|
|
8958
|
+
"security"
|
|
7733
8959
|
],
|
|
7734
|
-
"summary": "GET /
|
|
7735
|
-
"description": "
|
|
7736
|
-
"x-rank": "
|
|
7737
|
-
"x-source": "
|
|
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",
|
|
7738
8964
|
"responses": {
|
|
7739
8965
|
"200": {
|
|
7740
8966
|
"description": "Success.",
|
|
7741
8967
|
"content": {
|
|
7742
8968
|
"application/json": {
|
|
7743
8969
|
"schema": {
|
|
7744
|
-
"$ref": "#/components/schemas/
|
|
8970
|
+
"$ref": "#/components/schemas/GetSecurityReportsResponse"
|
|
7745
8971
|
}
|
|
7746
8972
|
}
|
|
7747
8973
|
}
|
|
7748
8974
|
},
|
|
7749
8975
|
"400": {
|
|
7750
8976
|
"$ref": "#/components/responses/BadRequest"
|
|
8977
|
+
},
|
|
8978
|
+
"401": {
|
|
8979
|
+
"$ref": "#/components/responses/Unauthorized"
|
|
8980
|
+
},
|
|
8981
|
+
"403": {
|
|
8982
|
+
"$ref": "#/components/responses/Forbidden"
|
|
7751
8983
|
}
|
|
7752
8984
|
},
|
|
7753
|
-
"security": [
|
|
7754
|
-
|
|
7755
|
-
|
|
7756
|
-
|
|
8985
|
+
"security": [
|
|
8986
|
+
{
|
|
8987
|
+
"builderSession": []
|
|
8988
|
+
}
|
|
8989
|
+
]
|
|
8990
|
+
},
|
|
7757
8991
|
"post": {
|
|
7758
|
-
"operationId": "
|
|
8992
|
+
"operationId": "post_security_reports",
|
|
7759
8993
|
"tags": [
|
|
7760
|
-
"
|
|
8994
|
+
"security"
|
|
7761
8995
|
],
|
|
7762
|
-
"summary": "POST /
|
|
7763
|
-
"description": "POST /
|
|
7764
|
-
"x-rank": "
|
|
7765
|
-
"x-source": "modules/
|
|
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",
|
|
7766
9000
|
"requestBody": {
|
|
7767
|
-
"required":
|
|
9001
|
+
"required": true,
|
|
7768
9002
|
"content": {
|
|
7769
9003
|
"application/json": {
|
|
7770
9004
|
"schema": {
|
|
7771
|
-
"$ref": "#/components/schemas/
|
|
9005
|
+
"$ref": "#/components/schemas/PostSecurityReportsRequest"
|
|
7772
9006
|
}
|
|
7773
9007
|
}
|
|
7774
9008
|
},
|
|
@@ -7780,7 +9014,7 @@
|
|
|
7780
9014
|
"content": {
|
|
7781
9015
|
"application/json": {
|
|
7782
9016
|
"schema": {
|
|
7783
|
-
"$ref": "#/components/schemas/
|
|
9017
|
+
"$ref": "#/components/schemas/PostSecurityReportsResponse"
|
|
7784
9018
|
}
|
|
7785
9019
|
}
|
|
7786
9020
|
}
|
|
@@ -7802,22 +9036,33 @@
|
|
|
7802
9036
|
]
|
|
7803
9037
|
}
|
|
7804
9038
|
},
|
|
7805
|
-
"/
|
|
9039
|
+
"/security/reports/{id}/confirm": {
|
|
7806
9040
|
"post": {
|
|
7807
|
-
"operationId": "
|
|
9041
|
+
"operationId": "post_security_reports_id_confirm",
|
|
7808
9042
|
"tags": [
|
|
7809
|
-
"
|
|
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
|
+
}
|
|
7810
9059
|
],
|
|
7811
|
-
"summary": "POST /search/mark",
|
|
7812
|
-
"description": "POST /search/mark — the write half of the memory-usefulness feedback loop (ADR 0095 C3, task 1660). Body { chunk_id: int, useful?: bool }. Records that a recalled chunk did (useful=true, the default) or did NOT (useful=false) help, so the ranker lifts the useful and fades the dead-end. SCOPING (ADR 0016): the caller's id + rank come ONLY from the session, never the body — searchChunks-equivalent scope is re-applied in the UPDATE WHERE, so a chunk the caller couldn't have seen can't be voted on (→ updated:false). Single-line opener so the route-rank auditor classifies the chain.\n\n**Rank:** `any-builder` — Any authenticated builder (row-level ownership enforced in-handler).",
|
|
7813
|
-
"x-rank": "any-builder",
|
|
7814
|
-
"x-source": "modules/memory/routes/search.js",
|
|
7815
9060
|
"requestBody": {
|
|
7816
9061
|
"required": false,
|
|
7817
9062
|
"content": {
|
|
7818
9063
|
"application/json": {
|
|
7819
9064
|
"schema": {
|
|
7820
|
-
"$ref": "#/components/schemas/
|
|
9065
|
+
"$ref": "#/components/schemas/PostSecurityReportsIdConfirmRequest"
|
|
7821
9066
|
}
|
|
7822
9067
|
}
|
|
7823
9068
|
},
|
|
@@ -7825,7 +9070,14 @@
|
|
|
7825
9070
|
},
|
|
7826
9071
|
"responses": {
|
|
7827
9072
|
"200": {
|
|
7828
|
-
"description": "Success."
|
|
9073
|
+
"description": "Success.",
|
|
9074
|
+
"content": {
|
|
9075
|
+
"application/json": {
|
|
9076
|
+
"schema": {
|
|
9077
|
+
"$ref": "#/components/schemas/PostSecurityReportsIdConfirmResponse"
|
|
9078
|
+
}
|
|
9079
|
+
}
|
|
9080
|
+
}
|
|
7829
9081
|
},
|
|
7830
9082
|
"400": {
|
|
7831
9083
|
"$ref": "#/components/responses/ValidationFailed"
|
|
@@ -7835,32 +9087,46 @@
|
|
|
7835
9087
|
},
|
|
7836
9088
|
"403": {
|
|
7837
9089
|
"$ref": "#/components/responses/Forbidden"
|
|
9090
|
+
},
|
|
9091
|
+
"404": {
|
|
9092
|
+
"$ref": "#/components/responses/NotFound"
|
|
7838
9093
|
}
|
|
7839
9094
|
},
|
|
7840
9095
|
"security": [
|
|
7841
9096
|
{
|
|
7842
9097
|
"builderSession": []
|
|
7843
9098
|
}
|
|
7844
|
-
]
|
|
7845
|
-
}
|
|
7846
|
-
},
|
|
7847
|
-
"/security/
|
|
7848
|
-
"
|
|
7849
|
-
"operationId": "
|
|
7850
|
-
"tags": [
|
|
7851
|
-
"security"
|
|
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
|
+
}
|
|
7852
9122
|
],
|
|
7853
|
-
"summary": "GET /security/docs",
|
|
7854
|
-
"description": "GET /api/gds/security/docs — list doc METADATA (no content). rank: archon — index of exploit-detail engagement reports.\n\n**Rank:** `archon` — Archon only (the single owner — ratification, infra, rank changes).",
|
|
7855
|
-
"x-rank": "archon",
|
|
7856
|
-
"x-source": "src/bongos/routes/security.js",
|
|
7857
9123
|
"responses": {
|
|
7858
9124
|
"200": {
|
|
7859
9125
|
"description": "Success.",
|
|
7860
9126
|
"content": {
|
|
7861
9127
|
"application/json": {
|
|
7862
9128
|
"schema": {
|
|
7863
|
-
"$ref": "#/components/schemas/
|
|
9129
|
+
"$ref": "#/components/schemas/PostSecurityReportsIdDisputeResponse"
|
|
7864
9130
|
}
|
|
7865
9131
|
}
|
|
7866
9132
|
}
|
|
@@ -7873,6 +9139,9 @@
|
|
|
7873
9139
|
},
|
|
7874
9140
|
"403": {
|
|
7875
9141
|
"$ref": "#/components/responses/Forbidden"
|
|
9142
|
+
},
|
|
9143
|
+
"404": {
|
|
9144
|
+
"$ref": "#/components/responses/NotFound"
|
|
7876
9145
|
}
|
|
7877
9146
|
},
|
|
7878
9147
|
"security": [
|
|
@@ -7880,46 +9149,51 @@
|
|
|
7880
9149
|
"builderSession": []
|
|
7881
9150
|
}
|
|
7882
9151
|
]
|
|
7883
|
-
}
|
|
9152
|
+
}
|
|
9153
|
+
},
|
|
9154
|
+
"/security/reports/{id}/fix": {
|
|
7884
9155
|
"post": {
|
|
7885
|
-
"operationId": "
|
|
9156
|
+
"operationId": "post_security_reports_id_fix",
|
|
7886
9157
|
"tags": [
|
|
7887
9158
|
"security"
|
|
7888
9159
|
],
|
|
7889
|
-
"summary": "POST /security/
|
|
7890
|
-
"description": "POST /api/
|
|
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).",
|
|
7891
9162
|
"x-rank": "archon",
|
|
7892
|
-
"x-source": "
|
|
7893
|
-
"
|
|
7894
|
-
|
|
7895
|
-
|
|
7896
|
-
"
|
|
7897
|
-
|
|
7898
|
-
|
|
7899
|
-
|
|
7900
|
-
}
|
|
7901
|
-
|
|
7902
|
-
|
|
7903
|
-
|
|
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
|
+
],
|
|
7904
9175
|
"responses": {
|
|
7905
9176
|
"200": {
|
|
7906
9177
|
"description": "Success.",
|
|
7907
9178
|
"content": {
|
|
7908
9179
|
"application/json": {
|
|
7909
9180
|
"schema": {
|
|
7910
|
-
"$ref": "#/components/schemas/
|
|
9181
|
+
"$ref": "#/components/schemas/PostSecurityReportsIdFixResponse"
|
|
7911
9182
|
}
|
|
7912
9183
|
}
|
|
7913
9184
|
}
|
|
7914
9185
|
},
|
|
7915
9186
|
"400": {
|
|
7916
|
-
"$ref": "#/components/responses/
|
|
9187
|
+
"$ref": "#/components/responses/BadRequest"
|
|
7917
9188
|
},
|
|
7918
9189
|
"401": {
|
|
7919
9190
|
"$ref": "#/components/responses/Unauthorized"
|
|
7920
9191
|
},
|
|
7921
9192
|
"403": {
|
|
7922
9193
|
"$ref": "#/components/responses/Forbidden"
|
|
9194
|
+
},
|
|
9195
|
+
"404": {
|
|
9196
|
+
"$ref": "#/components/responses/NotFound"
|
|
7923
9197
|
}
|
|
7924
9198
|
},
|
|
7925
9199
|
"security": [
|
|
@@ -7929,40 +9203,51 @@
|
|
|
7929
9203
|
]
|
|
7930
9204
|
}
|
|
7931
9205
|
},
|
|
7932
|
-
"/security/
|
|
7933
|
-
"
|
|
7934
|
-
"operationId": "
|
|
9206
|
+
"/security/reports/{id}/link-fix": {
|
|
9207
|
+
"post": {
|
|
9208
|
+
"operationId": "post_security_reports_id_link_fix",
|
|
7935
9209
|
"tags": [
|
|
7936
9210
|
"security"
|
|
7937
9211
|
],
|
|
7938
|
-
"summary": "
|
|
7939
|
-
"description": "
|
|
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).",
|
|
7940
9214
|
"x-rank": "archon",
|
|
7941
|
-
"x-source": "
|
|
9215
|
+
"x-source": "modules/security/routes/reports.js",
|
|
7942
9216
|
"parameters": [
|
|
7943
9217
|
{
|
|
7944
|
-
"name": "
|
|
9218
|
+
"name": "id",
|
|
7945
9219
|
"in": "path",
|
|
7946
9220
|
"required": true,
|
|
7947
9221
|
"schema": {
|
|
7948
9222
|
"type": "string"
|
|
7949
9223
|
},
|
|
7950
|
-
"description": "Path parameter `
|
|
9224
|
+
"description": "Path parameter `id`."
|
|
7951
9225
|
}
|
|
7952
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
|
+
},
|
|
7953
9238
|
"responses": {
|
|
7954
9239
|
"200": {
|
|
7955
9240
|
"description": "Success.",
|
|
7956
9241
|
"content": {
|
|
7957
9242
|
"application/json": {
|
|
7958
9243
|
"schema": {
|
|
7959
|
-
"$ref": "#/components/schemas/
|
|
9244
|
+
"$ref": "#/components/schemas/PostSecurityReportsIdLinkFixResponse"
|
|
7960
9245
|
}
|
|
7961
9246
|
}
|
|
7962
9247
|
}
|
|
7963
9248
|
},
|
|
7964
9249
|
"400": {
|
|
7965
|
-
"$ref": "#/components/responses/
|
|
9250
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
7966
9251
|
},
|
|
7967
9252
|
"401": {
|
|
7968
9253
|
"$ref": "#/components/responses/Unauthorized"
|
|
@@ -8193,11 +9478,241 @@
|
|
|
8193
9478
|
"$ref": "#/components/responses/NotFound"
|
|
8194
9479
|
}
|
|
8195
9480
|
},
|
|
8196
|
-
"security": [
|
|
8197
|
-
{
|
|
8198
|
-
"builderSession": []
|
|
8199
|
-
}
|
|
8200
|
-
]
|
|
9481
|
+
"security": [
|
|
9482
|
+
{
|
|
9483
|
+
"builderSession": []
|
|
9484
|
+
}
|
|
9485
|
+
]
|
|
9486
|
+
}
|
|
9487
|
+
},
|
|
9488
|
+
"/sso/activity/rollup": {
|
|
9489
|
+
"post": {
|
|
9490
|
+
"operationId": "post_sso_activity_rollup",
|
|
9491
|
+
"tags": [
|
|
9492
|
+
"sso"
|
|
9493
|
+
],
|
|
9494
|
+
"summary": "POST /sso/activity/rollup",
|
|
9495
|
+
"description": "POST /sso/activity/rollup — a federated instance reports a builder's activity snapshot (ADR 0141 §4). Server-to-server, client_id+client_secret auth. Keyed to the AUTHENTICATED client_id. Descriptive analytics for the Archon-only scouting view — never authority. rank: public — authenticated by client_id + client_secret, not a builder rank.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
9496
|
+
"x-rank": "public",
|
|
9497
|
+
"x-source": "modules/platform-identity/routes/sso.js",
|
|
9498
|
+
"requestBody": {
|
|
9499
|
+
"required": true,
|
|
9500
|
+
"content": {
|
|
9501
|
+
"application/json": {
|
|
9502
|
+
"schema": {
|
|
9503
|
+
"$ref": "#/components/schemas/PostSsoActivityRollupRequest"
|
|
9504
|
+
}
|
|
9505
|
+
}
|
|
9506
|
+
},
|
|
9507
|
+
"x-validated": true
|
|
9508
|
+
},
|
|
9509
|
+
"responses": {
|
|
9510
|
+
"200": {
|
|
9511
|
+
"description": "Success.",
|
|
9512
|
+
"content": {
|
|
9513
|
+
"application/json": {
|
|
9514
|
+
"schema": {
|
|
9515
|
+
"$ref": "#/components/schemas/PostSsoActivityRollupResponse"
|
|
9516
|
+
}
|
|
9517
|
+
}
|
|
9518
|
+
}
|
|
9519
|
+
},
|
|
9520
|
+
"400": {
|
|
9521
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
9522
|
+
}
|
|
9523
|
+
},
|
|
9524
|
+
"security": []
|
|
9525
|
+
}
|
|
9526
|
+
},
|
|
9527
|
+
"/sso/authorize": {
|
|
9528
|
+
"get": {
|
|
9529
|
+
"operationId": "get_sso_authorize",
|
|
9530
|
+
"tags": [
|
|
9531
|
+
"sso"
|
|
9532
|
+
],
|
|
9533
|
+
"summary": "GET /sso/authorize",
|
|
9534
|
+
"description": "GET /sso/authorize?client_id=&redirect_uri=&state= — the browser authorize leg. rank: public — this is an authentication entry point, not an authorization surface. It is gated on a LIVE HUB SESSION (resolved inline via resolveSession; a missing session 302s to the hub's own web sign-in and returns here), NOT on a builder RANK. It mints identity-only codes.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
9535
|
+
"x-rank": "public",
|
|
9536
|
+
"x-source": "modules/platform-identity/routes/sso.js",
|
|
9537
|
+
"responses": {
|
|
9538
|
+
"200": {
|
|
9539
|
+
"description": "Success."
|
|
9540
|
+
},
|
|
9541
|
+
"400": {
|
|
9542
|
+
"$ref": "#/components/responses/BadRequest"
|
|
9543
|
+
}
|
|
9544
|
+
},
|
|
9545
|
+
"security": []
|
|
9546
|
+
}
|
|
9547
|
+
},
|
|
9548
|
+
"/sso/device/poll": {
|
|
9549
|
+
"post": {
|
|
9550
|
+
"operationId": "post_sso_device_poll",
|
|
9551
|
+
"tags": [
|
|
9552
|
+
"sso"
|
|
9553
|
+
],
|
|
9554
|
+
"summary": "POST /sso/device/poll",
|
|
9555
|
+
"description": "POST /sso/device/poll — poll the hub device flow. On GitHub approval, upsert the platform account and mint an audience-scoped EdDSA assertion for the client that was BOUND at start (from the origin) — the poll takes NO client_id, so the CLI cannot influence the audience. Returns the SAME poll states as the core device flow, plus { state:'ok', assertion } on success. rank: public — the device_code (GitHub's) is the bearer; the assertion carries identity ONLY and is useless to anyone but the origin-bound client (aud-scoped).\n\n**Rank:** `public` — No authentication — any caller.",
|
|
9556
|
+
"x-rank": "public",
|
|
9557
|
+
"x-source": "modules/platform-identity/routes/sso.js",
|
|
9558
|
+
"requestBody": {
|
|
9559
|
+
"required": true,
|
|
9560
|
+
"content": {
|
|
9561
|
+
"application/json": {
|
|
9562
|
+
"schema": {
|
|
9563
|
+
"$ref": "#/components/schemas/PostSsoDevicePollRequest"
|
|
9564
|
+
}
|
|
9565
|
+
}
|
|
9566
|
+
},
|
|
9567
|
+
"x-validated": true
|
|
9568
|
+
},
|
|
9569
|
+
"responses": {
|
|
9570
|
+
"200": {
|
|
9571
|
+
"description": "Success."
|
|
9572
|
+
},
|
|
9573
|
+
"400": {
|
|
9574
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
9575
|
+
}
|
|
9576
|
+
},
|
|
9577
|
+
"security": []
|
|
9578
|
+
}
|
|
9579
|
+
},
|
|
9580
|
+
"/sso/device/start": {
|
|
9581
|
+
"post": {
|
|
9582
|
+
"operationId": "post_sso_device_start",
|
|
9583
|
+
"tags": [
|
|
9584
|
+
"sso"
|
|
9585
|
+
],
|
|
9586
|
+
"summary": "POST /sso/device/start",
|
|
9587
|
+
"description": "POST /sso/device/start — begin CLI federation. The client is resolved from the USER-TYPED instance ORIGIN via the registry (getClientByOrigin) and BOUND to the device flow — the CLI never names the audience. This closes the confused-deputy where a malicious instance manifest could steer the mint at a victim client_id (ADR 0141 §1 security fix). Runs the GitHub device flow against the HUB's app and returns the codes. Identity is established as a platform ACCOUNT at poll time — never a hub-builder session (ADR 0141: identity federated, authority local). rank: public — an authentication entry point; the origin is public, and the poll's GitHub approval is the real gate.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
9588
|
+
"x-rank": "public",
|
|
9589
|
+
"x-source": "modules/platform-identity/routes/sso.js",
|
|
9590
|
+
"requestBody": {
|
|
9591
|
+
"required": true,
|
|
9592
|
+
"content": {
|
|
9593
|
+
"application/json": {
|
|
9594
|
+
"schema": {
|
|
9595
|
+
"$ref": "#/components/schemas/PostSsoDeviceStartRequest"
|
|
9596
|
+
}
|
|
9597
|
+
}
|
|
9598
|
+
},
|
|
9599
|
+
"x-validated": true
|
|
9600
|
+
},
|
|
9601
|
+
"responses": {
|
|
9602
|
+
"200": {
|
|
9603
|
+
"description": "Success."
|
|
9604
|
+
},
|
|
9605
|
+
"400": {
|
|
9606
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
9607
|
+
}
|
|
9608
|
+
},
|
|
9609
|
+
"security": []
|
|
9610
|
+
}
|
|
9611
|
+
},
|
|
9612
|
+
"/sso/membership/check-in": {
|
|
9613
|
+
"post": {
|
|
9614
|
+
"operationId": "post_sso_membership_check_in",
|
|
9615
|
+
"tags": [
|
|
9616
|
+
"sso"
|
|
9617
|
+
],
|
|
9618
|
+
"summary": "POST /sso/membership/check-in",
|
|
9619
|
+
"description": "POST /sso/membership/check-in — a federated instance reports, on every sign-in, that a builder builds on its project (ADR 0141 §3). Server-to-server, authed by client_id + client_secret (same constant-time check as /sso/token). Upserts the account (so a CLI-only builder still appears in My Projects) + the membership with a COARSE role. The client_id is taken from the AUTHENTICATED client — the caller cannot report membership for a project it doesn't hold the secret for. rank: public — authenticated by client_id + client_secret, not a builder rank.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
9620
|
+
"x-rank": "public",
|
|
9621
|
+
"x-source": "modules/platform-identity/routes/sso.js",
|
|
9622
|
+
"requestBody": {
|
|
9623
|
+
"required": true,
|
|
9624
|
+
"content": {
|
|
9625
|
+
"application/json": {
|
|
9626
|
+
"schema": {
|
|
9627
|
+
"$ref": "#/components/schemas/PostSsoMembershipCheckInRequest"
|
|
9628
|
+
}
|
|
9629
|
+
}
|
|
9630
|
+
},
|
|
9631
|
+
"x-validated": true
|
|
9632
|
+
},
|
|
9633
|
+
"responses": {
|
|
9634
|
+
"200": {
|
|
9635
|
+
"description": "Success.",
|
|
9636
|
+
"content": {
|
|
9637
|
+
"application/json": {
|
|
9638
|
+
"schema": {
|
|
9639
|
+
"$ref": "#/components/schemas/PostSsoMembershipCheckInResponse"
|
|
9640
|
+
}
|
|
9641
|
+
}
|
|
9642
|
+
}
|
|
9643
|
+
},
|
|
9644
|
+
"400": {
|
|
9645
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
9646
|
+
}
|
|
9647
|
+
},
|
|
9648
|
+
"security": []
|
|
9649
|
+
}
|
|
9650
|
+
},
|
|
9651
|
+
"/sso/pubkey": {
|
|
9652
|
+
"get": {
|
|
9653
|
+
"operationId": "get_sso_pubkey",
|
|
9654
|
+
"tags": [
|
|
9655
|
+
"sso"
|
|
9656
|
+
],
|
|
9657
|
+
"summary": "GET /sso/pubkey",
|
|
9658
|
+
"description": "GET /sso/pubkey — the hub's Ed25519 assertion-verification key (public). An instance provisioned WITHOUT the key in env can fetch it here; the value is public by design (it only VERIFIES assertions, never signs). rank: public — a public key is not a secret; no auth needed.\n\n**Rank:** `public` — No authentication — any caller.",
|
|
9659
|
+
"x-rank": "public",
|
|
9660
|
+
"x-source": "modules/platform-identity/routes/sso.js",
|
|
9661
|
+
"responses": {
|
|
9662
|
+
"200": {
|
|
9663
|
+
"description": "Success.",
|
|
9664
|
+
"content": {
|
|
9665
|
+
"application/json": {
|
|
9666
|
+
"schema": {
|
|
9667
|
+
"$ref": "#/components/schemas/GetSsoPubkeyResponse"
|
|
9668
|
+
}
|
|
9669
|
+
}
|
|
9670
|
+
}
|
|
9671
|
+
},
|
|
9672
|
+
"400": {
|
|
9673
|
+
"$ref": "#/components/responses/BadRequest"
|
|
9674
|
+
}
|
|
9675
|
+
},
|
|
9676
|
+
"security": []
|
|
9677
|
+
}
|
|
9678
|
+
},
|
|
9679
|
+
"/sso/token": {
|
|
9680
|
+
"post": {
|
|
9681
|
+
"operationId": "post_sso_token",
|
|
9682
|
+
"tags": [
|
|
9683
|
+
"sso"
|
|
9684
|
+
],
|
|
9685
|
+
"summary": "POST /sso/token",
|
|
9686
|
+
"description": "POST /sso/token — server-to-server code redemption. rank: public — authenticated by client_id + client_secret (constant-time hash compare in clientSecretValid), NOT a builder session/rank. This is the confidential-client leg; the instance calls it from its server, never the browser. Returns IDENTITY ONLY (github_id, login, display_name, avatar_url).\n\n**Rank:** `public` — No authentication — any caller.",
|
|
9687
|
+
"x-rank": "public",
|
|
9688
|
+
"x-source": "modules/platform-identity/routes/sso.js",
|
|
9689
|
+
"requestBody": {
|
|
9690
|
+
"required": true,
|
|
9691
|
+
"content": {
|
|
9692
|
+
"application/json": {
|
|
9693
|
+
"schema": {
|
|
9694
|
+
"$ref": "#/components/schemas/PostSsoTokenRequest"
|
|
9695
|
+
}
|
|
9696
|
+
}
|
|
9697
|
+
},
|
|
9698
|
+
"x-validated": true
|
|
9699
|
+
},
|
|
9700
|
+
"responses": {
|
|
9701
|
+
"200": {
|
|
9702
|
+
"description": "Success.",
|
|
9703
|
+
"content": {
|
|
9704
|
+
"application/json": {
|
|
9705
|
+
"schema": {
|
|
9706
|
+
"$ref": "#/components/schemas/PostSsoTokenResponse"
|
|
9707
|
+
}
|
|
9708
|
+
}
|
|
9709
|
+
}
|
|
9710
|
+
},
|
|
9711
|
+
"400": {
|
|
9712
|
+
"$ref": "#/components/responses/ValidationFailed"
|
|
9713
|
+
}
|
|
9714
|
+
},
|
|
9715
|
+
"security": []
|
|
8201
9716
|
}
|
|
8202
9717
|
},
|
|
8203
9718
|
"/tasks": {
|
|
@@ -8567,8 +10082,8 @@
|
|
|
8567
10082
|
"tasks"
|
|
8568
10083
|
],
|
|
8569
10084
|
"summary": "POST /tasks/:id/abandon",
|
|
8570
|
-
"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 —
|
|
8571
|
-
"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",
|
|
8572
10087
|
"x-source": "modules/lifecycle/routes/tasks.js",
|
|
8573
10088
|
"parameters": [
|
|
8574
10089
|
{
|
|
@@ -9322,7 +10837,7 @@
|
|
|
9322
10837
|
"tasks"
|
|
9323
10838
|
],
|
|
9324
10839
|
"summary": "POST /tasks/:id/promote",
|
|
9325
|
-
"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).",
|
|
9326
10841
|
"x-rank": "metic+archon",
|
|
9327
10842
|
"x-source": "modules/lifecycle/routes/tasks.js",
|
|
9328
10843
|
"parameters": [
|
|
@@ -9761,8 +11276,8 @@
|
|
|
9761
11276
|
"versions"
|
|
9762
11277
|
],
|
|
9763
11278
|
"summary": "POST /versions/:id/done-when",
|
|
9764
|
-
"description": "Auth (
|
|
9765
|
-
"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",
|
|
9766
11281
|
"x-source": "modules/lifecycle/routes/done-when.js",
|
|
9767
11282
|
"parameters": [
|
|
9768
11283
|
{
|
|
@@ -10018,18 +11533,33 @@
|
|
|
10018
11533
|
"status"
|
|
10019
11534
|
]
|
|
10020
11535
|
},
|
|
11536
|
+
"GetAuthWebAdmissionStatusResponse": {
|
|
11537
|
+
"type": "object",
|
|
11538
|
+
"properties": {
|
|
11539
|
+
"admitted": {
|
|
11540
|
+
"type": "boolean"
|
|
11541
|
+
}
|
|
11542
|
+
},
|
|
11543
|
+
"required": [
|
|
11544
|
+
"admitted"
|
|
11545
|
+
]
|
|
11546
|
+
},
|
|
10021
11547
|
"GetBackupStatusResponse": {
|
|
10022
11548
|
"type": "object",
|
|
10023
11549
|
"properties": {
|
|
10024
11550
|
"backup_dir": {},
|
|
10025
11551
|
"db_name": {},
|
|
10026
11552
|
"latest_dump": {},
|
|
11553
|
+
"stale": {},
|
|
11554
|
+
"age_hours": {},
|
|
10027
11555
|
"trigger_running": {}
|
|
10028
11556
|
},
|
|
10029
11557
|
"required": [
|
|
10030
11558
|
"backup_dir",
|
|
10031
11559
|
"db_name",
|
|
10032
11560
|
"latest_dump",
|
|
11561
|
+
"stale",
|
|
11562
|
+
"age_hours",
|
|
10033
11563
|
"trigger_running"
|
|
10034
11564
|
]
|
|
10035
11565
|
},
|
|
@@ -10229,6 +11759,15 @@
|
|
|
10229
11759
|
"count"
|
|
10230
11760
|
]
|
|
10231
11761
|
},
|
|
11762
|
+
"GetGithubReposResponse": {
|
|
11763
|
+
"type": "object",
|
|
11764
|
+
"properties": {
|
|
11765
|
+
"repos": {}
|
|
11766
|
+
},
|
|
11767
|
+
"required": [
|
|
11768
|
+
"repos"
|
|
11769
|
+
]
|
|
11770
|
+
},
|
|
10232
11771
|
"GetGoalsIdConflictsResponse": {
|
|
10233
11772
|
"type": "object",
|
|
10234
11773
|
"properties": {
|
|
@@ -10478,6 +12017,50 @@
|
|
|
10478
12017
|
"files"
|
|
10479
12018
|
]
|
|
10480
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
|
+
},
|
|
10481
12064
|
"GetMemoryFileResponse": {
|
|
10482
12065
|
"type": "object",
|
|
10483
12066
|
"properties": {
|
|
@@ -10540,6 +12123,26 @@
|
|
|
10540
12123
|
"submissions"
|
|
10541
12124
|
]
|
|
10542
12125
|
},
|
|
12126
|
+
"GetMyProjectsInvitesResponse": {
|
|
12127
|
+
"type": "object",
|
|
12128
|
+
"properties": {
|
|
12129
|
+
"invites": {}
|
|
12130
|
+
},
|
|
12131
|
+
"required": [
|
|
12132
|
+
"invites"
|
|
12133
|
+
]
|
|
12134
|
+
},
|
|
12135
|
+
"GetMyProjectsResponse": {
|
|
12136
|
+
"type": "object",
|
|
12137
|
+
"properties": {
|
|
12138
|
+
"owned": {},
|
|
12139
|
+
"building": {}
|
|
12140
|
+
},
|
|
12141
|
+
"required": [
|
|
12142
|
+
"owned",
|
|
12143
|
+
"building"
|
|
12144
|
+
]
|
|
12145
|
+
},
|
|
10543
12146
|
"GetOverrideRequestsResponse": {
|
|
10544
12147
|
"type": "object",
|
|
10545
12148
|
"properties": {
|
|
@@ -10549,6 +12152,24 @@
|
|
|
10549
12152
|
"requests"
|
|
10550
12153
|
]
|
|
10551
12154
|
},
|
|
12155
|
+
"GetProjectsFeaturedResponse": {
|
|
12156
|
+
"type": "object",
|
|
12157
|
+
"properties": {
|
|
12158
|
+
"projects": {}
|
|
12159
|
+
},
|
|
12160
|
+
"required": [
|
|
12161
|
+
"projects"
|
|
12162
|
+
]
|
|
12163
|
+
},
|
|
12164
|
+
"GetProjectsResponse": {
|
|
12165
|
+
"type": "object",
|
|
12166
|
+
"properties": {
|
|
12167
|
+
"projects": {}
|
|
12168
|
+
},
|
|
12169
|
+
"required": [
|
|
12170
|
+
"projects"
|
|
12171
|
+
]
|
|
12172
|
+
},
|
|
10552
12173
|
"GetProvisioningFleetResponse": {
|
|
10553
12174
|
"type": "object",
|
|
10554
12175
|
"properties": {
|
|
@@ -10776,6 +12397,15 @@
|
|
|
10776
12397
|
"page"
|
|
10777
12398
|
]
|
|
10778
12399
|
},
|
|
12400
|
+
"GetScoutingResponse": {
|
|
12401
|
+
"type": "object",
|
|
12402
|
+
"properties": {
|
|
12403
|
+
"builders": {}
|
|
12404
|
+
},
|
|
12405
|
+
"required": [
|
|
12406
|
+
"builders"
|
|
12407
|
+
]
|
|
12408
|
+
},
|
|
10779
12409
|
"GetSecurityDocsResponse": {
|
|
10780
12410
|
"type": "object",
|
|
10781
12411
|
"properties": {
|
|
@@ -10794,6 +12424,19 @@
|
|
|
10794
12424
|
"doc"
|
|
10795
12425
|
]
|
|
10796
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
|
+
},
|
|
10797
12440
|
"GetSessionsIdResponse": {
|
|
10798
12441
|
"type": "object",
|
|
10799
12442
|
"properties": {
|
|
@@ -10833,6 +12476,19 @@
|
|
|
10833
12476
|
"offset"
|
|
10834
12477
|
]
|
|
10835
12478
|
},
|
|
12479
|
+
"GetSsoPubkeyResponse": {
|
|
12480
|
+
"type": "object",
|
|
12481
|
+
"properties": {
|
|
12482
|
+
"alg": {},
|
|
12483
|
+
"format": {},
|
|
12484
|
+
"public_key_b64": {}
|
|
12485
|
+
},
|
|
12486
|
+
"required": [
|
|
12487
|
+
"alg",
|
|
12488
|
+
"format",
|
|
12489
|
+
"public_key_b64"
|
|
12490
|
+
]
|
|
12491
|
+
},
|
|
10836
12492
|
"GetTasksClaimableResponse": {
|
|
10837
12493
|
"type": "object",
|
|
10838
12494
|
"properties": {
|
|
@@ -11156,7 +12812,14 @@
|
|
|
11156
12812
|
"type": "integer",
|
|
11157
12813
|
"minimum": 1
|
|
11158
12814
|
},
|
|
11159
|
-
"reviewed_at": {}
|
|
12815
|
+
"reviewed_at": {},
|
|
12816
|
+
"merged_into_idea_id": {
|
|
12817
|
+
"type": "integer",
|
|
12818
|
+
"minimum": 1
|
|
12819
|
+
},
|
|
12820
|
+
"triage_note": {
|
|
12821
|
+
"type": "string"
|
|
12822
|
+
}
|
|
11160
12823
|
},
|
|
11161
12824
|
"additionalProperties": false
|
|
11162
12825
|
},
|
|
@@ -11258,6 +12921,27 @@
|
|
|
11258
12921
|
"known_sounds"
|
|
11259
12922
|
]
|
|
11260
12923
|
},
|
|
12924
|
+
"PatchProjectsIdFeaturedRequest": {
|
|
12925
|
+
"type": "object",
|
|
12926
|
+
"properties": {
|
|
12927
|
+
"featured": {
|
|
12928
|
+
"type": "boolean"
|
|
12929
|
+
}
|
|
12930
|
+
},
|
|
12931
|
+
"required": [
|
|
12932
|
+
"featured"
|
|
12933
|
+
],
|
|
12934
|
+
"additionalProperties": false
|
|
12935
|
+
},
|
|
12936
|
+
"PatchProjectsIdFeaturedResponse": {
|
|
12937
|
+
"type": "object",
|
|
12938
|
+
"properties": {
|
|
12939
|
+
"project": {}
|
|
12940
|
+
},
|
|
12941
|
+
"required": [
|
|
12942
|
+
"project"
|
|
12943
|
+
]
|
|
12944
|
+
},
|
|
11261
12945
|
"PatchTasksIdRequest": {
|
|
11262
12946
|
"type": "object",
|
|
11263
12947
|
"properties": {
|
|
@@ -11408,6 +13092,30 @@
|
|
|
11408
13092
|
"interval"
|
|
11409
13093
|
]
|
|
11410
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
|
+
},
|
|
11411
13119
|
"PostAuthCliTokenIssueResponse": {
|
|
11412
13120
|
"type": "object",
|
|
11413
13121
|
"properties": {
|
|
@@ -11427,6 +13135,30 @@
|
|
|
11427
13135
|
"paste_command"
|
|
11428
13136
|
]
|
|
11429
13137
|
},
|
|
13138
|
+
"PostAuthDeviceExchangeRequest": {
|
|
13139
|
+
"type": "object",
|
|
13140
|
+
"properties": {
|
|
13141
|
+
"assertion": {
|
|
13142
|
+
"type": "string",
|
|
13143
|
+
"maxLength": 4096
|
|
13144
|
+
}
|
|
13145
|
+
},
|
|
13146
|
+
"required": [
|
|
13147
|
+
"assertion"
|
|
13148
|
+
],
|
|
13149
|
+
"additionalProperties": false
|
|
13150
|
+
},
|
|
13151
|
+
"PostAuthDeviceExchangeResponse": {
|
|
13152
|
+
"type": "object",
|
|
13153
|
+
"properties": {
|
|
13154
|
+
"token": {},
|
|
13155
|
+
"builder": {}
|
|
13156
|
+
},
|
|
13157
|
+
"required": [
|
|
13158
|
+
"token",
|
|
13159
|
+
"builder"
|
|
13160
|
+
]
|
|
13161
|
+
},
|
|
11430
13162
|
"PostAuthDevicePollRequest": {
|
|
11431
13163
|
"type": "object",
|
|
11432
13164
|
"properties": {
|
|
@@ -11939,13 +13671,15 @@
|
|
|
11939
13671
|
"claim": {},
|
|
11940
13672
|
"task": {},
|
|
11941
13673
|
"just_unlocked": {},
|
|
11942
|
-
"overlap_warning": {}
|
|
13674
|
+
"overlap_warning": {},
|
|
13675
|
+
"reward": {}
|
|
11943
13676
|
},
|
|
11944
13677
|
"required": [
|
|
11945
13678
|
"claim",
|
|
11946
13679
|
"task",
|
|
11947
13680
|
"just_unlocked",
|
|
11948
|
-
"overlap_warning"
|
|
13681
|
+
"overlap_warning",
|
|
13682
|
+
"reward"
|
|
11949
13683
|
]
|
|
11950
13684
|
},
|
|
11951
13685
|
"PostCostRequest": {
|
|
@@ -12114,6 +13848,28 @@
|
|
|
12114
13848
|
"message"
|
|
12115
13849
|
]
|
|
12116
13850
|
},
|
|
13851
|
+
"PostGithubReposRequest": {
|
|
13852
|
+
"type": "object",
|
|
13853
|
+
"properties": {
|
|
13854
|
+
"name": {
|
|
13855
|
+
"type": "string",
|
|
13856
|
+
"maxLength": 100
|
|
13857
|
+
}
|
|
13858
|
+
},
|
|
13859
|
+
"required": [
|
|
13860
|
+
"name"
|
|
13861
|
+
],
|
|
13862
|
+
"additionalProperties": false
|
|
13863
|
+
},
|
|
13864
|
+
"PostGithubReposResponse": {
|
|
13865
|
+
"type": "object",
|
|
13866
|
+
"properties": {
|
|
13867
|
+
"repo": {}
|
|
13868
|
+
},
|
|
13869
|
+
"required": [
|
|
13870
|
+
"repo"
|
|
13871
|
+
]
|
|
13872
|
+
},
|
|
12117
13873
|
"PostGoalsIdArchiveResponse": {
|
|
12118
13874
|
"type": "object",
|
|
12119
13875
|
"properties": {
|
|
@@ -12570,6 +14326,16 @@
|
|
|
12570
14326
|
"succeeds_goal_id"
|
|
12571
14327
|
]
|
|
12572
14328
|
},
|
|
14329
|
+
"PostInboxIdRatifyRequest": {
|
|
14330
|
+
"type": "object",
|
|
14331
|
+
"properties": {
|
|
14332
|
+
"notes_md": {
|
|
14333
|
+
"type": "string",
|
|
14334
|
+
"maxLength": 10000
|
|
14335
|
+
}
|
|
14336
|
+
},
|
|
14337
|
+
"additionalProperties": false
|
|
14338
|
+
},
|
|
12573
14339
|
"PostInboxRequest": {
|
|
12574
14340
|
"type": "object",
|
|
12575
14341
|
"properties": {
|
|
@@ -12681,7 +14447,9 @@
|
|
|
12681
14447
|
"PostLlmCacheLookupResponse": {
|
|
12682
14448
|
"type": "object",
|
|
12683
14449
|
"properties": {
|
|
12684
|
-
"hit": {
|
|
14450
|
+
"hit": {
|
|
14451
|
+
"type": "boolean"
|
|
14452
|
+
},
|
|
12685
14453
|
"result": {}
|
|
12686
14454
|
},
|
|
12687
14455
|
"required": [
|
|
@@ -12701,7 +14469,9 @@
|
|
|
12701
14469
|
"PostLlmCacheStoreResponse": {
|
|
12702
14470
|
"type": "object",
|
|
12703
14471
|
"properties": {
|
|
12704
|
-
"stored": {
|
|
14472
|
+
"stored": {
|
|
14473
|
+
"type": "boolean"
|
|
14474
|
+
},
|
|
12705
14475
|
"result_cost_usd": {}
|
|
12706
14476
|
},
|
|
12707
14477
|
"required": [
|
|
@@ -12824,24 +14594,97 @@
|
|
|
12824
14594
|
"PostModulesKeySubmitRequest": {
|
|
12825
14595
|
"type": "object",
|
|
12826
14596
|
"properties": {
|
|
12827
|
-
"signed_by": {
|
|
14597
|
+
"signed_by": {
|
|
14598
|
+
"type": "string",
|
|
14599
|
+
"maxLength": 200
|
|
14600
|
+
}
|
|
14601
|
+
},
|
|
14602
|
+
"additionalProperties": false
|
|
14603
|
+
},
|
|
14604
|
+
"PostModulesKeySubmitResponse": {
|
|
14605
|
+
"type": "object",
|
|
14606
|
+
"properties": {
|
|
14607
|
+
"ok": {
|
|
14608
|
+
"type": "boolean"
|
|
14609
|
+
},
|
|
14610
|
+
"submission": {}
|
|
14611
|
+
},
|
|
14612
|
+
"required": [
|
|
14613
|
+
"ok",
|
|
14614
|
+
"submission"
|
|
14615
|
+
]
|
|
14616
|
+
},
|
|
14617
|
+
"PostMyProjectsClientIdLeaveResponse": {
|
|
14618
|
+
"type": "object",
|
|
14619
|
+
"properties": {
|
|
14620
|
+
"ok": {
|
|
14621
|
+
"type": "boolean"
|
|
14622
|
+
},
|
|
14623
|
+
"left": {}
|
|
14624
|
+
},
|
|
14625
|
+
"required": [
|
|
14626
|
+
"ok",
|
|
14627
|
+
"left"
|
|
14628
|
+
]
|
|
14629
|
+
},
|
|
14630
|
+
"PostMyProjectsInvitesClientIdAcceptResponse": {
|
|
14631
|
+
"type": "object",
|
|
14632
|
+
"properties": {
|
|
14633
|
+
"ok": {
|
|
14634
|
+
"type": "boolean"
|
|
14635
|
+
},
|
|
14636
|
+
"accepted": {
|
|
14637
|
+
"type": "boolean"
|
|
14638
|
+
}
|
|
14639
|
+
},
|
|
14640
|
+
"required": [
|
|
14641
|
+
"ok",
|
|
14642
|
+
"accepted"
|
|
14643
|
+
]
|
|
14644
|
+
},
|
|
14645
|
+
"PostMyProjectsInvitesClientIdDeclineResponse": {
|
|
14646
|
+
"type": "object",
|
|
14647
|
+
"properties": {
|
|
14648
|
+
"ok": {
|
|
14649
|
+
"type": "boolean"
|
|
14650
|
+
},
|
|
14651
|
+
"accepted": {
|
|
14652
|
+
"type": "boolean"
|
|
14653
|
+
}
|
|
14654
|
+
},
|
|
14655
|
+
"required": [
|
|
14656
|
+
"ok",
|
|
14657
|
+
"accepted"
|
|
14658
|
+
]
|
|
14659
|
+
},
|
|
14660
|
+
"PostMyProjectsJoinRequest": {
|
|
14661
|
+
"type": "object",
|
|
14662
|
+
"properties": {
|
|
14663
|
+
"origin": {
|
|
12828
14664
|
"type": "string",
|
|
12829
|
-
"maxLength":
|
|
14665
|
+
"maxLength": 512
|
|
12830
14666
|
}
|
|
12831
14667
|
},
|
|
14668
|
+
"required": [
|
|
14669
|
+
"origin"
|
|
14670
|
+
],
|
|
12832
14671
|
"additionalProperties": false
|
|
12833
14672
|
},
|
|
12834
|
-
"
|
|
14673
|
+
"PostMyProjectsJoinResponse": {
|
|
12835
14674
|
"type": "object",
|
|
12836
14675
|
"properties": {
|
|
12837
14676
|
"ok": {
|
|
12838
14677
|
"type": "boolean"
|
|
12839
14678
|
},
|
|
12840
|
-
"
|
|
14679
|
+
"status": {},
|
|
14680
|
+
"project": {},
|
|
14681
|
+
"message": {}
|
|
12841
14682
|
},
|
|
12842
14683
|
"required": [
|
|
12843
14684
|
"ok",
|
|
12844
|
-
"
|
|
14685
|
+
"status",
|
|
14686
|
+
"project",
|
|
14687
|
+
"message"
|
|
12845
14688
|
]
|
|
12846
14689
|
},
|
|
12847
14690
|
"PostOverrideRequestsIdDecideRequest": {
|
|
@@ -12860,6 +14703,59 @@
|
|
|
12860
14703
|
],
|
|
12861
14704
|
"additionalProperties": false
|
|
12862
14705
|
},
|
|
14706
|
+
"PostProjectsInviteRequest": {
|
|
14707
|
+
"type": "object",
|
|
14708
|
+
"properties": {
|
|
14709
|
+
"client_id": {
|
|
14710
|
+
"type": "string",
|
|
14711
|
+
"maxLength": 200
|
|
14712
|
+
},
|
|
14713
|
+
"github_login": {
|
|
14714
|
+
"type": "string",
|
|
14715
|
+
"maxLength": 200
|
|
14716
|
+
}
|
|
14717
|
+
},
|
|
14718
|
+
"required": [
|
|
14719
|
+
"client_id",
|
|
14720
|
+
"github_login"
|
|
14721
|
+
],
|
|
14722
|
+
"additionalProperties": false
|
|
14723
|
+
},
|
|
14724
|
+
"PostProjectsRequest": {
|
|
14725
|
+
"type": "object",
|
|
14726
|
+
"properties": {
|
|
14727
|
+
"origin": {
|
|
14728
|
+
"type": "string",
|
|
14729
|
+
"maxLength": 512
|
|
14730
|
+
},
|
|
14731
|
+
"name": {
|
|
14732
|
+
"type": "string",
|
|
14733
|
+
"maxLength": 200
|
|
14734
|
+
},
|
|
14735
|
+
"tagline": {
|
|
14736
|
+
"type": "string",
|
|
14737
|
+
"maxLength": 400
|
|
14738
|
+
},
|
|
14739
|
+
"art_url": {
|
|
14740
|
+
"type": "string",
|
|
14741
|
+
"maxLength": 2048
|
|
14742
|
+
}
|
|
14743
|
+
},
|
|
14744
|
+
"required": [
|
|
14745
|
+
"origin",
|
|
14746
|
+
"name"
|
|
14747
|
+
],
|
|
14748
|
+
"additionalProperties": false
|
|
14749
|
+
},
|
|
14750
|
+
"PostProjectsResponse": {
|
|
14751
|
+
"type": "object",
|
|
14752
|
+
"properties": {
|
|
14753
|
+
"project": {}
|
|
14754
|
+
},
|
|
14755
|
+
"required": [
|
|
14756
|
+
"project"
|
|
14757
|
+
]
|
|
14758
|
+
},
|
|
12863
14759
|
"PostProvisioningInstancesIdForceTeardownResponse": {
|
|
12864
14760
|
"type": "object",
|
|
12865
14761
|
"properties": {
|
|
@@ -13036,6 +14932,109 @@
|
|
|
13036
14932
|
"doc"
|
|
13037
14933
|
]
|
|
13038
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
|
+
},
|
|
13039
15038
|
"PostSessionOptimizeRequest": {
|
|
13040
15039
|
"type": "object",
|
|
13041
15040
|
"properties": {
|
|
@@ -13105,6 +15104,172 @@
|
|
|
13105
15104
|
"token_reward": {}
|
|
13106
15105
|
}
|
|
13107
15106
|
},
|
|
15107
|
+
"PostSsoActivityRollupRequest": {
|
|
15108
|
+
"type": "object",
|
|
15109
|
+
"properties": {
|
|
15110
|
+
"client_id": {
|
|
15111
|
+
"type": "string",
|
|
15112
|
+
"maxLength": 200
|
|
15113
|
+
},
|
|
15114
|
+
"client_secret": {
|
|
15115
|
+
"type": "string",
|
|
15116
|
+
"maxLength": 512
|
|
15117
|
+
},
|
|
15118
|
+
"github_id": {
|
|
15119
|
+
"$ref": "#/components/schemas/StringifiableId"
|
|
15120
|
+
},
|
|
15121
|
+
"credits": {
|
|
15122
|
+
"type": "number"
|
|
15123
|
+
},
|
|
15124
|
+
"tasks_shipped": {
|
|
15125
|
+
"type": "number"
|
|
15126
|
+
},
|
|
15127
|
+
"karma": {
|
|
15128
|
+
"type": "number"
|
|
15129
|
+
},
|
|
15130
|
+
"rank": {
|
|
15131
|
+
"type": "string",
|
|
15132
|
+
"maxLength": 32
|
|
15133
|
+
},
|
|
15134
|
+
"disciplines": {}
|
|
15135
|
+
},
|
|
15136
|
+
"required": [
|
|
15137
|
+
"client_id",
|
|
15138
|
+
"client_secret",
|
|
15139
|
+
"github_id"
|
|
15140
|
+
],
|
|
15141
|
+
"additionalProperties": false
|
|
15142
|
+
},
|
|
15143
|
+
"PostSsoActivityRollupResponse": {
|
|
15144
|
+
"type": "object",
|
|
15145
|
+
"properties": {
|
|
15146
|
+
"ok": {
|
|
15147
|
+
"type": "boolean"
|
|
15148
|
+
}
|
|
15149
|
+
},
|
|
15150
|
+
"required": [
|
|
15151
|
+
"ok"
|
|
15152
|
+
]
|
|
15153
|
+
},
|
|
15154
|
+
"PostSsoDevicePollRequest": {
|
|
15155
|
+
"type": "object",
|
|
15156
|
+
"properties": {
|
|
15157
|
+
"device_code": {
|
|
15158
|
+
"type": "string",
|
|
15159
|
+
"maxLength": 512
|
|
15160
|
+
}
|
|
15161
|
+
},
|
|
15162
|
+
"required": [
|
|
15163
|
+
"device_code"
|
|
15164
|
+
],
|
|
15165
|
+
"additionalProperties": false
|
|
15166
|
+
},
|
|
15167
|
+
"PostSsoDeviceStartRequest": {
|
|
15168
|
+
"type": "object",
|
|
15169
|
+
"properties": {
|
|
15170
|
+
"origin": {
|
|
15171
|
+
"type": "string",
|
|
15172
|
+
"maxLength": 512
|
|
15173
|
+
}
|
|
15174
|
+
},
|
|
15175
|
+
"required": [
|
|
15176
|
+
"origin"
|
|
15177
|
+
],
|
|
15178
|
+
"additionalProperties": false
|
|
15179
|
+
},
|
|
15180
|
+
"PostSsoMembershipCheckInRequest": {
|
|
15181
|
+
"type": "object",
|
|
15182
|
+
"properties": {
|
|
15183
|
+
"client_id": {
|
|
15184
|
+
"type": "string",
|
|
15185
|
+
"maxLength": 200
|
|
15186
|
+
},
|
|
15187
|
+
"client_secret": {
|
|
15188
|
+
"type": "string",
|
|
15189
|
+
"maxLength": 512
|
|
15190
|
+
},
|
|
15191
|
+
"github_id": {
|
|
15192
|
+
"$ref": "#/components/schemas/StringifiableId"
|
|
15193
|
+
},
|
|
15194
|
+
"github_login": {
|
|
15195
|
+
"type": "string",
|
|
15196
|
+
"maxLength": 200
|
|
15197
|
+
},
|
|
15198
|
+
"display_name": {
|
|
15199
|
+
"type": "string",
|
|
15200
|
+
"maxLength": 400
|
|
15201
|
+
},
|
|
15202
|
+
"avatar_url": {
|
|
15203
|
+
"type": "string",
|
|
15204
|
+
"maxLength": 2048
|
|
15205
|
+
},
|
|
15206
|
+
"role": {
|
|
15207
|
+
"type": "string",
|
|
15208
|
+
"maxLength": 16
|
|
15209
|
+
}
|
|
15210
|
+
},
|
|
15211
|
+
"required": [
|
|
15212
|
+
"client_id",
|
|
15213
|
+
"client_secret",
|
|
15214
|
+
"github_id",
|
|
15215
|
+
"github_login"
|
|
15216
|
+
],
|
|
15217
|
+
"additionalProperties": false
|
|
15218
|
+
},
|
|
15219
|
+
"PostSsoMembershipCheckInResponse": {
|
|
15220
|
+
"type": "object",
|
|
15221
|
+
"properties": {
|
|
15222
|
+
"ok": {
|
|
15223
|
+
"type": "boolean"
|
|
15224
|
+
}
|
|
15225
|
+
},
|
|
15226
|
+
"required": [
|
|
15227
|
+
"ok"
|
|
15228
|
+
]
|
|
15229
|
+
},
|
|
15230
|
+
"PostSsoTokenRequest": {
|
|
15231
|
+
"type": "object",
|
|
15232
|
+
"properties": {
|
|
15233
|
+
"client_id": {
|
|
15234
|
+
"type": "string",
|
|
15235
|
+
"maxLength": 200
|
|
15236
|
+
},
|
|
15237
|
+
"client_secret": {
|
|
15238
|
+
"type": "string",
|
|
15239
|
+
"maxLength": 512
|
|
15240
|
+
},
|
|
15241
|
+
"code": {
|
|
15242
|
+
"type": "string",
|
|
15243
|
+
"maxLength": 512
|
|
15244
|
+
},
|
|
15245
|
+
"redirect_uri": {
|
|
15246
|
+
"type": "string",
|
|
15247
|
+
"maxLength": 2048
|
|
15248
|
+
}
|
|
15249
|
+
},
|
|
15250
|
+
"required": [
|
|
15251
|
+
"client_id",
|
|
15252
|
+
"client_secret",
|
|
15253
|
+
"code",
|
|
15254
|
+
"redirect_uri"
|
|
15255
|
+
],
|
|
15256
|
+
"additionalProperties": false
|
|
15257
|
+
},
|
|
15258
|
+
"PostSsoTokenResponse": {
|
|
15259
|
+
"type": "object",
|
|
15260
|
+
"properties": {
|
|
15261
|
+
"github_id": {},
|
|
15262
|
+
"github_login": {},
|
|
15263
|
+
"display_name": {},
|
|
15264
|
+
"avatar_url": {}
|
|
15265
|
+
},
|
|
15266
|
+
"required": [
|
|
15267
|
+
"github_id",
|
|
15268
|
+
"github_login",
|
|
15269
|
+
"display_name",
|
|
15270
|
+
"avatar_url"
|
|
15271
|
+
]
|
|
15272
|
+
},
|
|
13108
15273
|
"PostTasksIdAbandonRequest": {
|
|
13109
15274
|
"type": "object",
|
|
13110
15275
|
"properties": {
|
|
@@ -13719,9 +15884,9 @@
|
|
|
13719
15884
|
"description": "A required dependency/feature is not configured or is temporarily down."
|
|
13720
15885
|
}
|
|
13721
15886
|
},
|
|
13722
|
-
"x-endpoint-count":
|
|
13723
|
-
"x-schema-count":
|
|
15887
|
+
"x-endpoint-count": 258,
|
|
15888
|
+
"x-schema-count": 288,
|
|
13724
15889
|
"x-undocumented-bodies": 8,
|
|
13725
|
-
"x-response-schemas":
|
|
15890
|
+
"x-response-schemas": 194,
|
|
13726
15891
|
"x-generated-by": "scripts/gds/gen-api-docs.js"
|
|
13727
15892
|
}
|