@caddis/cli 0.4.43 → 0.4.45
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/bundles/antigravity-plugin/plugin.json +1 -1
- package/bundles/antigravity-plugin/scripts/caddis_file_lock.py +48 -7
- package/bundles/antigravity-plugin/scripts/caddis_lanes.py +27 -0
- package/bundles/antigravity-plugin/scripts/caddis_todo.py +7 -5
- package/bundles/antigravity-plugin/scripts/claude-oss.ps1 +15 -3
- package/bundles/antigravity-plugin/scripts/claude-oss.sh +12 -1
- package/bundles/antigravity-plugin/skills/_registry.md +5 -4
- package/bundles/antigravity-plugin/skills/adopt-app/SKILL.md +6 -1
- package/bundles/antigravity-plugin/skills/advisory-hub/SKILL.md +7 -1
- package/bundles/antigravity-plugin/skills/decide/SKILL.md +1 -1
- package/bundles/antigravity-plugin/skills/flow-studio/README.md +53 -0
- package/bundles/antigravity-plugin/skills/flow-studio/SKILL.md +103 -0
- package/bundles/antigravity-plugin/skills/flow-studio/examples/README.md +11 -0
- package/bundles/antigravity-plugin/skills/flow-studio/examples/hostile.json +1783 -0
- package/bundles/antigravity-plugin/skills/flow-studio/examples/lineage.json +1778 -0
- package/bundles/antigravity-plugin/skills/flow-studio/model.schema.json +123 -0
- package/bundles/antigravity-plugin/skills/flow-studio/package.json +11 -0
- package/bundles/antigravity-plugin/skills/flow-studio/references/patterns.md +79 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/build-engine.mjs +55 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/build.mjs +37 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/check.mjs +388 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/build-engine.test.mjs +26 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/check-selftest.test.mjs +75 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/cli.test.mjs +64 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/embed.mjs +24 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/lib/embed.test.mjs +29 -0
- package/bundles/antigravity-plugin/skills/flow-studio/scripts/validate.mjs +38 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/chrome.ts +171 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/controls.ts +231 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/ctx.ts +118 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/engine.ts +142 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/inspector.ts +108 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/interact.ts +240 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/layout.test.ts +69 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/layout.ts +57 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/model.test.ts +107 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/model.ts +165 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/notes.ts +92 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/render.ts +155 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/routing.test.ts +13 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/routing.ts +11 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/rules.test.ts +88 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/rules.ts +35 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/stateCss.test.ts +66 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/stateCss.ts +44 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/styles.css +157 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/trace.test.ts +20 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/trace.ts +22 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/viewport.test.ts +55 -0
- package/bundles/antigravity-plugin/skills/flow-studio/src/viewport.ts +45 -0
- package/bundles/antigravity-plugin/skills/flow-studio/templates/engine.html +1744 -0
- package/bundles/antigravity-plugin/skills/flow-studio/templates/engine.shell.html +61 -0
- package/bundles/antigravity-plugin/skills/flow-studio/tsconfig.json +17 -0
- package/bundles/antigravity-plugin/skills/implement/SKILL.md +8 -0
- package/bundles/antigravity-plugin/skills/particle-art/SKILL.md +6 -1
- package/bundles/antigravity-plugin/skills/port-to-github/SKILL.md +6 -1
- package/bundles/antigravity-plugin/skills/tech-explainer/SKILL.md +5 -6
- package/bundles/antigravity-plugin-extras/plugin.json +1 -1
- package/bundles/antigravity-plugin-extras/skills/_registry.md +2 -0
- package/bundles/antigravity-plugin-extras/skills/adopt-rbac/SKILL.md +26 -0
- package/bundles/antigravity-plugin-extras/skills/case-management/SKILL.md +24 -0
- package/bundles/codex/.codex/skills/devops/adopt-app/SKILL.md +6 -1
- package/bundles/codex/.codex/skills/devops/port-to-github/SKILL.md +6 -1
- package/bundles/codex/.codex/skills/docs/tech-explainer/SKILL.md +5 -6
- package/bundles/codex/.codex/skills/frontend/flow-studio/README.md +53 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/SKILL.md +103 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/examples/README.md +11 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/examples/hostile.json +1783 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/examples/lineage.json +1778 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/model.schema.json +123 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/package.json +11 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/references/patterns.md +79 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/build-engine.mjs +55 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/build.mjs +37 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/check.mjs +388 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/build-engine.test.mjs +26 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/check-selftest.test.mjs +75 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/cli.test.mjs +64 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/embed.mjs +24 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/lib/embed.test.mjs +29 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/scripts/validate.mjs +38 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/chrome.ts +171 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/controls.ts +231 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/ctx.ts +118 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/engine.ts +142 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/inspector.ts +108 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/interact.ts +240 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/layout.test.ts +69 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/layout.ts +57 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/model.test.ts +107 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/model.ts +165 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/notes.ts +92 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/render.ts +155 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/routing.test.ts +13 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/routing.ts +11 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/rules.test.ts +88 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/rules.ts +35 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/stateCss.test.ts +66 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/stateCss.ts +44 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/styles.css +157 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/trace.test.ts +20 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/trace.ts +22 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/viewport.test.ts +55 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/src/viewport.ts +45 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/templates/engine.html +1744 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/templates/engine.shell.html +61 -0
- package/bundles/codex/.codex/skills/frontend/flow-studio/tsconfig.json +17 -0
- package/bundles/codex/.codex/skills/media/particle-art/SKILL.md +6 -1
- package/bundles/codex/.codex/skills/workflow/advisory-hub/SKILL.md +7 -1
- package/bundles/manifest.json +3 -3
- package/package.json +1 -1
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<!--
|
|
3
|
+
flow-studio page (generated). Do not edit this file by hand.
|
|
4
|
+
Source: .github/skills/frontend/flow-studio (src/*.ts, src/styles.css, templates/engine.shell.html).
|
|
5
|
+
Rebuild the engine: node --experimental-strip-types scripts/build-engine.mjs
|
|
6
|
+
Build a page: node --experimental-strip-types scripts/build.mjs model.json out.html
|
|
7
|
+
The model and the notes are JSON in the two script tags at the end of the body.
|
|
8
|
+
-->
|
|
9
|
+
<html lang="en">
|
|
10
|
+
<head>
|
|
11
|
+
<meta charset="utf-8">
|
|
12
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
13
|
+
<title>flow-studio</title>
|
|
14
|
+
<style id="state-css"></style>
|
|
15
|
+
<style>/*__CSS__*/</style>
|
|
16
|
+
</head>
|
|
17
|
+
<body>
|
|
18
|
+
<header class="top">
|
|
19
|
+
<span class="brand"><i></i>flow-studio</span>
|
|
20
|
+
<span class="spacer"></span>
|
|
21
|
+
<button id="notesBtn" type="button" aria-pressed="false">Implementation notes (N)</button>
|
|
22
|
+
<button id="theme" type="button" aria-label="Toggle light and dark">☀ / ☾</button>
|
|
23
|
+
</header>
|
|
24
|
+
<main>
|
|
25
|
+
<div class="titlerow"><h1 id="title"></h1><span class="readline" id="readat"></span></div>
|
|
26
|
+
<p class="help" id="help"></p>
|
|
27
|
+
|
|
28
|
+
<section class="summary"><div class="layerstrip" id="layerstrip" aria-label="Completeness by column"></div><div class="tiles" id="kpis" aria-label="Summary"></div></section>
|
|
29
|
+
|
|
30
|
+
<div class="toolbar">
|
|
31
|
+
<div class="seggrp" role="tablist" aria-label="View" id="modeSwitch"></div>
|
|
32
|
+
<input id="q" type="search" placeholder="Find a group or member… ( / )" aria-label="Find a group or member">
|
|
33
|
+
<span id="matchinfo" class="note" style="margin:0"></span>
|
|
34
|
+
</div>
|
|
35
|
+
|
|
36
|
+
<div class="workspace" id="workspace">
|
|
37
|
+
<section class="canvaswrap">
|
|
38
|
+
<div id="viewport" tabindex="0" role="application" aria-label="Flow canvas. Scroll to zoom, drag to pan. Keys: V select, H hand, plus and minus zoom, 0 fit, 1 actual size, F zoom to selection, arrows pan.">
|
|
39
|
+
<div id="world"><svg id="edges" aria-hidden="true"><defs><marker id="arr" viewBox="0 0 8 8" refX="7" refY="4" markerWidth="9" markerHeight="9" markerUnits="userSpaceOnUse" orient="0"><path d="M0 0 L8 4 L0 8 z" fill="context-stroke"/></marker></defs><g id="edgeLayer"></g></svg></div>
|
|
40
|
+
<div id="cols" aria-hidden="true"></div>
|
|
41
|
+
<div id="tools" role="toolbar" aria-label="Canvas controls" aria-orientation="vertical"></div>
|
|
42
|
+
<div id="zoomLabel" aria-hidden="true">100%</div>
|
|
43
|
+
</div>
|
|
44
|
+
<div class="keyline" id="legend" aria-label="Legend"></div>
|
|
45
|
+
<aside class="insp" id="inspector" aria-label="Inspector" aria-hidden="true"></aside>
|
|
46
|
+
</section>
|
|
47
|
+
</div>
|
|
48
|
+
<div id="live" class="sr" role="status" aria-live="polite"></div>
|
|
49
|
+
|
|
50
|
+
<div class="ledger" id="ledger"></div>
|
|
51
|
+
<details class="tableview"><summary>Table view</summary><table class="sources" id="tbl"></table></details>
|
|
52
|
+
<details class="spec" id="spec"><summary>Model reference (for the person or agent who builds this)</summary><div id="specbody"></div></details>
|
|
53
|
+
</main>
|
|
54
|
+
<footer id="footer"></footer>
|
|
55
|
+
<aside id="drawer" aria-label="Implementation notes"><h2>Implementation notes</h2><p class="note">Numbered markers on the page match these cards. Hover a card to find its place; click a marker to jump to its card.</p><div id="notelist"></div></aside>
|
|
56
|
+
|
|
57
|
+
<script type="application/json" id="flow-model">/*__MODEL__*/{}</script>
|
|
58
|
+
<script type="application/json" id="flow-notes">/*__NOTES__*/[]</script>
|
|
59
|
+
<script>/*__ENGINE__*/</script>
|
|
60
|
+
</body>
|
|
61
|
+
</html>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2023",
|
|
4
|
+
"lib": ["ES2023", "DOM"],
|
|
5
|
+
"module": "ESNext",
|
|
6
|
+
"moduleResolution": "bundler",
|
|
7
|
+
"strict": true,
|
|
8
|
+
"noUncheckedIndexedAccess": true,
|
|
9
|
+
"allowImportingTsExtensions": true,
|
|
10
|
+
"noEmit": true,
|
|
11
|
+
"skipLibCheck": true,
|
|
12
|
+
"isolatedModules": true,
|
|
13
|
+
"types": []
|
|
14
|
+
},
|
|
15
|
+
"include": ["src"],
|
|
16
|
+
"exclude": ["src/**/*.test.ts"]
|
|
17
|
+
}
|
|
@@ -154,6 +154,14 @@ row, visible to any later reader without an Advisory Hub having to catch it live
|
|
|
154
154
|
`AGENTS.md`. Never write orchestration notes to `.caddis/kb/`.
|
|
155
155
|
7. **Never write a load or stress test into a lane prompt or findings file.** The script refuses
|
|
156
156
|
this wording without `--allow-load`. Only the owner gives that flag.
|
|
157
|
+
7b. **Write test economy into every agent brief, not only the lane prompt.** The script already adds it
|
|
158
|
+
to its lane prompts. A brief you write yourself (an Agent-tool subagent, a peer session) needs the same
|
|
159
|
+
five lines: after each step run only the tests for the file or module you changed; run the full suite only
|
|
160
|
+
for the baseline and once at the end; run no review loop inside the agent (you review); report progress
|
|
161
|
+
every 20 minutes; never start a second heavy test run while one is still running. **Two parallel agents
|
|
162
|
+
must not both run full suites.** Measured 2026-10-02 on one shared box: a 2,063-test suite took 2.7 min
|
|
163
|
+
alone and 6.7 min beside a second test-heavy agent, and one agent's brief (baseline, tests after each of 9
|
|
164
|
+
module switches, full gates, in-agent review) cost 30-40 of its 59 minutes.
|
|
157
165
|
8. Record these Tracker values:
|
|
158
166
|
- `Model` = the packet's `model`.
|
|
159
167
|
- `Lane` = the lanes tried, joined with ` -> ` and followed by the reason. For example,
|
|
@@ -1,7 +1,12 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: particle-art
|
|
3
3
|
version: 1.0.0
|
|
4
|
-
description:
|
|
4
|
+
description: >-
|
|
5
|
+
Zero-dependency animated particle art as a React/Next.js component (spring physics, CSS-variable
|
|
6
|
+
theming, mouse interaction). Use for animated hero art or a living logo, or on "particle animation",
|
|
7
|
+
"particles that form a shape", "animated letter/logo/initials", "morphing particles",
|
|
8
|
+
"constellation", "neural net art", "halftone animation", "ASCII art animation", or "art that reacts
|
|
9
|
+
to mouse".
|
|
5
10
|
---
|
|
6
11
|
|
|
7
12
|
# Particle Art Generator
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: port-to-github
|
|
3
|
-
description:
|
|
3
|
+
description: >-
|
|
4
|
+
Port an app or repo to GitHub from any source (git server, local folder, UNC share, Windows box over
|
|
5
|
+
WinRM): all branches and tags, SHA-verified, CI translated, source-only history, deploy cut over
|
|
6
|
+
with rollback. Use when the user says "move this app to GitHub", "port X to GitHub", "migrate from
|
|
7
|
+
Gitea", "this app only exists on the server", "import the repo from the prod box", "keep binaries
|
|
8
|
+
out of the repo", or "cut the deploy over to GitHub".
|
|
4
9
|
---
|
|
5
10
|
|
|
6
11
|
# port-to-github
|
|
@@ -3,12 +3,11 @@ name: tech-explainer
|
|
|
3
3
|
context: fork
|
|
4
4
|
description: >-
|
|
5
5
|
Plain-language explainer, with ranked Mermaid diagrams and Simplified Technical English, for a
|
|
6
|
-
reader who did NOT do the investigation (manager, stakeholder). Use when the user says "explain
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
hand-offs (explainer-doc) or READMEs.
|
|
6
|
+
reader who did NOT do the investigation (manager, stakeholder). Use when the user says "explain this
|
|
7
|
+
to X", "explainer", "write this up for someone non-technical", "plain English", "STE", "explain our
|
|
8
|
+
findings", "write up the benchmark results", "why is it slow — document it", or summarises an
|
|
9
|
+
investigation for a reader who won't read the raw data. Not for build hand-offs (explainer-doc) or
|
|
10
|
+
READMEs.
|
|
12
11
|
---
|
|
13
12
|
|
|
14
13
|
# tech-explainer — make a stranger understand, and able to push back
|
|
@@ -22,11 +22,13 @@
|
|
|
22
22
|
|
|
23
23
|
| Skill | Path | When to Use |
|
|
24
24
|
|-------|------|-------------|
|
|
25
|
+
| Adopt Rbac | `adopt-rbac/` | >- |
|
|
25
26
|
| Anchor Review | `anchor-review/` | Single-model adversarial review technique — 3-lens analysis with confidence scoring and self-challenge |
|
|
26
27
|
| Api Client Patterns | `api-client-patterns/` | Typed client-side API consumption: fetch wrappers, zod validation, auth injection, TanStack Query (useQuery, useMutation, optimistic updates), tRPC, OpenAPI codegen, pagination. Use when consuming REST or tRPC APIs. |
|
|
27
28
|
| Architecture Design | `architecture-design/` | Design application architecture and system diagrams with layered patterns, Mermaid C4 diagrams, SQL Server data platform, and on-premise deployment considerations. |
|
|
28
29
|
| Backend To Frontend Handoff Docs | `backend-to-frontend-handoff/` | Document a finished backend API for frontend integration. Use when the user says 'create handoff', 'document API', 'frontend handoff', or 'API documentation'. |
|
|
29
30
|
| Caching Patterns | `caching-patterns/` | Caching strategies for Streamlit and FastAPI applications |
|
|
31
|
+
| Case Management | `case-management/` | >- |
|
|
30
32
|
| Code Explainer | `code-explainer/` | Explain code with diagrams, analogies and step-by-step walkthroughs. Use when teaching a codebase or answering "how does this work?" |
|
|
31
33
|
| Cross Review | `cross-review/` | Have a different vendor's model (DeepSeek, GLM, any OpenAI-compatible endpoint) review the current diff. Use after a phase is green and before commit/merge, or for a second opinion on a risky diff. |
|
|
32
34
|
| Llm Application Dev | `llm-application-dev/` | LLM applications: prompt engineering, RAG and LLM integration. Use for AI-powered features, chatbots or LLM automation. |
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: adopt-rbac
|
|
3
|
+
description: >-
|
|
4
|
+
Pointer to the org's RBAC adoption skill. Use for "add RBAC to this app" or "adopt rbac-kit".
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# adopt-rbac (pointer)
|
|
8
|
+
|
|
9
|
+
RBAC adoption depends on organisation-specific things: the shared package and its pin, the auth
|
|
10
|
+
proxy that supplies identity, prod paths, the rollout order. So the real skill lives in the
|
|
11
|
+
organisation's private platform repo, next to the package it describes:
|
|
12
|
+
|
|
13
|
+
<PLATFORM_REPO>/.claude/skills/adopt-rbac/SKILL.md
|
|
14
|
+
|
|
15
|
+
**Find it, read it in full, and follow it.** This pointer only makes it findable from a session
|
|
16
|
+
opened in another repo.
|
|
17
|
+
|
|
18
|
+
1. If `.github/project-config.md` sets `<PLATFORM_REPO>`, use that checkout.
|
|
19
|
+
2. Otherwise look in the folders next to the current project for one that contains
|
|
20
|
+
`.claude/skills/adopt-rbac/SKILL.md`.
|
|
21
|
+
3. If the repo is only on the remote, read the file with `gh api` from the platform repo.
|
|
22
|
+
4. If none of these works, stop and ask the user where it is. Do not improvise RBAC from memory:
|
|
23
|
+
improvised copies drift, and a drifted copy is how a privilege escalation ships.
|
|
24
|
+
|
|
25
|
+
The skill and the package live in one repo on purpose, so a package change and its skill update
|
|
26
|
+
land in the same PR.
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: case-management
|
|
3
|
+
description: >-
|
|
4
|
+
Pointer to the org's case-management blueprint. Use for "add case management".
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# case-management (pointer)
|
|
8
|
+
|
|
9
|
+
The blueprint is drawn from a live, organisation-specific implementation, so it lives in the
|
|
10
|
+
organisation's private platform repo:
|
|
11
|
+
|
|
12
|
+
<PLATFORM_REPO>/.claude/skills/case-management/SKILL.md
|
|
13
|
+
|
|
14
|
+
**Find it, read it in full, and follow it.** This pointer only makes it findable from a session
|
|
15
|
+
opened in another repo. Case management needs RBAC first: see the sibling **adopt-rbac** skill.
|
|
16
|
+
|
|
17
|
+
1. If `.github/project-config.md` sets `<PLATFORM_REPO>`, use that checkout.
|
|
18
|
+
2. Otherwise look in the folders next to the current project for one that contains
|
|
19
|
+
`.claude/skills/case-management/SKILL.md`.
|
|
20
|
+
3. If the repo is only on the remote, read the file with `gh api` from the platform repo.
|
|
21
|
+
4. If none of these works, stop and ask the user where it is.
|
|
22
|
+
|
|
23
|
+
It is a blueprint, not a package yet. When a second app adopts case management, the blueprint
|
|
24
|
+
says to extract the generic half into a `case-kit` package with that app as the first consumer.
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: adopt-app
|
|
3
|
-
description:
|
|
3
|
+
description: >-
|
|
4
|
+
Bring an app that was never scaffolded (POC, server folder, checkout with no remote) up to standard:
|
|
5
|
+
inventory without running it, pass/gap/question verdicts, ordered plan. Use when the user says "this
|
|
6
|
+
app was never set up properly", "adopt this POC", "onboard this app", "it just runs from a folder on
|
|
7
|
+
the server", "what would it take to get this into CI", "nobody knows how this is deployed", or "it
|
|
8
|
+
started as a prototype and now it is production".
|
|
4
9
|
---
|
|
5
10
|
|
|
6
11
|
# adopt-app
|
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: port-to-github
|
|
3
|
-
description:
|
|
3
|
+
description: >-
|
|
4
|
+
Port an app or repo to GitHub from any source (git server, local folder, UNC share, Windows box over
|
|
5
|
+
WinRM): all branches and tags, SHA-verified, CI translated, source-only history, deploy cut over
|
|
6
|
+
with rollback. Use when the user says "move this app to GitHub", "port X to GitHub", "migrate from
|
|
7
|
+
Gitea", "this app only exists on the server", "import the repo from the prod box", "keep binaries
|
|
8
|
+
out of the repo", or "cut the deploy over to GitHub".
|
|
4
9
|
---
|
|
5
10
|
|
|
6
11
|
# port-to-github
|
|
@@ -3,12 +3,11 @@ name: tech-explainer
|
|
|
3
3
|
context: fork
|
|
4
4
|
description: >-
|
|
5
5
|
Plain-language explainer, with ranked Mermaid diagrams and Simplified Technical English, for a
|
|
6
|
-
reader who did NOT do the investigation (manager, stakeholder). Use when the user says "explain
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
hand-offs (explainer-doc) or READMEs.
|
|
6
|
+
reader who did NOT do the investigation (manager, stakeholder). Use when the user says "explain this
|
|
7
|
+
to X", "explainer", "write this up for someone non-technical", "plain English", "STE", "explain our
|
|
8
|
+
findings", "write up the benchmark results", "why is it slow — document it", or summarises an
|
|
9
|
+
investigation for a reader who won't read the raw data. Not for build hand-offs (explainer-doc) or
|
|
10
|
+
READMEs.
|
|
12
11
|
---
|
|
13
12
|
|
|
14
13
|
# tech-explainer — make a stranger understand, and able to push back
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
# flow-studio (engine source)
|
|
2
|
+
|
|
3
|
+
Stage S1a of the `flow-studio` skill: a model file (JSON) describes a flow, lifecycle or journey, and one
|
|
4
|
+
engine draws it as a self-contained HTML page with pan and zoom, lanes, linked nodes, a slide-in
|
|
5
|
+
inspector, motion that carries state, and numbered implementation notes. The design is in
|
|
6
|
+
`.caddis/plans/flow-studio-skill-design.md`; the plan for this stage is `.caddis/plans/flow-studio-s1a-plan.md`.
|
|
7
|
+
There is no `SKILL.md` yet: the playbook arrives in stage S2.
|
|
8
|
+
|
|
9
|
+
## Use it
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# from this folder (Node 22.6 or newer)
|
|
13
|
+
node --experimental-strip-types scripts/validate.mjs examples/lineage.json
|
|
14
|
+
node --experimental-strip-types scripts/build.mjs examples/lineage.json out/lineage.html
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Open `out/lineage.html`. It has no network access and no libraries.
|
|
18
|
+
|
|
19
|
+
`build.mjs` embeds the model's own `notes` plus any extra notes from `--notes notes.json` (the model's
|
|
20
|
+
notes come first, then the file's). Note anchors are CSS selectors for parts of the page, for example
|
|
21
|
+
`#viewport`.
|
|
22
|
+
|
|
23
|
+
## Check a page
|
|
24
|
+
|
|
25
|
+
The harness drives a real browser. Run it from a folder whose `node_modules` has `playwright`
|
|
26
|
+
(it is looked up from the current folder, not from this one):
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
node /path/to/flow-studio/scripts/check.mjs out/lineage.html --out shots --hostile out/hostile.html --channel msedge
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
It checks structure (no overlap, links touch their nodes, text stays inside cards, readable first view),
|
|
33
|
+
interaction (zoom, pan, select, what-if, view switch), accessibility (names, focus, contrast in both themes,
|
|
34
|
+
reduced motion), safety (no network, hostile text stays inert) and performance (200 nodes). Exit code 0 means
|
|
35
|
+
every check passed.
|
|
36
|
+
|
|
37
|
+
`scripts/lib/check-selftest.test.mjs` feeds the harness pages with one deliberate defect each and fails
|
|
38
|
+
if a defect is not caught. It is skipped when Playwright cannot be resolved, so run it from a folder that has
|
|
39
|
+
it: `FLOW_STUDIO_CHANNEL=msedge node --test /path/to/flow-studio/scripts/lib/check-selftest.test.mjs`.
|
|
40
|
+
|
|
41
|
+
## Develop it
|
|
42
|
+
|
|
43
|
+
- The source of truth is `src/*.ts`. The pure modules (`model`, `viewport`, `routing`, `trace`, `layout`,
|
|
44
|
+
`rules`, `stateCss`) have unit tests. The DOM modules (`render`, `controls`, `interact`, `inspector`,
|
|
45
|
+
`chrome`, `notes`, `engine`) are tested through the check harness.
|
|
46
|
+
- `npm test` runs the unit tests (`node --experimental-strip-types --test`).
|
|
47
|
+
- `templates/engine.html` is generated and committed. After you change `src/` or `templates/engine.shell.html`,
|
|
48
|
+
run `node --experimental-strip-types scripts/build-engine.mjs`. A test fails when the committed file is stale.
|
|
49
|
+
- `build-engine.mjs` needs `esbuild`. It looks in this folder, then in the caddis `cli/` folder, then in the
|
|
50
|
+
current folder. In a caddis checkout, `cli/node_modules` already has it. Elsewhere, run `npm i -D esbuild`. The stale-engine check compares bytes, so use the same esbuild version as the checkout that committed the file (the caddis `cli/` one).
|
|
51
|
+
- Type check with `tsc -p tsconfig.json` (TypeScript from `cli/node_modules` or your own install).
|
|
52
|
+
- Examples use fictional data only: this repository is public.
|
|
53
|
+
- Delete the `out/` folder before exporting bundles. It is ignored by git but not by a file copy.
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: flow-studio
|
|
3
|
+
description: Design an interactive flow, lifecycle or journey page (nodes, lanes, links, motion, inspector, notes) from a JSON model as a self-contained demo, then build it in an app. Use for lineage, pipelines, ticket or agent journeys.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# flow-studio
|
|
7
|
+
|
|
8
|
+
Turns a one-paragraph brief into an explorable page: stages across, lanes down, linked nodes, pan and zoom,
|
|
9
|
+
a slide-in inspector, motion that carries meaning, and numbered implementation notes. One JSON **model**
|
|
10
|
+
describes the scenario. One engine draws it. A check script proves it is sound.
|
|
11
|
+
|
|
12
|
+
Use it for: data lineage and dependency impact, a ticket or case lifecycle, an agent or customer journey, a CI/CD
|
|
13
|
+
or release pipeline, an approval flow, an incident timeline, a service map. See `references/patterns.md`.
|
|
14
|
+
Not for: a static screen or UI variants (use `mockup` or `sketch`), a chart, a graph with more than 300 nodes.
|
|
15
|
+
|
|
16
|
+
## What works today (version 0.1)
|
|
17
|
+
|
|
18
|
+
Left-to-right flows in **columns** (stages) and **lanes** (apps, systems or actors): states with their own look
|
|
19
|
+
and motion, portal chips for shared nodes, wide placeholders for what is not recorded, two or more views
|
|
20
|
+
(for example Today and Complete), search, a what-if action (a red ripple downstream), a table view, and notes.
|
|
21
|
+
|
|
22
|
+
**Not yet** (planned, do not promise them): links that go back to an earlier stage (loops), gateway diamonds,
|
|
23
|
+
automatic placement, token playback along a path, live data updates, free x and y placement. If the scenario
|
|
24
|
+
needs a loop, show the return as its own node in a later column (for example "Reopened") and say so.
|
|
25
|
+
|
|
26
|
+
## Process: demo mode
|
|
27
|
+
|
|
28
|
+
1. **Ask at most three questions**: what is the page for, who reads it, and what are the nouns (the stages, the
|
|
29
|
+
lanes, the states). If the brief already says, ask none.
|
|
30
|
+
2. **Map the scenario** to the model (`references/patterns.md` has a recipe per scenario):
|
|
31
|
+
columns = stages left to right, lanes = who or what owns the row, states = the vocabulary (for example
|
|
32
|
+
new, open, waiting, breached, resolved), nodes = the things, links = the flow.
|
|
33
|
+
3. **Write `model.json`.** Fields are in `model.schema.json`; `examples/lineage.json` is a complete model.
|
|
34
|
+
4. **Validate:** `node --experimental-strip-types scripts/validate.mjs model.json`. Fix every error. Read every
|
|
35
|
+
warning.
|
|
36
|
+
5. **Build:** `node --experimental-strip-types scripts/build.mjs model.json out/page.html`. It is one file with
|
|
37
|
+
no network use.
|
|
38
|
+
6. **Check:** from a folder that has `playwright`:
|
|
39
|
+
`node <skill folder>/scripts/check.mjs out/page.html --out shots [--channel msedge]`.
|
|
40
|
+
Every check must pass. Open the screenshots and look at them: the checks do not judge taste.
|
|
41
|
+
7. **Show** the page and the screenshots. Do not call it done until the checks pass and you have looked.
|
|
42
|
+
|
|
43
|
+
Paths above are relative to the folder that holds this file. Node 22.6 or newer is needed.
|
|
44
|
+
|
|
45
|
+
## Design rules (the engine and the checks enforce most of them)
|
|
46
|
+
|
|
47
|
+
1. **No orphan.** Every node sits in a lane and has a link. A missing neighbour is a dotted placeholder that says
|
|
48
|
+
what is missing. Never guess a link.
|
|
49
|
+
2. **The first view is readable**: fit to width at zoom 0.6 or more (up to 60 groups). Key `0` shows everything.
|
|
50
|
+
3. **Read left to right**, with pinned column headers and a phase ribbon.
|
|
51
|
+
4. **Motion carries state**: links flow by state, gaps breathe, the selected path draws in, a what-if ripples.
|
|
52
|
+
No decorative loops, no sweeping scan line, no bounce.
|
|
53
|
+
5. **No permanent side panel.** The inspector slides in on a click and closes with Esc.
|
|
54
|
+
6. **Standard controls**: select, hand, zoom in and out, fit, 100 percent, zoom to selection, fullscreen, keys.
|
|
55
|
+
7. **Every state has a word as well as a colour.** Contrast at least 4.5 in light and dark.
|
|
56
|
+
8. **Titles stay short** (one line at the column width). Long text goes in `subtitle` or `members`.
|
|
57
|
+
9. **Fixed node sizes per kind.** The engine never measures text, so layout does not depend on fonts.
|
|
58
|
+
10. **Reduced motion** removes all motion and keeps the glow.
|
|
59
|
+
|
|
60
|
+
## Model in one screen
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
version 1, meta {title, help, asOf, source, labels?}, layout "columns-lanes"
|
|
64
|
+
columns [{id, title, short?, width, phase?}] stages, left to right
|
|
65
|
+
lanes [{id, title, badge?, badgeTone?, note?, gap?}] rows; gap true = dashed amber "no document" lane
|
|
66
|
+
states {id: {word, tone, border, edge, motion, bucket}} the vocabulary; bucket good|neutral|gap
|
|
67
|
+
nodes [{id, kind, lane, col, colSpan?, row, state, title, subtitle?, members?, weight?, ref?, upgrade?,
|
|
68
|
+
stateIn?, visibleIn?}] kind: card group chip placeholder (others draw as cards)
|
|
69
|
+
links [{id, from, to, state, label?, stateIn?, visibleIn?}] from must be in an earlier column than to
|
|
70
|
+
views [{id, label, default?}] the first view is the baseline
|
|
71
|
+
inspector {relations [3 of {id,label,dir,filter?}], actions [{id,label,dir,staleText}]}
|
|
72
|
+
notes [{anchor, title, text}] anchor is a CSS selector for a part of the page
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Rows are numbers (1 row = 62 px). Keep nodes in one column at least 1 row apart. A lane needs about 1.75 rows of
|
|
76
|
+
space between single-row lanes. `validate.mjs` checks all of this and names the node or link at fault.
|
|
77
|
+
|
|
78
|
+
## Build mode: implement it in a real app
|
|
79
|
+
|
|
80
|
+
Use the demo page as the visual contract and `model.schema.json` as the data contract.
|
|
81
|
+
|
|
82
|
+
1. Copy the pure modules from `src/` into the app: `model.ts`, `layout.ts`, `viewport.ts`, `routing.ts`,
|
|
83
|
+
`trace.ts`, `rules.ts`, `stateCss.ts`, and their `*.test.ts` files. They have no DOM and no dependencies.
|
|
84
|
+
2. Work test first: run the copied tests, then write a failing test for each change.
|
|
85
|
+
3. Write the components in the app's own framework and design system (the demo's DOM and CSS are in
|
|
86
|
+
`src/render.ts`, `src/controls.ts`, `src/inspector.ts`, `src/chrome.ts`, `src/styles.css`). Feed them from the
|
|
87
|
+
app's real data through the app's hook and service layer. Make node and link ids stable (use business keys, not
|
|
88
|
+
array positions).
|
|
89
|
+
4. Keep typed loading, empty and error states. A failed refresh keeps the last good graph. Never draw a missing
|
|
90
|
+
value as zero.
|
|
91
|
+
5. Run `scripts/check.mjs` against the running app page for the structural, interaction and accessibility checks
|
|
92
|
+
(the page must expose the same element ids, or copy the harness and adapt it).
|
|
93
|
+
|
|
94
|
+
A packaged React kit and live-update API are planned; until then, build mode is "copy the pure modules, port the
|
|
95
|
+
DOM modules".
|
|
96
|
+
|
|
97
|
+
## Gotchas
|
|
98
|
+
|
|
99
|
+
- Examples and any committed data must be invented: a public repo must not carry real host, job or repo names.
|
|
100
|
+
- A model string is data, never markup. The engine renders text safely; keep it that way in any port.
|
|
101
|
+
- The caddis pool budgets all skill descriptions together. Keep this one short.
|
|
102
|
+
- `templates/engine.html` is generated. After changing `src/`, run `node --experimental-strip-types
|
|
103
|
+
scripts/build-engine.mjs` (it needs `esbuild`; see `README.md`).
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
# Examples
|
|
2
|
+
|
|
3
|
+
Model files only. Build one with `node --experimental-strip-types scripts/build.mjs examples/<name>.json out/<name>.html`.
|
|
4
|
+
|
|
5
|
+
| File | What it shows |
|
|
6
|
+
|---|---|
|
|
7
|
+
| `lineage.json` | A fictional data estate ("Northwind Analytics"): nine columns from source system to page, eight lanes (documented, infrastructure, gaps), four evidence states, two views (Today and Complete), portal chips, wide placeholders, the failure what-if. The proof that the generic engine reproduces a hand-built lineage page. |
|
|
8
|
+
| `hostile.json` | The same model with markup and script text in every free-text field (`</script>`, an image with an `onerror`, quotes, U+2028 and U+2029). The check harness loads it to prove nothing executes. Do not use it as a template. |
|
|
9
|
+
|
|
10
|
+
All data is fictional. The names are invented, and no real host, job, table or repository appears in them.
|
|
11
|
+
`lineage.json` and `hostile.json` are generated by a script that is not part of the skill; edit the JSON directly.
|