yadflow 2.12.0 → 2.13.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/CHANGELOG.md CHANGED
@@ -1,14 +1,9 @@
1
- # [2.12.0](https://github.com/abdelrahmannasr/yadflow/compare/v2.11.1...v2.12.0) (2026-06-16)
2
-
3
-
4
- ### Bug Fixes
5
-
6
- * **checks:** harden spec-link + gitlab gate templates ([#69](https://github.com/abdelrahmannasr/yadflow/issues/69)) ([42f3949](https://github.com/abdelrahmannasr/yadflow/commit/42f3949841095624db03cb17f85db3138be8b93b))
1
+ # [2.13.0](https://github.com/abdelrahmannasr/yadflow/compare/v2.12.0...v2.13.0) (2026-06-16)
7
2
 
8
3
 
9
4
  ### Features
10
5
 
11
- * **docs:** pipeline-shaped overview canvas + collapsible panels + content refresh ([#70](https://github.com/abdelrahmannasr/yadflow/issues/70)) ([da47b80](https://github.com/abdelrahmannasr/yadflow/commit/da47b8050ccd7aa1919bf4b364298a90cdd56012))
6
+ * **docs:** make the report the main documentation, mount the SPA under /app/ ([#71](https://github.com/abdelrahmannasr/yadflow/issues/71)) ([1993e4d](https://github.com/abdelrahmannasr/yadflow/commit/1993e4dc282df281474ca1923acd52dbd1262dcb))
12
7
 
13
8
  # [2.2.0](https://github.com/abdelrahmannasr/yadflow/compare/v2.1.0...v2.2.0) (2026-06-14)
14
9
 
package/cli/docs.mjs CHANGED
@@ -43,11 +43,12 @@ export function deployTargetFromHub(hub = {}) {
43
43
  }
44
44
 
45
45
  // The Vite `base` for one site: join the project base path (from docs.json) with the per-site
46
- // subpath. Per-epic sites nest under epics/<id>/; the overview is the Pages root. Always a
46
+ // subpath. The overview SPA mounts under `app/` so the hand-maintained report.html can own the
47
+ // Pages root (`<base>/`) as the main documentation; per-epic sites nest under epics/<id>/. Always a
47
48
  // leading+trailing slash so it works as a Vite base and a router basename.
48
49
  export function siteBasePath(docs = {}, { epic, overview } = {}) {
49
50
  const root = (docs.basePath || '/').replace(/\/+$/, '') || '';
50
- const sub = overview ? '' : epic ? `/epics/${epic}` : '';
51
+ const sub = overview ? '/app' : epic ? `/epics/${epic}` : '';
51
52
  const joined = `${root}${sub}`.replace(/\/+/g, '/');
52
53
  return joined ? `${joined.replace(/\/$/, '')}/` : '/';
53
54
  }
@@ -113,12 +114,13 @@ export function docsStale(manifest, { artifactHash, repoHeads = {}, templateVers
113
114
 
114
115
  // ---- pure: the Pages CI workflow (committed by `yad docs sync --wire`) ---------------------------
115
116
  // GitHub Actions deploy-pages, or a GitLab `pages` job. Both assemble a single `public/` tree: the
116
- // overview at the root and every per-epic site under `epics/<id>/` matching siteBasePath's nesting
117
- // (overview at `<base>/`, epics at `<base>/epics/EP-<slug>/`). A concurrency group prevents the
117
+ // hand-maintained report.html owns the root (`<base>/` the main documentation), the overview SPA
118
+ // mounts under `app/`, and every per-epic site nests under `epics/<id>/` matching siteBasePath
119
+ // (overview at `<base>/app/`, epics at `<base>/epics/EP-<slug>/`). A concurrency group prevents the
118
120
  // deploy from retriggering. The shared shell script keeps the two platforms byte-for-byte aligned.
119
121
  const BUILD_PUBLIC = [
120
122
  'mkdir -p public',
121
- 'if [ -d docs/sdlc-site ]; then (cd docs/sdlc-site && npm ci && npm run build) && cp -r docs/sdlc-site/dist/. public/; fi',
123
+ 'if [ -d docs/sdlc-site ]; then (cd docs/sdlc-site && npm ci && npm run build) && mkdir -p public/app && cp -r docs/sdlc-site/dist/. public/app/ && cp docs/sdlc-site/public/report.html public/index.html && cp docs/sdlc-site/public/report.html public/report.html; fi',
122
124
  'for d in epics/*/docs-site; do [ -d "$d" ] || continue; id=$(basename "$(dirname "$d")"); (cd "$d" && npm ci && npm run build) && mkdir -p "public/epics/$id" && cp -r "$d/dist/." "public/epics/$id/"; done',
123
125
  ];
124
126
  export function pagesWorkflow(platform) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "yadflow",
3
- "version": "2.12.0",
3
+ "version": "2.13.0",
4
4
  "description": "Yadflow — the gated, team, multi-repo SDLC: author → review → build with a PR-driven review gate and a zero-dependency `yad` CLI (setup, gate, commit, open-pr, ship, repo). A BMAD module + 30 yad-* skills.",
5
5
  "type": "module",
6
6
  "author": "AbdelRahman Nasr",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: yad-docs-overview
3
- description: 'Generates the project-level SDLC-overview interactive site — the same React/Vite/Tailwind shell as the per-epic docs — showing every yadflow stage from setup → ship: the pipeline as a flow canvas, each skill/gate as a flow step, the durable .sdlc state objects as system components, and the lenses as stakeholder roles. Themed with yadflow''s own brand palette for continuity, built from config.yaml + module-help.csv + the overview diagram. Folds the legacy hand-maintained docs/index.html report into the site as report.html (linked from the nav) and deploys via `yad docs deploy --overview`. This is project documentation, not a gated state — it never touches any epic''s state or approvals. Use when the user says "generate the overview site", "build the SDLC overview docs", or after the pipeline (module-help.csv / config.yaml / skill count) changes.'
3
+ description: 'Generates the project-level SDLC-overview interactive site — the same React/Vite/Tailwind shell as the per-epic docs — showing every yadflow stage from setup → ship: the pipeline as a flow canvas, each skill/gate as a flow step, the durable .sdlc state objects as system components, and the lenses as stakeholder roles. Themed with yadflow''s own brand palette for continuity, built from config.yaml + module-help.csv + the overview diagram. The hand-maintained report is the MAIN documentation at the Pages root (report.html, also served as index.html); the interactive SPA mounts under `app/` and is reached from it (and links back). Deploys via `yad docs deploy --overview`. This is project documentation, not a gated state — it never touches any epic''s state or approvals. Use when the user says "generate the overview site", "build the SDLC overview docs", or after the pipeline (module-help.csv / config.yaml / skill count) changes.'
4
4
  ---
5
5
 
6
6
  # SDLC — Author the Overview Site (project-level, the pipeline as a living map)
@@ -8,8 +8,10 @@ description: 'Generates the project-level SDLC-overview interactive site — the
8
8
  **Goal:** Render the **whole yadflow pipeline** — every stage from setup → ship — as an interactive site,
9
9
  reusing the same shell as the per-epic docs (`skills/yad-docs/templates/app/`). Where `yad-docs`
10
10
  animates one epic's flows, this animates the **workflow itself**: the front gates, the build half, the
11
- automation dial, the setup connectors. It is the regenerable successor to the hand-maintained
12
- overview report, which is folded into this site as `public/report.html`.
11
+ automation dial, the setup connectors. The hand-maintained overview report stays the **main
12
+ documentation at the Pages root** (`<base>/`, served from `public/report.html` and `public/index.html`);
13
+ this interactive SPA mounts under `<base>/app/` and is reached from the report — the report links
14
+ forward to `app/`, the app links back to the report root.
13
15
 
14
16
  This is **project documentation, not a gated state** — there is no epic, no `state.json`, no approvals.
15
17
  It only reads the pipeline definition and writes a project-level site. When a docs target is connected
@@ -70,7 +72,8 @@ determinism rules as `yad-docs`: stable-ID sort by skill pipeline order / phase,
70
72
  timestamps in the data files), theme the `:root` of `index.css` from **yadflow's brand palette** — the
71
73
  the legacy report's `:root`: `--accent: #2471a3` and the node colors (`--artifact-*`, `--gate-*`,
72
74
  `--earns-*`, `--locked-*`, `--sentinel-*`) — and substitute the Vite base from `.sdlc/docs.json`
73
- `basePath` (the overview sits at the base root, e.g. `/<repo>/`).
75
+ `basePath` **with `app/` appended** (the SPA mounts under `<base>/app/`, e.g. `/<repo>/app/`, so the
76
+ report can own the root). `siteBasePath(docs, { overview: true })` in `cli/docs.mjs` computes this.
74
77
 
75
78
  ### Step 4 — Write the overview build manifest (the staleness baseline)
76
79
  Write `docs/sdlc-site/.docs-build.json` — `yad-docs-sync` compares against it:
@@ -91,13 +94,16 @@ doc-shell upgrade triggers a rebuild). `skillCount` rides along in the manifest
91
94
  — it is **not** a separate hash input, since `module-help.csv` already moves whenever the skill set does.
92
95
  Not per-epic artifacts/repo heads.
93
96
 
94
- ### Step 5 — Fold the legacy report into the site
95
- Relocate the hand-maintained static report into the generated site as `docs/sdlc-site/public/report.html`
96
- (Vite copies `public/` verbatim into `dist/`, so it publishes alongside the app at `<base>/report.html`),
97
- and link it from the app nav (a "Full report" link in `TopNavBar`). The interactive overview becomes the
98
- primary documentation and the legacy report rides along as its detailed companion no orphaned
99
- `docs/index.html` at the repo root. This generalizes the standing rule that feature work hand-updates the
100
- report: the overview site now **regenerates** instead.
97
+ ### Step 5 — The report is the main documentation; the SPA is reached from it
98
+ The hand-maintained static report lives at `docs/sdlc-site/public/report.html` and is the **primary
99
+ documentation at the Pages root**. The deploy (`BUILD_PUBLIC` in `cli/docs.mjs`, mirrored by the Pages CI
100
+ workflow) copies it to **both** `public/index.html` (the landing `<base>/`) and `public/report.html`
101
+ (so the `<base>/report.html` URL keeps working), and copies the built SPA into `public/app/`. Wire the
102
+ two cross-links: the report links **forward** to the interactive map with a relative `app/` href (its
103
+ hero CTA); the app's `TopNavBar` "Full report" link points **back** to the report root
104
+ (`import.meta.env.BASE_URL` with the trailing `app/` stripped). No orphaned `docs/index.html` at the repo
105
+ root. This generalizes the standing rule that feature work hand-updates the report: the overview SPA now
106
+ **regenerates** instead, while the report stays the front door.
101
107
 
102
108
  ### Step 6 — Build / deploy (`action`)
103
109
  - `action: generate` (default) — generate source + manifest; stop.
@@ -106,8 +112,9 @@ report: the overview site now **regenerates** instead.
106
112
 
107
113
  ### Step 7 — Stop. Report (no gate, no epic)
108
114
  Report: the site path (`docs/sdlc-site/`), the data files produced, that the theme is the yadflow brand
109
- palette, the deploy URL or "build-only", the staleness baseline, and that the legacy report is folded in
110
- at `public/report.html` (linked from the nav). Never touches any epic state.
115
+ palette, the deploy URL or "build-only", the staleness baseline, and that the report is the main
116
+ documentation at `<base>/` (`public/index.html` + `public/report.html`) with the interactive SPA mounted
117
+ under `<base>/app/` and cross-linked. Never touches any epic state.
111
118
 
112
119
  ## Hard rules
113
120