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.
- package/README.md +4 -1
- package/bin/bootstrap.mjs +55 -0
- package/bin/engine/outcome-codes.mjs +10 -0
- package/bin/engine/telemetry-seam.mjs +37 -8
- package/bin/engine/telemetry-seam.test.mjs +31 -0
- package/bin/engine-cli.mjs +542 -38
- package/bin/engine.mjs +8 -4
- package/bin/forgedock.mjs +75 -9
- package/bin/gc.mjs +580 -0
- package/bin/lean/admission.mjs +33 -3
- package/bin/lean/batch.mjs +22 -4
- package/bin/lean/batch.test.mjs +5 -3
- package/bin/lean/checks.mjs +199 -0
- package/bin/lean/checks.test.mjs +183 -0
- package/bin/lean/conformance.mjs +190 -58
- package/bin/lean/conformance.test.mjs +116 -7
- package/bin/lean/credentials.mjs +29 -0
- package/bin/lean/depcache.mjs +312 -0
- package/bin/lean/depcache.test.mjs +298 -0
- package/bin/lean/drift.mjs +198 -0
- package/bin/lean/drift.test.mjs +223 -0
- package/bin/lean/effects.mjs +85 -8
- package/bin/lean/execution.e2e.test.mjs +81 -0
- package/bin/lean/execution.mjs +431 -0
- package/bin/lean/execution.test.mjs +583 -0
- package/bin/lean/heavy.mjs +289 -0
- package/bin/lean/heavy.test.mjs +207 -0
- package/bin/lean/lean.mjs +572 -139
- package/bin/lean/lean.test.mjs +1193 -31
- package/bin/lean/ledger.mjs +27 -2
- package/bin/lean/ledger.test.mjs +36 -1
- package/bin/lean/limits.mjs +58 -0
- package/bin/lean/limits.test.mjs +150 -0
- package/bin/lean/orchestrate.mjs +312 -19
- package/bin/lean/prompts.mjs +89 -15
- package/bin/lean/refactor.mjs +276 -0
- package/bin/lean/refactor.test.mjs +359 -0
- package/bin/lean/render.mjs +24 -5
- package/bin/lean/review-trigger.mjs +134 -0
- package/bin/lean/review-trigger.test.mjs +104 -0
- package/bin/lean/sandbox-provider.contract.test.mjs +257 -0
- package/bin/lean/sandbox-remote.mjs +142 -0
- package/bin/lean/sched.mjs +221 -0
- package/bin/lean/sched.test.mjs +310 -0
- package/bin/lean/schedd.mjs +247 -0
- package/bin/lean/schedd.test.mjs +180 -0
- package/bin/lean/toolchain.mjs +228 -0
- package/bin/lean/toolchain.test.mjs +154 -0
- package/bin/lean/verify.mjs +20 -9
- package/bin/lean/verify.test.mjs +26 -3
- package/bin/lean/worktree.mjs +69 -0
- package/bin/lean/worktree.test.mjs +141 -0
- package/bin/runner.mjs +53 -10
- package/bin/stats/github-source.mjs +1 -1
- package/bin/stats/index.mjs +14 -2
- package/bin/stats/query.mjs +72 -0
- package/bin/stats/stats.test.mjs +54 -0
- package/commands/audit.md +2 -0
- package/commands/autopilot.md +2 -0
- package/commands/bootstrap.md +35 -0
- package/commands/cleanup.md +7 -22
- package/commands/forge-stats.md +2 -1
- package/commands/forgedock-init.md +7 -0
- package/commands/issue.md +89 -830
- package/commands/milestone.md +55 -6
- package/commands/orchestrate.md +10 -2
- package/commands/upgrade-deps.md +3 -3
- package/commands/work-on/build/validate.md +4 -0
- package/commands/work-on/close.md +2 -0
- package/commands/work-on/decompose.md +24 -6
- package/docs/CI.md +3 -3
- package/docs/CONFIG.md +177 -2
- package/docs/OUTCOME-CODES.md +8 -0
- package/docs/TELEMETRY.md +1 -1
- package/docs/site/command-reference.md +22 -0
- package/docs/site/getting-started.md +2 -0
- package/docs/site/start-a-new-project.md +327 -0
- package/package.json +1 -1
- package/scripts/affected-files-check.sh +91 -0
- package/scripts/affected-files-check.test.sh +80 -0
- package/scripts/bootstrap-create.mjs +393 -0
- package/scripts/bootstrap-validate.mjs +36 -2
- package/scripts/calibration.mjs +116 -0
- package/scripts/check-devdocs-freshness.sh +9 -4
- package/scripts/check-devdocs-freshness.test.sh +11 -1
- package/scripts/check-spec-markers.sh +3 -0
- package/scripts/check-spec-size.sh +29 -11
- package/scripts/check-spec-size.test.sh +27 -4
- package/scripts/ci-local/lib.mjs +8 -1
- package/scripts/ci-local/parallelism.test.mjs +27 -0
- package/scripts/ci-local/run.mjs +3 -3
- package/scripts/ci-local/scoping.mjs +82 -0
- package/scripts/ci-local.test.sh +1 -1
- package/scripts/fixtures/symbol-index/other/sample.rb +3 -0
- package/scripts/fixtures/symbol-index/py/pkg/__init__.py +1 -0
- package/scripts/fixtures/symbol-index/py/pkg/a.py +5 -0
- package/scripts/fixtures/symbol-index/py/pkg/b.py +14 -0
- package/scripts/fixtures/symbol-index/py/pkg/c.py +1 -0
- package/scripts/fixtures/symbol-index/py/sample.py +41 -0
- package/scripts/fixtures/symbol-index/ts/sample.ts +13 -0
- package/scripts/fixtures/symbol-move/gen_big.py +201 -0
- package/scripts/fixtures/symbol-move-ts/gen_big.mjs +56 -0
- package/scripts/forge-root.test.sh +1 -1
- package/scripts/hotspots.sh +100 -0
- package/scripts/hotspots.test.sh +101 -0
- package/scripts/issue-create.sh +197 -0
- package/scripts/issue-create.test.sh +166 -0
- package/scripts/maintenance-scan.sh +185 -0
- package/scripts/maintenance-scan.test.sh +89 -0
- package/scripts/milestone-drift.sh +206 -0
- package/scripts/milestone-drift.test.sh +120 -0
- package/scripts/refactor-verify.sh +368 -0
- package/scripts/refactor-verify.test.sh +202 -0
- package/scripts/structure-delta.sh +10 -5
- package/scripts/structure-delta.test.sh +3 -2
- package/scripts/symbol-index.mjs +253 -0
- package/scripts/symbol-index.py +354 -0
- package/scripts/symbol-index.test.sh +119 -0
- package/scripts/symbol-move-ts.test.sh +161 -0
- package/scripts/symbol-move.mjs +379 -0
- package/scripts/symbol-move.py +383 -0
- package/scripts/symbol-move.test.sh +168 -0
- package/templates/bootstrap/interview.md +34 -0
- package/templates/bootstrap/issue-body.md +42 -0
- package/templates/bootstrap/needs-human-issue.md +45 -0
- package/templates/bootstrap/stack-profiles.md +34 -0
- 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}
|