forgedock 1.27.0 → 1.28.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (127) hide show
  1. package/README.md +4 -1
  2. package/bin/bootstrap.mjs +55 -0
  3. package/bin/engine/outcome-codes.mjs +10 -0
  4. package/bin/engine/telemetry-seam.mjs +37 -8
  5. package/bin/engine/telemetry-seam.test.mjs +31 -0
  6. package/bin/engine-cli.mjs +542 -38
  7. package/bin/engine.mjs +8 -4
  8. package/bin/forgedock.mjs +75 -9
  9. package/bin/gc.mjs +580 -0
  10. package/bin/lean/admission.mjs +33 -3
  11. package/bin/lean/batch.mjs +22 -4
  12. package/bin/lean/batch.test.mjs +5 -3
  13. package/bin/lean/checks.mjs +199 -0
  14. package/bin/lean/checks.test.mjs +183 -0
  15. package/bin/lean/conformance.mjs +190 -58
  16. package/bin/lean/conformance.test.mjs +116 -7
  17. package/bin/lean/credentials.mjs +29 -0
  18. package/bin/lean/depcache.mjs +312 -0
  19. package/bin/lean/depcache.test.mjs +298 -0
  20. package/bin/lean/drift.mjs +198 -0
  21. package/bin/lean/drift.test.mjs +223 -0
  22. package/bin/lean/effects.mjs +85 -8
  23. package/bin/lean/execution.e2e.test.mjs +81 -0
  24. package/bin/lean/execution.mjs +431 -0
  25. package/bin/lean/execution.test.mjs +583 -0
  26. package/bin/lean/heavy.mjs +289 -0
  27. package/bin/lean/heavy.test.mjs +207 -0
  28. package/bin/lean/lean.mjs +572 -139
  29. package/bin/lean/lean.test.mjs +1193 -31
  30. package/bin/lean/ledger.mjs +27 -2
  31. package/bin/lean/ledger.test.mjs +36 -1
  32. package/bin/lean/limits.mjs +58 -0
  33. package/bin/lean/limits.test.mjs +150 -0
  34. package/bin/lean/orchestrate.mjs +312 -19
  35. package/bin/lean/prompts.mjs +89 -15
  36. package/bin/lean/refactor.mjs +276 -0
  37. package/bin/lean/refactor.test.mjs +359 -0
  38. package/bin/lean/render.mjs +24 -5
  39. package/bin/lean/review-trigger.mjs +134 -0
  40. package/bin/lean/review-trigger.test.mjs +104 -0
  41. package/bin/lean/sandbox-provider.contract.test.mjs +257 -0
  42. package/bin/lean/sandbox-remote.mjs +142 -0
  43. package/bin/lean/sched.mjs +221 -0
  44. package/bin/lean/sched.test.mjs +310 -0
  45. package/bin/lean/schedd.mjs +247 -0
  46. package/bin/lean/schedd.test.mjs +180 -0
  47. package/bin/lean/toolchain.mjs +228 -0
  48. package/bin/lean/toolchain.test.mjs +154 -0
  49. package/bin/lean/verify.mjs +20 -9
  50. package/bin/lean/verify.test.mjs +26 -3
  51. package/bin/lean/worktree.mjs +69 -0
  52. package/bin/lean/worktree.test.mjs +141 -0
  53. package/bin/runner.mjs +53 -10
  54. package/bin/stats/github-source.mjs +1 -1
  55. package/bin/stats/index.mjs +14 -2
  56. package/bin/stats/query.mjs +72 -0
  57. package/bin/stats/stats.test.mjs +54 -0
  58. package/commands/audit.md +2 -0
  59. package/commands/autopilot.md +2 -0
  60. package/commands/bootstrap.md +35 -0
  61. package/commands/cleanup.md +7 -22
  62. package/commands/forge-stats.md +2 -1
  63. package/commands/forgedock-init.md +7 -0
  64. package/commands/issue.md +89 -830
  65. package/commands/milestone.md +55 -6
  66. package/commands/orchestrate.md +10 -2
  67. package/commands/upgrade-deps.md +3 -3
  68. package/commands/work-on/build/validate.md +4 -0
  69. package/commands/work-on/close.md +2 -0
  70. package/commands/work-on/decompose.md +24 -6
  71. package/docs/CI.md +3 -3
  72. package/docs/CONFIG.md +177 -2
  73. package/docs/OUTCOME-CODES.md +8 -0
  74. package/docs/TELEMETRY.md +1 -1
  75. package/docs/site/command-reference.md +22 -0
  76. package/docs/site/getting-started.md +2 -0
  77. package/docs/site/start-a-new-project.md +327 -0
  78. package/package.json +1 -1
  79. package/scripts/affected-files-check.sh +91 -0
  80. package/scripts/affected-files-check.test.sh +80 -0
  81. package/scripts/bootstrap-create.mjs +393 -0
  82. package/scripts/bootstrap-validate.mjs +36 -2
  83. package/scripts/calibration.mjs +116 -0
  84. package/scripts/check-devdocs-freshness.sh +9 -4
  85. package/scripts/check-devdocs-freshness.test.sh +11 -1
  86. package/scripts/check-spec-markers.sh +3 -0
  87. package/scripts/check-spec-size.sh +29 -11
  88. package/scripts/check-spec-size.test.sh +27 -4
  89. package/scripts/ci-local/lib.mjs +8 -1
  90. package/scripts/ci-local/parallelism.test.mjs +27 -0
  91. package/scripts/ci-local/run.mjs +3 -3
  92. package/scripts/ci-local/scoping.mjs +82 -0
  93. package/scripts/ci-local.test.sh +1 -1
  94. package/scripts/fixtures/symbol-index/other/sample.rb +3 -0
  95. package/scripts/fixtures/symbol-index/py/pkg/__init__.py +1 -0
  96. package/scripts/fixtures/symbol-index/py/pkg/a.py +5 -0
  97. package/scripts/fixtures/symbol-index/py/pkg/b.py +14 -0
  98. package/scripts/fixtures/symbol-index/py/pkg/c.py +1 -0
  99. package/scripts/fixtures/symbol-index/py/sample.py +41 -0
  100. package/scripts/fixtures/symbol-index/ts/sample.ts +13 -0
  101. package/scripts/fixtures/symbol-move/gen_big.py +201 -0
  102. package/scripts/fixtures/symbol-move-ts/gen_big.mjs +56 -0
  103. package/scripts/forge-root.test.sh +1 -1
  104. package/scripts/hotspots.sh +100 -0
  105. package/scripts/hotspots.test.sh +101 -0
  106. package/scripts/issue-create.sh +197 -0
  107. package/scripts/issue-create.test.sh +166 -0
  108. package/scripts/maintenance-scan.sh +185 -0
  109. package/scripts/maintenance-scan.test.sh +89 -0
  110. package/scripts/milestone-drift.sh +206 -0
  111. package/scripts/milestone-drift.test.sh +120 -0
  112. package/scripts/refactor-verify.sh +368 -0
  113. package/scripts/refactor-verify.test.sh +202 -0
  114. package/scripts/structure-delta.sh +10 -5
  115. package/scripts/structure-delta.test.sh +3 -2
  116. package/scripts/symbol-index.mjs +253 -0
  117. package/scripts/symbol-index.py +354 -0
  118. package/scripts/symbol-index.test.sh +119 -0
  119. package/scripts/symbol-move-ts.test.sh +161 -0
  120. package/scripts/symbol-move.mjs +379 -0
  121. package/scripts/symbol-move.py +383 -0
  122. package/scripts/symbol-move.test.sh +168 -0
  123. package/templates/bootstrap/interview.md +34 -0
  124. package/templates/bootstrap/issue-body.md +42 -0
  125. package/templates/bootstrap/needs-human-issue.md +45 -0
  126. package/templates/bootstrap/stack-profiles.md +34 -0
  127. package/templates/bootstrap/technical-spike.md +75 -0
@@ -0,0 +1,45 @@
1
+ <!-- SPDX-FileCopyrightText: Copyright (c) RapierCraft Studios -->
2
+ <!-- SPDX-License-Identifier: AGPL-3.0-or-later -->
3
+ <!-- /bootstrap needs-human issue: one per credential, account or external input (OAuth client, cloud or DNS account,
4
+ payment keys, API keys, legal review). Label it needs-human and set "needsHuman": true in the plan. Code issues
5
+ reference it (#{{KEY}}) but never list it under Dependencies; their mocks keep dev and CI green. Copy from "## Problem" down. -->
6
+ ## Problem
7
+
8
+ {which credential, account or external input is needed, and which issues use it}
9
+
10
+ ### Setup steps
11
+
12
+ 1. {exact console URL and the clicks to create it}
13
+ 2. {settings to choose: redirect URIs, scopes, region}
14
+ 3. {store the values as deploy secrets (repository or environment secrets)}
15
+
16
+ ### Environment variables
17
+
18
+ - `{SERVICE_CLIENT_ID}` — {what it is}
19
+ - `{SERVICE_CLIENT_SECRET}` — {what it is}
20
+
21
+ ### Secret handling
22
+
23
+ Never commit these values or paste them into issues. Store them only as deploy/CI secrets and a local untracked
24
+ `.env`. Rotate them if exposed. Until they exist, dev and CI use the mock provider.
25
+
26
+ ## Root Cause (if known)
27
+
28
+ Greenfield: an external input agents cannot create.
29
+
30
+ ## Affected Files
31
+
32
+ 1. `docs/setup/{service}.md` — new
33
+
34
+ ## Acceptance Criteria
35
+
36
+ - [ ] Credentials created and stored as deploy secrets [type:manual]
37
+ - [ ] The real provider replaces the mock in staging [type:manual]
38
+
39
+ ## Context
40
+
41
+ **Parent**: #{{SPIKE}}
42
+
43
+ ## Dependencies
44
+
45
+ None.
@@ -0,0 +1,34 @@
1
+ <!-- SPDX-FileCopyrightText: Copyright (c) RapierCraft Studios -->
2
+ <!-- SPDX-License-Identifier: AGPL-3.0-or-later -->
3
+ # /bootstrap stack-profile presets
4
+
5
+ Pick the preset closest to the interview and record the choice and its rationale in the spike's Stack section. A
6
+ preset only fills blanks: anything the user said wins. Domain labels go into the plan's `labels`.
7
+
8
+ ## Next.js + shadcn SaaS
9
+ - **Stack**: TypeScript, Next.js (App Router), shadcn/ui + Tailwind, Postgres (Prisma or Drizzle) with row-level security, Auth.js.
10
+ - **Repo layout**: `apps/web/`, `packages/db/`, `packages/ui/`, `packages/config/`, `docs/engineering/`.
11
+ - **Deployment**: Vercel or a VPS with Docker; managed Postgres; preview deployments per branch.
12
+ - **Quality gates**: `tsc --noEmit`, ESLint, Vitest, Playwright smoke test, Lighthouse budget on hero pages.
13
+ - **Domain labels**: `frontend`, `backend`, `infra`, `design`.
14
+
15
+ ## Python API
16
+ - **Stack**: Python 3.12, FastAPI, SQLAlchemy + Alembic, Postgres, Pydantic settings, uv.
17
+ - **Repo layout**: `src/<app>/api/`, `src/<app>/models/`, `src/<app>/services/`, `migrations/`, `tests/`, `docs/engineering/`.
18
+ - **Deployment**: a container on a VPS or Cloud Run; managed Postgres.
19
+ - **Quality gates**: ruff, mypy, pytest with coverage, an OpenAPI schema diff check.
20
+ - **Domain labels**: `backend`, `infra`, `api`.
21
+
22
+ ## Mobile (Expo / React Native)
23
+ - **Stack**: TypeScript, Expo + React Native, Expo Router, a backend from one of the presets above (or Supabase).
24
+ - **Repo layout**: `apps/mobile/`, `apps/api/` (when a custom backend exists), `packages/shared/`, `docs/engineering/`.
25
+ - **Deployment**: EAS Build and Submit; OTA updates for JS-only changes.
26
+ - **Quality gates**: `tsc --noEmit`, ESLint, Jest, a Maestro or Detox smoke flow.
27
+ - **Domain labels**: `mobile`, `backend`, `infra`, `design`.
28
+
29
+ ## Go service
30
+ - **Stack**: Go, chi or net/http, sqlc + Postgres, Docker.
31
+ - **Repo layout**: `cmd/<app>/`, `internal/`, `migrations/`, `docs/engineering/`.
32
+ - **Deployment**: a single static binary in a container on a VPS or Fly.io.
33
+ - **Quality gates**: `go vet`, golangci-lint, `go test -race`.
34
+ - **Domain labels**: `backend`, `infra`.
@@ -0,0 +1,75 @@
1
+ <!-- SPDX-FileCopyrightText: Copyright (c) RapierCraft Studios -->
2
+ <!-- SPDX-License-Identifier: AGPL-3.0-or-later -->
3
+ # Technical Spike: {PRODUCT_NAME}
4
+
5
+ > Written by /bootstrap. Every decision is followed by an ADR-style `**Rationale**:` line (the decision, why, and the
6
+ > rejected alternative). bootstrap-create.mjs refuses to create the backlog while a section or a rationale is missing.
7
+
8
+ ## Assumptions
9
+
10
+ {the "Here's what I assumed" list, one line each: aspect — default — rationale}
11
+
12
+ ## Guardrails
13
+
14
+ {guardrails and domain rules from the interview; copied into every issue's Context}
15
+
16
+ ## Stack
17
+
18
+ {languages, frameworks, database, auth, UI library}
19
+
20
+ **Rationale**: {why this stack fits the product; rejected alternative}
21
+
22
+ ## Repo layout
23
+
24
+ ```
25
+ {tree of planned directories and key files; /issue --greenfield validates Affected Files against it}
26
+ ```
27
+
28
+ **Rationale**: {why this layout}
29
+
30
+ ## Runtime topology
31
+
32
+ {services, workers, storage, CDN; the bootstrap-to-scale path: day-one single node -> next step -> at scale}
33
+
34
+ **Rationale**: {why}
35
+
36
+ ## Data model
37
+
38
+ {entities, relations, tenancy model, retention}
39
+
40
+ **Rationale**: {why}
41
+
42
+ ## Security and privacy
43
+
44
+ {authn/authz, secrets, PII handling, data residency, compliance}
45
+
46
+ **Rationale**: {why}
47
+
48
+ ## Design system and quality gates
49
+
50
+ {design tokens, component library, dark mode, a11y target; lint, type, test and performance gates in CI}
51
+
52
+ **Rationale**: {why}
53
+
54
+ ## Route/API map
55
+
56
+ | Route or endpoint | Purpose | Auth |
57
+ |-------------------|---------|------|
58
+ | {path} | {what} | {who} |
59
+
60
+ **Rationale**: {why}
61
+
62
+ ## Credentials
63
+
64
+ | Credential or account | Env var(s) | needs-human issue | Mock in dev/CI |
65
+ |-----------------------|------------|-------------------|----------------|
66
+ | {e.g. Google OAuth client} | `{GOOGLE_CLIENT_ID}` | {title} | {mock provider} |
67
+
68
+ **Rationale**: {why each external input is mocked until a human provides it}
69
+
70
+ ## Milestone plan
71
+
72
+ 1. {Foundation — what it delivers}
73
+ 2. {next milestone}
74
+
75
+ **Rationale**: {build order: foundation first, then dependents}