yadflow 2.7.0 → 2.9.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 +2 -8
- package/README.md +8 -4
- package/bin/yad.mjs +15 -1
- package/cli/platform.mjs +1 -1
- package/cli/roster.mjs +164 -0
- package/cli/setup.mjs +128 -2
- package/package.json +3 -4
- package/skills/sdlc/module-help.csv +1 -1
- package/skills/yad-connect-repos/SKILL.md +4 -0
- package/skills/yad-connect-repos/references/hub-config.md +3 -1
- package/skills/yad-docs/references/data-mapping.md +22 -0
- package/skills/yad-docs/templates/app/index.html +1 -1
- package/skills/yad-docs/templates/app/public/yadflow-icon.png +0 -0
- package/skills/yad-docs/templates/app/src/App.tsx +0 -8
- package/skills/yad-docs/templates/app/src/components/Canvas/SystemComponent.tsx +2 -2
- package/skills/yad-docs/templates/app/src/components/DetailPanel/RightPanel.tsx +14 -13
- package/skills/yad-docs/templates/app/src/components/Navigation/TopNavBar.tsx +13 -29
- package/skills/yad-docs/templates/app/src/components/Reference/RulesLegendPanel.tsx +16 -11
- package/skills/yad-docs/templates/app/src/components/Sidebar/PathSelector.tsx +6 -3
- package/skills/yad-docs/templates/app/src/components/shared/Tooltip.tsx +3 -2
- package/skills/yad-docs-overview/SKILL.md +13 -11
- package/skills/yad-docs-overview/references/pipeline-model.md +1 -1
- package/skills/yad-hub-bridge/references/login-roster.md +1 -0
- package/docs/index.html +0 -1323
- package/skills/yad-docs/templates/app/src/components/Auth/LoginPage.tsx +0 -101
- package/skills/yad-docs/templates/app/src/store/useAuthStore.ts +0 -42
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { useNavigate } from 'react-router-dom';
|
|
2
2
|
import { Icon } from '../shared/Icon';
|
|
3
|
+
import { Tooltip } from '../shared/Tooltip';
|
|
3
4
|
import { useFlowStore } from '../../store/useFlowStore';
|
|
4
|
-
import { useAuthStore } from '../../store/useAuthStore';
|
|
5
5
|
|
|
6
6
|
export function TopNavBar() {
|
|
7
7
|
const navigate = useNavigate();
|
|
8
8
|
const toggleReferencePanel = useFlowStore((s) => s.toggleReferencePanel);
|
|
9
9
|
const toggleCommandPalette = useFlowStore((s) => s.toggleCommandPalette);
|
|
10
|
-
const logout = useAuthStore((s) => s.logout);
|
|
11
10
|
|
|
12
11
|
return (
|
|
13
12
|
<header className="flex-none flex items-center justify-between whitespace-nowrap border-b px-6 py-3 z-20"
|
|
@@ -17,8 +16,9 @@ export function TopNavBar() {
|
|
|
17
16
|
}}
|
|
18
17
|
>
|
|
19
18
|
<div className="flex items-center gap-8">
|
|
20
|
-
<div className="flex items-center gap-
|
|
21
|
-
<img src=
|
|
19
|
+
<div className="flex items-center gap-2 text-white">
|
|
20
|
+
<img src={`${import.meta.env.BASE_URL}yadflow-icon.png`} alt="yadflow" className="h-9 w-9 object-contain" />
|
|
21
|
+
<span className="text-lg font-bold font-display text-white tracking-tight">yadflow</span>
|
|
22
22
|
</div>
|
|
23
23
|
<button
|
|
24
24
|
onClick={toggleCommandPalette}
|
|
@@ -58,31 +58,15 @@ export function TopNavBar() {
|
|
|
58
58
|
<Icon name="description" size={18} className="mr-2" />
|
|
59
59
|
Docs
|
|
60
60
|
</button>
|
|
61
|
-
<
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
<div className="h-6 w-px mx-2" style={{ background: 'var(--color-surface-highlight)' }} />
|
|
71
|
-
<div className="flex items-center gap-3">
|
|
72
|
-
<div className="text-right hidden sm:block">
|
|
73
|
-
<p className="text-sm font-medium text-white">AbdelRahman Nasr</p>
|
|
74
|
-
<p className="text-xs text-slate-400">Admin</p>
|
|
75
|
-
</div>
|
|
76
|
-
<button
|
|
77
|
-
onClick={logout}
|
|
78
|
-
title="Sign out"
|
|
79
|
-
className="h-10 w-10 rounded-full ring-2 ring-[#2f2938] flex items-center justify-center cursor-pointer transition-opacity hover:opacity-80"
|
|
80
|
-
style={{
|
|
81
|
-
background: 'linear-gradient(135deg, var(--color-primary) 0%, #a855f7 100%)',
|
|
82
|
-
}}
|
|
83
|
-
>
|
|
84
|
-
<Icon name="logout" size={20} className="text-white" />
|
|
85
|
-
</button>
|
|
61
|
+
<Tooltip content="Coming soon">
|
|
62
|
+
<button
|
|
63
|
+
disabled
|
|
64
|
+
className="flex items-center justify-center px-4 py-2 rounded-full text-slate-300 text-sm font-medium opacity-50 cursor-not-allowed"
|
|
65
|
+
>
|
|
66
|
+
<Icon name="settings" size={18} className="mr-2" />
|
|
67
|
+
Settings
|
|
68
|
+
</button>
|
|
69
|
+
</Tooltip>
|
|
86
70
|
</div>
|
|
87
71
|
</div>
|
|
88
72
|
</header>
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { motion, AnimatePresence } from 'framer-motion';
|
|
2
2
|
import { useFlowStore } from '../../store/useFlowStore';
|
|
3
3
|
import { Icon } from '../shared/Icon';
|
|
4
|
+
import { Tooltip } from '../shared/Tooltip';
|
|
4
5
|
import { MESSAGE_COLORS } from '../../data/types';
|
|
5
6
|
import { MESSAGE_TYPE_ICONS } from '../../utils/iconMap';
|
|
6
7
|
import { StakeholderToggle } from './StakeholderToggle';
|
|
@@ -197,17 +198,21 @@ export function RulesLegendPanel() {
|
|
|
197
198
|
background: 'var(--color-surface-dark)',
|
|
198
199
|
}}
|
|
199
200
|
>
|
|
200
|
-
<
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
>
|
|
209
|
-
<
|
|
210
|
-
|
|
201
|
+
<Tooltip content="Coming soon" className="flex-1">
|
|
202
|
+
<button disabled className="w-full py-3 px-4 rounded-lg text-white text-sm font-bold flex items-center justify-center gap-2 opacity-50 cursor-not-allowed"
|
|
203
|
+
style={{ background: 'var(--color-primary)' }}
|
|
204
|
+
>
|
|
205
|
+
<Icon name="download" size={18} />
|
|
206
|
+
Export Rules PDF
|
|
207
|
+
</button>
|
|
208
|
+
</Tooltip>
|
|
209
|
+
<Tooltip content="Coming soon">
|
|
210
|
+
<button disabled className="p-3 rounded-lg text-slate-300 opacity-50 cursor-not-allowed"
|
|
211
|
+
style={{ background: 'rgba(255,255,255,0.05)' }}
|
|
212
|
+
>
|
|
213
|
+
<Icon name="settings" size={20} />
|
|
214
|
+
</button>
|
|
215
|
+
</Tooltip>
|
|
211
216
|
</div>
|
|
212
217
|
</motion.div>
|
|
213
218
|
</>
|
|
@@ -5,6 +5,7 @@ import { useFlowStore } from '../../store/useFlowStore';
|
|
|
5
5
|
import { PATHS } from '../../data/paths';
|
|
6
6
|
import type { PathCategory } from '../../data/types';
|
|
7
7
|
import { Icon } from '../shared/Icon';
|
|
8
|
+
import { Tooltip } from '../shared/Tooltip';
|
|
8
9
|
import { CATEGORY_ICONS } from '../../utils/iconMap';
|
|
9
10
|
|
|
10
11
|
const CATEGORY_LABELS: Record<PathCategory, string> = {
|
|
@@ -51,9 +52,11 @@ export const PathSelector = () => {
|
|
|
51
52
|
<h3 className="text-slate-100 text-sm font-bold font-display uppercase tracking-wider">
|
|
52
53
|
Path Selection
|
|
53
54
|
</h3>
|
|
54
|
-
<
|
|
55
|
-
|
|
56
|
-
|
|
55
|
+
<Tooltip content="Coming soon">
|
|
56
|
+
<button disabled className="text-xs font-medium opacity-50 cursor-not-allowed" style={{ color: 'var(--color-primary)' }}>
|
|
57
|
+
View All
|
|
58
|
+
</button>
|
|
59
|
+
</Tooltip>
|
|
57
60
|
</div>
|
|
58
61
|
|
|
59
62
|
{/* Search */}
|
|
@@ -4,14 +4,15 @@ import { motion, AnimatePresence } from "framer-motion";
|
|
|
4
4
|
interface TooltipProps {
|
|
5
5
|
content: string;
|
|
6
6
|
children: React.ReactNode;
|
|
7
|
+
className?: string;
|
|
7
8
|
}
|
|
8
9
|
|
|
9
|
-
export const Tooltip: React.FC<TooltipProps> = ({ content, children }) => {
|
|
10
|
+
export const Tooltip: React.FC<TooltipProps> = ({ content, children, className = "" }) => {
|
|
10
11
|
const [show, setShow] = useState(false);
|
|
11
12
|
|
|
12
13
|
return (
|
|
13
14
|
<div
|
|
14
|
-
className=
|
|
15
|
+
className={`relative inline-block ${className}`}
|
|
15
16
|
onMouseEnter={() => setShow(true)}
|
|
16
17
|
onMouseLeave={() => setShow(false)}
|
|
17
18
|
onFocus={() => setShow(true)}
|
|
@@ -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.
|
|
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.'
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# SDLC — Author the Overview Site (project-level, the pipeline as a living map)
|
|
@@ -9,7 +9,7 @@ description: 'Generates the project-level SDLC-overview interactive site — the
|
|
|
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
11
|
automation dial, the setup connectors. It is the regenerable successor to the hand-maintained
|
|
12
|
-
`
|
|
12
|
+
overview report, which is folded into this site as `public/report.html`.
|
|
13
13
|
|
|
14
14
|
This is **project documentation, not a gated state** — there is no epic, no `state.json`, no approvals.
|
|
15
15
|
It only reads the pipeline definition and writes a project-level site. When a docs target is connected
|
|
@@ -22,7 +22,7 @@ It only reads the pipeline definition and writes a project-level site. When a do
|
|
|
22
22
|
the generated **source is committed**. The overview build manifest is `docs/sdlc-site/.docs-build.json`.
|
|
23
23
|
- The shell template is `skills/yad-docs/templates/app/` — copied **verbatim**, themed only in the
|
|
24
24
|
`:root` of `index.css`. Generated data satisfies `src/data/types.ts`.
|
|
25
|
-
- Theme: **yadflow's own brand palette** (the `:root` of `docs/
|
|
25
|
+
- Theme: **yadflow's own brand palette** (the `:root` of the legacy report, now `docs/sdlc-site/public/report.html`) — for visual continuity with
|
|
26
26
|
the existing overview, not an epic's design tokens.
|
|
27
27
|
- Speak in the configured `communication_language`; write documents in `document_output_language`.
|
|
28
28
|
|
|
@@ -68,7 +68,7 @@ Map the pipeline onto the same data structures `yad-docs` uses (concrete mapping
|
|
|
68
68
|
Copy the shell from `templates/app/` **verbatim**, generate `src/data/*.ts` deterministically (same
|
|
69
69
|
determinism rules as `yad-docs`: stable-ID sort by skill pipeline order / phase, fixed key order, no
|
|
70
70
|
timestamps in the data files), theme the `:root` of `index.css` from **yadflow's brand palette** — the
|
|
71
|
-
|
|
71
|
+
the legacy report's `:root`: `--accent: #2471a3` and the node colors (`--artifact-*`, `--gate-*`,
|
|
72
72
|
`--earns-*`, `--locked-*`, `--sentinel-*`) — and substitute the Vite base from `.sdlc/docs.json`
|
|
73
73
|
`basePath` (the overview sits at the base root, e.g. `/<repo>/`).
|
|
74
74
|
|
|
@@ -91,11 +91,13 @@ doc-shell upgrade triggers a rebuild). `skillCount` rides along in the manifest
|
|
|
91
91
|
— it is **not** a separate hash input, since `module-help.csv` already moves whenever the skill set does.
|
|
92
92
|
Not per-epic artifacts/repo heads.
|
|
93
93
|
|
|
94
|
-
### Step 5 —
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
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.
|
|
99
101
|
|
|
100
102
|
### Step 6 — Build / deploy (`action`)
|
|
101
103
|
- `action: generate` (default) — generate source + manifest; stop.
|
|
@@ -104,8 +106,8 @@ generated site for this release. This generalizes the standing rule that feature
|
|
|
104
106
|
|
|
105
107
|
### Step 7 — Stop. Report (no gate, no epic)
|
|
106
108
|
Report: the site path (`docs/sdlc-site/`), the data files produced, that the theme is the yadflow brand
|
|
107
|
-
palette, the deploy URL or "build-only", the staleness baseline, and that
|
|
108
|
-
|
|
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.
|
|
109
111
|
|
|
110
112
|
## Hard rules
|
|
111
113
|
|
|
@@ -97,6 +97,6 @@ The eight yadflow lenses, each to its relevant phase sections + paths:
|
|
|
97
97
|
## Determinism + theme
|
|
98
98
|
Same discipline as `yad-docs`: stable-sort steps by phase then pipeline order, fixed key order, **no
|
|
99
99
|
timestamps** in `src/data/*.ts` (build time lives only in `.docs-build.json`). Theme the `:root` from
|
|
100
|
-
**yadflow's brand palette** (
|
|
100
|
+
**yadflow's brand palette** (the legacy report's `:root`): `--accent: #2471a3`, and carry the node-class
|
|
101
101
|
colors through to step/path colors — `--artifact-* #b7950b`, `--gate-* #ca6f1e`, `--earns-* #2471a3`,
|
|
102
102
|
`--locked-* #566573`, `--sentinel-* #1e8449` — so the canvas reads like the existing diagram.
|
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
The roster lives in `.sdlc/hub.json` (`roster: [...]`) and is the only thing that turns a platform
|
|
4
4
|
**login** into an SDLC **name + role** for the ledger. Schema and the no-tokens rule are documented once
|
|
5
5
|
in `../../yad-connect-repos/references/hub-config.md`; this file covers how the bridge *uses* it.
|
|
6
|
+
It is populated/edited any time with the `yad roster` CLI command (see that reference).
|
|
6
7
|
|
|
7
8
|
## Entry
|
|
8
9
|
|