Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,8 @@ jobs:
test -f "$DIR/SKILL.md" || { echo "::error::SKILL.md not installed"; exit 1; }
test -f "$DIR/scripts/construct.mjs" || { echo "::error::engine not bundled — skills add dropped scripts/"; exit 1; }
test -d "$DIR/references" || { echo "::error::references/ not bundled"; exit 1; }
test -f "$DIR/docker-compose.yml" || { echo "::error::docker-compose.yml not bundled — semantic stack inoperable as-installed"; exit 1; }
test -f "$DIR/docker/searxng/settings.yml" || { echo "::error::searxng settings not bundled — SearXNG mount would fail"; exit 1; }
node "$DIR/scripts/construct.mjs" --help > /dev/null || { echo "::error::installed engine does not run"; exit 1; }
echo "install-bundle: skill installed whole and the engine runs."

Expand Down
2 changes: 1 addition & 1 deletion .releaserc.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
[
"@semantic-release/git",
{
"assets": ["package.json", "src/types.ts", "skills/construct/SKILL.md", "CHANGELOG.md", "scripts/construct.mjs", "skills/construct/scripts/construct.mjs"],
"assets": ["package.json", "src/types.ts", "skills/construct/SKILL.md", "CHANGELOG.md", "scripts/construct.mjs", "skills/construct/scripts/construct.mjs", "skills/construct/docker-compose.yml", "skills/construct/docker/searxng/settings.yml"],
"message": "chore(release): ${nextRelease.version} [skip ci]\n\n${nextRelease.notes}"
}
],
Expand Down
20 changes: 17 additions & 3 deletions DOCUMENTATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,16 +15,30 @@ CI verifies the committed bundle is reproducible (`pnpm run check:build`).
## Pipeline

```
init → (interview, agent-driven) → research → analyze → render → check → review → verify
brief.json evidence/ gap report SRD tree + SRD.json report claim-support build referee
+ BUILD-PLAN.json
init → [brainstorm] → (interview, agent-driven) → research → analyze → render → check → review → verify
brief.json brainstorm.json evidence/ gap report SRD tree + SRD.json report claim-support build referee
+ BUILD-PLAN.json
```

### `init`
Writes a `brief.json` skeleton (`src/brief.ts`). The brief is a passive schema
store — the analog of reconstruct's `plan.json`. The interview that fills it is
agent-driven (`references/interview-playbook.md`).

### `brainstorm` (`src/brainstorm.ts`)
The optional DIVERGENT step before the convergent interview. `brainstorm`
scaffolds `brainstorm.json` + `BRAINSTORM.md` — a board of `{ id, angle, title,
status, target? }` ideas across six angles (reframe/segment/feature/
differentiator/anti-goal/wildcard). The agent generates ideas WITH the user and
marks each `proposed|kept|parked|rejected`. `brainstorm --merge` folds every
**kept** idea into the brief by its `target` (featureWishlist/competitors/goals/
nonGoals/candidateTech/openQuestions) and every **parked** idea into
`openQuestions` (a gate-blocking 🧠). `mergeBrainstorm` is pure and idempotent —
an idea carries `mergedAt` once folded and is skipped forever after; a
goals↔nonGoals conflict or a targetless kept idea warns and is left unstamped so
it can be resolved and re-merged. `check` warns (never gates) while any idea is
still `proposed`.

### `research` (`src/research/`)
Runs the selected angles concurrently (`registry.ts::runAngles`), optionally
rescoring by semantic similarity, then assigns stable `[E#]` ids and writes the
Expand Down
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,9 @@ npx skills add maxgfr/construct

```
node scripts/construct.mjs init --idea "a self-hosted read-it-later app" --out ./readpile
# optional: diverge first, then fold kept ideas into the brief
node scripts/construct.mjs brainstorm --out ./readpile # scaffold BRAINSTORM.md
node scripts/construct.mjs brainstorm --out ./readpile --merge # kept → brief.json
# …fill ./readpile/brief.json via the interview…
node scripts/construct.mjs research --out ./readpile --angles market,oss,tech
node scripts/construct.mjs analyze --out ./readpile # what's thin? drill it
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@
"lint:fix": "biome check --write .",
"format": "biome format --write .",
"verify:bundle": "node scripts/verify-skill-bundle.mjs",
"check:build": "tsup && node scripts/copy-bundle.mjs && git diff --exit-code -- scripts/construct.mjs skills/construct/scripts/construct.mjs && node scripts/verify-skill-bundle.mjs",
"check:build": "tsup && node scripts/copy-bundle.mjs && git diff --exit-code -- scripts/construct.mjs skills/construct/scripts/construct.mjs skills/construct/docker-compose.yml skills/construct/docker/searxng/settings.yml && node scripts/verify-skill-bundle.mjs",
"demo": "rm -rf /tmp/construct-demo && mkdir -p /tmp/construct-demo/evidence && cp tests/fixtures/sample-brief.json /tmp/construct-demo/brief.json && cp tests/fixtures/sample-evidence.json /tmp/construct-demo/evidence/evidence.json && node scripts/construct.mjs render --out /tmp/construct-demo --level complex --merge && node scripts/construct.mjs check --out /tmp/construct-demo",
"release": "semantic-release"
},
Expand Down
Loading