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.
@@ -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-3 text-white">
21
- <img src="/logo.svg" alt="Logo" className="h-8" />
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
- <button
62
- className="flex items-center justify-center px-4 py-2 rounded-full text-slate-300 text-sm font-medium transition-colors"
63
- onMouseEnter={(e) => e.currentTarget.style.background = 'var(--color-surface-highlight)'}
64
- onMouseLeave={(e) => e.currentTarget.style.background = 'transparent'}
65
- >
66
- <Icon name="settings" size={18} className="mr-2" />
67
- Settings
68
- </button>
69
- </div>
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
- <button className="flex-1 py-3 px-4 rounded-lg text-white text-sm font-bold transition-colors flex items-center justify-center gap-2"
201
- style={{ background: 'var(--color-primary)' }}
202
- >
203
- <Icon name="download" size={18} />
204
- Export Rules PDF
205
- </button>
206
- <button className="p-3 rounded-lg text-slate-300 transition-colors"
207
- style={{ background: 'rgba(255,255,255,0.05)' }}
208
- >
209
- <Icon name="settings" size={20} />
210
- </button>
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
- <button className="text-xs font-medium" style={{ color: 'var(--color-primary)' }}>
55
- View All
56
- </button>
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="relative inline-block"
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. Supersedes docs/index.html with a thin redirect 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. 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
- `docs/index.html` overview.
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/index.html`) — for visual continuity with
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
- `docs/index.html` `:root`: `--accent: #2471a3` and the node colors (`--artifact-*`, `--gate-*`,
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 — Supersede `docs/index.html` (one release)
95
- Turn `docs/index.html` into a **thin redirect** to `docs/sdlc-site/` (e.g. a `<meta http-equiv="refresh">`
96
- + a one-line link), and **note in the report** that the hand-maintained overview is superseded by the
97
- generated site for this release. This generalizes the standing rule that feature work hand-updates
98
- `docs/index.html`: the overview site now **regenerates** instead.
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 `docs/index.html` now
108
- redirects to the generated site. Never touches any epic state.
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** (`docs/index.html` `:root`): `--accent: #2471a3`, and carry the node-class
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