diff --git a/CHANGELOG.md b/CHANGELOG.md index 65f0f70..023155a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## 0.1.7 — 2026-09-28 + +Unfreeze exception (human-written): catalog grows **62 → 65** to add modern specialists `json-render`, `deck-design`, and `pageindex`. **No twin retired.** No silent padding. UI doctrines remain MERGE’d into `impeccable` / `emil-design-eng`. `react-doctor` stays OPTIONAL_TOOL (not a 4th skill). Closed intent set grows by three: `generative_ui`, `slides_pptx`, `longdoc_nav`. + +- Power-up existing specialists (no duplicate UI skill folders): + - `impeccable/reference/audit.md`: unified React smell checklist and an explicit “when to run react-doctor” OPTIONAL_TOOL door. + - `impeccable/reference/taste-guard.md`: Delivery Gate liveliness / LCP / leftover-lorem items (net-new only). + - `emil-design-eng/references/interface-feel.md`: contrast boundaries, non-hue state, container-adaptive density (no duplicate hairline section). + - `playwright-qa`: evidence ledger + tracing FACT rows; remains door 1; browser-use not vendored. + - `prototype` + `found-this-design`: schema/JSON UI handoff → `json-render`. + - `smartdoc`: PPTX generation out of scope → `deck-design`. + - `research`: long structured docs → `pageindex`; primary-source rule kept. + - `eval-harness` + `full-audit-keamanan`: `deepteam` OPTIONAL_POINTER tightened (non-vendored, `OPTIONAL_ABSENT` when missing). +- Added three model-invoked skills (catalog 50 model + 15 manual = 65): + - `json-render` — pin `vercel-labs/json-render@c2600d73` (Apache-2.0). Generative UI from typed catalog/JSON. After tokens/direction or internal schema UI. Never bypass Design Bank for marketing. Jev compose not ported. + - `deck-design` — pin `carnot-tech/consulting-pptx-skill@f50edac` (MIT). Consulting PPTX / 16:9 HTML decks. Upstream 62-type packs not vendored. + - `pageindex` — pin `VectifyAI/PageIndex@037a7dba` (MIT). Tree/reasoning long-doc nav. Not Graphiti/Cognee/second CBM. Degrade `NOT_CONFIGURED`. Not a core MCP. +- Re-froze catalog at **65/65**. Product version 0.1.7. No new core MCP. No Jev. + ## 0.1.6 — 2026-09-28 - Closed remaining open `UPDATE` dispositions in `docs/source-wave.md` (`scroll-world`, `browser-act`, `impeccable`, `codebase-memory-mcp`): diff --git a/README.md b/README.md index c24142d..4ad9ca7 100644 --- a/README.md +++ b/README.md @@ -1,24 +1,24 @@ # OpenCodeHighEnd -OpenCode 2 overlay: 62 frozen routed skills, thin `AGENTS.md`, `opencode-he`. +OpenCode 2 overlay: 65 frozen routed skills, thin `AGENTS.md`, `opencode-he`. Installer and runtime overlay for [OpenCode 2](https://opencode.ai/v2/docs/). -Version **0.1.6**. The 62-skill catalog is strictly frozen. +Version **0.1.7**. The 65-skill catalog is strictly frozen. ## What it is -- 62 skills: 47 model-invoked, 15 manual slash commands (frozen; see [docs/CATALOG-FREEZE.md](docs/CATALOG-FREEZE.md)) +- 65 skills: 50 model-invoked, 15 manual slash commands (frozen; see [docs/CATALOG-FREEZE.md](docs/CATALOG-FREEZE.md)) - A thin `AGENTS.md` router (lazy, one primary specialist) - Core MCP: Codebase Memory, Context7, shadcn - 12 Universal Design Banks (34,500+ items across Identity, Motion, Section, Atomic) with zero-token local search & Google Drive v2 bootstrap - Design Bank path resolution via `~/.config/opencode/highend/config/design-bank.json` - Explicit specialist handoff graph (`found-this-design` pin → `impeccable` → `playwright-qa` verify edge) - Evidence-blocked done-gate (`FACT:` / `JUDGMENT:`) via verification rules + `/decision-log` -- UI polish checklists merged into `emil-design-eng` + practical a11y into `impeccable` (still 62 skills) +- UI polish checklists merged into `emil-design-eng` + practical a11y into `impeccable` (still not extra skills) - Core MCP pins: Codebase Memory **0.11.0** (tarball and inner-binary SHA-256) and `shadcn@4.21.0` - Email design is an Impeccable reference, not a new skill (raw HTML uses tables; React Email / MJML may use framework components) -- Emil motion doctrines live under `emil-design-eng` references (still 62 skills) +- Emil motion doctrines live under `emil-design-eng` references (not extra skills) - Design Intelligence (lazy, inside Impeccable) - `opencode-he doctor`, transactional install, uninstall, restore - Claude Code isolation: `OPENCODE_DISABLE_CLAUDE_CODE=1` diff --git a/THIRD_PARTY_NOTICES.md b/THIRD_PARTY_NOTICES.md index b1226e7..bb6ddaa 100644 --- a/THIRD_PARTY_NOTICES.md +++ b/THIRD_PARTY_NOTICES.md @@ -27,6 +27,9 @@ Machine-readable copy: `vendor/license-audit.json`. | `humanizer` | [blader/humanizer](https://github.com/blader/humanizer) v3; skill `NOTICE.md` | MIT © 2024-2026 blader contributors | follow MIT | | `academic` | Original first-party text. Conceptual pipeline (research→write→review→revise) independently implemented. No source copied from Imbad0202/academic-research-skills (CC-BY-NC-4.0). | MIT © 2026 OpenCodeHighEnd contributors | follow MIT | | `hyperframes` | [heygen-com/hyperframes](https://github.com/heygen-com/hyperframes); skill `NOTICE.md` | Apache-2.0 | follow Apache-2.0 | +| `json-render` | [vercel-labs/json-render](https://github.com/vercel-labs/json-render) `c2600d73`; skill `NOTICE.md`. npm packages not vendored. | Apache-2.0 © 2025 Vercel Inc. | follow Apache-2.0 | +| `deck-design` | [carnot-tech/consulting-pptx-skill](https://github.com/carnot-tech/consulting-pptx-skill) `f50edac`; skill `NOTICE.md`. 62-type packs not vendored. | MIT © carnot-tech contributors | follow MIT | +| `pageindex` | [VectifyAI/PageIndex](https://github.com/VectifyAI/PageIndex) `037a7dba`; skill `NOTICE.md`. SDK/Cloud not vendored. | MIT © 2026 PageIndex AI / VectifyAI | follow MIT | | `diagram-design` | [cathrynlavery/diagram-design](https://github.com/cathrynlavery/diagram-design); skill `NOTICE.md` | MIT © 2024-2026 Cathryn Lavery contributors | follow MIT | | Email design doctrine | Merged from [CosmoBlk/email-design](https://github.com/CosmoBlk/email-design) (MIT © 2026 CosmoBlk), [jayesh-bansal/email-pro-max](https://github.com/jayesh-bansal/email-pro-max) (MIT © 2026 Jayesh Bansal), [chunkydotdev/email-skills](https://github.com/chunkydotdev/email-skills) (MIT © 2026 chunkydotdev), and [Olshansk/agent-skills](https://github.com/Olshansk/agent-skills) (MIT © 2026 Olshansk) into `skills/impeccable/reference/email.md` | MIT | follow MIT | | Emil Kowalski motion doctrines | Merged from [emilkowalski/skills](https://github.com/emilkowalski/skills) (`85e8e2363b71`) into `skills/emil-design-eng/references/` (`motion.md`, `apple-principles.md`, `native-motion.md`, `interface-feel.md`). Text: `vendor/licenses/EMILKOWALSKI-MIT.txt` | MIT © 2026 Emil Kowalski | follow MIT | diff --git a/VERSION b/VERSION index c946ee6..1180819 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -0.1.6 +0.1.7 diff --git a/docs/CATALOG-FREEZE.md b/docs/CATALOG-FREEZE.md index ea0fe4f..3076cae 100644 --- a/docs/CATALOG-FREEZE.md +++ b/docs/CATALOG-FREEZE.md @@ -1,16 +1,16 @@ # Catalog Freeze Contract -This contract defines the immutable boundary and governance for the OpenCodeHighEnd catalog. The 62-skill catalog is strictly frozen. +This contract defines the immutable boundary and governance for the OpenCodeHighEnd catalog. The 65-skill catalog is strictly frozen. -- **Product version**: 0.1.6 -- **Catalog**: 62 names. 47 model-invoked under `skills/`. 15 manual under `manual-skills/` + `commands/`. -- **Wave 0.1.6 upgrade**: Body and reference refresh only (`scroll-world`, `browser-act`, `impeccable` delta evaluation); exact 62-skill catalog strictly reaffirmed. -- **Retired in this wave and not to be revived**: `ask-matt`, `grilling`, `wait-what`, `matt-implement`. +- **Product version**: 0.1.7 +- **Catalog**: 65 names. 50 model-invoked under `skills/`. 15 manual under `manual-skills/` + `commands/`. +- **Wave 0.1.7 unfreeze exception** (CHANGELOG 0.1.7): catalog grew 62 → 65 to add `json-render`, `deck-design`, `pageindex`. No twin retired. UI doctrines remain MERGE’d. `react-doctor` stays OPTIONAL_TOOL. +- **Retired in prior waves and not to be revived**: `ask-matt`, `grilling`, `wait-what`, `matt-implement`. - **Kept on purpose**: `wizard` (target-app bash wizard), `codebase-design` (new module), `/improve-codebase-architecture` (scan + HTML report). - **Name collision remains**: `install-anti-slop` = Oxlint; UI/copy filter lives in `impeccable` taste-gate + `humanizer`; `/unslop` = `humanizer`. -- **FOREIGN_ON_DEMAND stays out of the overlay**: `ECC`, `noodle`, `serena`, `stitch`, `reticle`, `ui-skills` MCP, `markitdown` MCP, `crawl4ai` MCP, `exa`, `Caliper`, `SkillEvaluator`. `doctor` must not fail when they are absent. -- **No new allowlist name without retiring one existing name in the same change.** +- **FOREIGN_ON_DEMAND stays out of the overlay**: `ECC`, `noodle`, `serena`, `stitch`, `reticle`, `ui-skills` MCP, `markitdown` MCP, `crawl4ai` MCP, `exa`, `Caliper`, `SkillEvaluator`, PageIndex Cloud MCP. `doctor` must not fail when they are absent. +- **No new allowlist name without retiring one existing name in the same change**, except a human-written CHANGELOG exception (the 0.1.7 growth is that exception; it is spent). - **No padding back to 64.** - **No `/how`, `/poteto-mode`, `/antislop`, `taste-skill`, `axi-core`, `human-atlas`, `awesome-design-md` vendor.** - **No auto-edit of skills/rules from a learning log. No silent `--auto`.** -- **Next unfreeze requires a human-written exception in CHANGELOG Unreleased that names the retired twin.** +- **Next unfreeze requires a human-written exception in CHANGELOG that names the retired twin, or a new explicit growth exception.** diff --git a/docs/acceptance.md b/docs/acceptance.md index 8a6833c..3248825 100644 --- a/docs/acceptance.md +++ b/docs/acceptance.md @@ -5,17 +5,17 @@ `doctor --deep` = is live runtime proven? `doctor --strict` = treat DEGRADED/WARN as failure. -A successful 0.1.6 install should report approximately: +A successful 0.1.7 install should report approximately: ```text PASS INSTALLED_PRODUCT opencode-highend -PASS INSTALLED_VERSION 0.1.6 +PASS INSTALLED_VERSION 0.1.7 PASS SOURCE_REPOSITORY https://github.com/kuker24/OpenCodeHighEnd PASS OpenCode (major >= 2.x) PASS opencode.jsonc parseable PASS AGENTS.md thin owned-lines=… -PASS skills TOTAL 62/62 MODEL 47/47 MANUAL 15/15 +PASS skills TOTAL 65/65 MODEL 50/50 MANUAL 15/15 PASS rules 6 portable; 04-context-guard EXCLUDED_BY_DESIGN CONFIGURED mcp:codebase-memory-mcp diff --git a/docs/compatibility.md b/docs/compatibility.md index d4a33e1..2899e19 100644 --- a/docs/compatibility.md +++ b/docs/compatibility.md @@ -1,6 +1,6 @@ # Compatibility -Official target for 0.1.6: +Official target for 0.1.7: - Linux x86_64 - OpenCode **2.x** (1.x fails closed) diff --git a/docs/mcp.md b/docs/mcp.md index 1e135f5..67ee3e3 100644 --- a/docs/mcp.md +++ b/docs/mcp.md @@ -43,3 +43,4 @@ Doctor reports `CONFIGURED` for owned MCP entries present in config. That is not - **Agent-Reach (`Panniantong/Agent-Reach`)** — Agent-Reach was evaluated and is strictly **REJECTED** as a core MCP or skill. It is not an alternative to Playwright QA eyes, carries ToS/cookie/account risks, and relies on Exa which is already designated `FOREIGN_ON_DEMAND`. Never register Agent-Reach as a core or required tool. - **TypeSafe MCP (`itsmostafa/typesafe-mcp`)** — Evaluated and **REJECTED** as an extra core MCP. Core MCPs remain strictly `codebase-memory-mcp`, `context7`, and `shadcn`. - **Graphiti (`getzep/graphiti`) & Cognee (`topoteretes/cognee`)** — Evaluated and **REJECTED** as external memory MCP servers. Complex graph databases and temporal entity graph memory requiring separate backends/services are out of scope. Codebase indexing and symbol memory is strictly owned by `codebase-memory-mcp` (v0.11.0). Core MCPs remain strictly `codebase-memory-mcp`, `context7`, and `shadcn`. +- **PageIndex Cloud MCP (`VectifyAI/PageIndex`)** — Skill `pageindex` is a first-party wrapper for tree/reasoning long-doc navigation. The Cloud/hosted MCP is **REJECTED** as an extra core MCP. Do not register it. Missing local SDK is `NOT_CONFIGURED` on the skill, not a doctor failure. diff --git a/docs/routing.md b/docs/routing.md index c4ad7d3..9dd5de8 100644 --- a/docs/routing.md +++ b/docs/routing.md @@ -17,9 +17,9 @@ Manual specialists stay behind slash commands. Suggest them when the user names Every user request is classified into exactly one closed intent: ```text -repo_understand | bug | security | perf | ui_direction | ui_implement +repo_understand | bug | security | perf | ui_direction | ui_implement | generative_ui motion | scroll_2d | scroll_3d | img3d | docs | ingest_md | prose -academic | browser_qa | architecture | warehouse | ops_data | video_html | demo_id +academic | longdoc_nav | browser_qa | architecture | warehouse | ops_data | video_html | demo_id | slides_pptx ``` | Intent | Primary Route | Handoff Boundary / Rule | @@ -31,14 +31,17 @@ academic | browser_qa | architecture | warehouse | ops_data | video_html | demo_ | `perf` | `full-performance-audit` | Measured LCP/INP/CLS/latency/bundle bottlenecks | | `ui_direction` | `found-this-design` | Stop after writing `.impeccable/found-this-design.json` | | `ui_implement` | `impeccable` | Requires pinned world or project `DESIGN.md` | +| `generative_ui` | `json-render` | Typed catalog + JSON spec → components; after tokens/direction or internal schema UI; never bypass Design Bank for marketing | | `motion` | `emil-design-eng` | Micro-interactions, spring physics, touch feel | | `scroll_2d` | `scroll-craft` | Scrollytelling, pinned 2D timelines, scroll triggers | | `scroll_3d` | `scroll-world` | Continuous 3D fly-through, camera-scrub worlds | | `img3d` | `img2threejs` | Procedural Three.js models from reference images | | `docs` | `smartdoc` | Technical docs, OCR/PDF/DOCX extraction & contracts | +| `slides_pptx` | `deck-design` | Consulting PPTX / 16:9 HTML decks; smartdoc keeps PDF/DOCX; markitdown keeps ingest | | `ingest_md` | `markitdown` | Structure-preserving Markdown ingest from Office/PDF | | `prose` | `humanizer` / `/unslop` | Prose AI-tell removal; technical docs stay `technical-writing` | | `academic` | `academic` | Literature surveys, IMRaD manuscripts, peer critique | +| `longdoc_nav` | `pageindex` | Tree/reasoning nav of long structured docs; not Graphiti/Cognee/second CBM | | `browser_qa` | `playwright-qa` → `browser-act` → `chrome-devtools-axi` → `click-path-audit` | 4-door hierarchy; isolated verification sessions | | `video_html` | `hyperframes` | Programmatic HTML-to-MP4 via headless Chrome + FFmpeg | | `demo_id` | `id-demo-video` (`/demo-video`) | Indonesian narrated app tour; cards via hyperframes | @@ -76,11 +79,11 @@ MANUAL_NOT_INVOKED Never list unused tools as used. -UI direction from the bank routes to `found-this-design` first, which stops before component implementation. Visual UI and UI atoms (buttons, inputs, cards, nav) route to `impeccable` after Design V2 shortlist; BANK_MISS ≠ generate (+ shadcn/Design V2 internal). Stitch MCP is for screen/comp generation only, then found-this-design or impeccable with Design V2 atom shortlisting; never implement production UI from Stitch alone. UI Skills MCP is design-skill lookup only; product UI remains Design Bank + Impeccable + Design V2 atoms + shadcn; BANK_MISS ≠ generate from a random ui-skills document. Motion UI routes to `emil-design-eng`. Still/ads/non-UI surface route to `visual-studio`. Scroll-led stories route to `scroll-craft`, while continuous camera 3D fly-throughs route to `scroll-world`. Procedural Three.js object models from reference images route to `img2threejs`. +UI direction from the bank routes to `found-this-design` first, which stops before component implementation. Visual UI and UI atoms (buttons, inputs, cards, nav) route to `impeccable` after Design V2 shortlist; BANK_MISS ≠ generate (+ shadcn/Design V2 internal). Stitch MCP is for screen/comp generation only, then found-this-design or impeccable with Design V2 atom shortlisting; never implement production UI from Stitch alone. UI Skills MCP is design-skill lookup only; product UI remains Design Bank + Impeccable + Design V2 atoms + shadcn; BANK_MISS ≠ generate from a random ui-skills document. Motion UI routes to `emil-design-eng`. Still/ads/non-UI surface route to `visual-studio`. Scroll-led stories route to `scroll-craft`, while continuous camera 3D fly-throughs route to `scroll-world`. Procedural Three.js object models from reference images route to `img2threejs`. Schema/JSON generative UI from a typed catalog routes to `json-render` (after tokens/direction or internal schema UI; never bypass Design Bank for marketing). Browser verification follows four explicit doors: exploratory application UI routes to `playwright-qa`, persistent multi-account sessions route to `browser-act`, observed Chromium cause routes to `chrome-devtools-axi`, and button handler sequential undo / shared-store side effects route to `click-path-audit`. -Documents (answer, create, transform, extract, review, PDF/DOCX) route to `smartdoc`. File-to-Markdown ingest routes to `markitdown`. Reusable book/module knowledge routes to `smartbook-ingest`. `/docx` and `/pdf` are missing aliases; nearest is `smartdoc`. `/pptx` is NOT_APPLICABLE. Do not add `commands/pdf.md` or `commands/docx.md`. Impeccable `document` remains DESIGN.md generation. +Documents (answer, create, transform, extract, review, PDF/DOCX) route to `smartdoc`. Consulting PPTX / 16:9 slide decks route to `deck-design`. Long structured document tree/reasoning nav routes to `pageindex`. File-to-Markdown ingest routes to `markitdown`. Reusable book/module knowledge routes to `smartbook-ingest`. `/docx` and `/pdf` are missing aliases; nearest is `smartdoc`. `/pptx` routes to `deck-design`. Do not add `commands/pdf.md` or `commands/docx.md`. Impeccable `document` remains DESIGN.md generation. Prose AI-tell removal and natural tone polishing route to `humanizer` (`/unslop` is its manual alias). Scholarly research, academic manuscripts, and structured peer critique route to `academic`. Deterministic HTML composition rendered to video routes to `hyperframes`. Demo video aplikasi, walkthrough layar, narasi Indonesia, dan demo lomba route to `id-demo-video` (bukan `hyperframes` untuk durasi panjang utuh, bukan `playwright-qa`, bukan `visual-studio`). Kartu judul HTML→MP4 tetap `hyperframes`. Editorial technical diagrams (HTML/SVG) route to `diagram-design`. diff --git a/docs/skills.md b/docs/skills.md index b8607b9..270de23 100644 --- a/docs/skills.md +++ b/docs/skills.md @@ -2,10 +2,10 @@ Policy: `vendor/skill-policy.json` plus `vendor/skill-allowlist.txt`. -- 47 model-invoked skills live under `skills/` and install to `~/.config/opencode/skills/` (core + Wave 2/3 warehouse specialists) +- 50 model-invoked skills live under `skills/` and install to `~/.config/opencode/skills/` (core + Wave 2/3 warehouse specialists + 0.1.7 `json-render`, `deck-design`, `pageindex`) - 15 manual skills live under `manual-skills/` and install to `~/.config/opencode/highend/skills/` plus `commands/` -`smartdoc` is per-job document intelligence. `markitdown` converts Office/PDF/HTML/CSV/XLSX/PPTX/EPUB/ZIP to Markdown for ingest; SmartDoc keeps contract/QA/render. `smartbook-ingest` compiles reusable local knowledge. `humanizer` cleans user-facing prose tells (`/unslop` is its manual alias). `academic` manages scholarly research, writing, and peer review. `hyperframes` handles deterministic HTML-to-MP4 video composition. `id-demo-video` coordinates Indonesian application demo video production (`/demo-video` is its manual slash command). `diagram-design` crafts editorial HTML/SVG diagrams. `img2threejs` reconstructs procedural Three.js models from reference images. Warehouse diagnostics include `agent-architecture-audit` (agent stack layers), `cost-aware-llm-pipeline` (token budgeting), `eval-harness` (benchmarks), `prompt-optimizer` (prompt refinement), and `skill-stocktake` (catalog hygiene). Wave 3 adds `api-design`, `contract-first`, `automation-audit-ops`, `code-tour`, and `click-path-audit`. Handwriting is a SmartDoc renderer, not a skill. +`smartdoc` is per-job document intelligence. `deck-design` owns consulting PPTX / 16:9 HTML slide decks. `pageindex` owns tree/reasoning navigation of long structured documents. `json-render` owns schema/JSON generative UI after tokens/direction (or internal schema UI). `markitdown` converts Office/PDF/HTML/CSV/XLSX/PPTX/EPUB/ZIP to Markdown for ingest; SmartDoc keeps contract/QA/render. `smartbook-ingest` compiles reusable local knowledge. `humanizer` cleans user-facing prose tells (`/unslop` is its manual alias). `academic` manages scholarly research, writing, and peer review. `hyperframes` handles deterministic HTML-to-MP4 video composition. `id-demo-video` coordinates Indonesian application demo video production (`/demo-video` is its manual slash command). `diagram-design` crafts editorial HTML/SVG diagrams. `img2threejs` reconstructs procedural Three.js models from reference images. Warehouse diagnostics include `agent-architecture-audit` (agent stack layers), `cost-aware-llm-pipeline` (token budgeting), `eval-harness` (benchmarks), `prompt-optimizer` (prompt refinement), and `skill-stocktake` (catalog hygiene). Wave 3 adds `api-design`, `contract-first`, `automation-audit-ops`, `code-tour`, and `click-path-audit`. Handwriting is a SmartDoc renderer, not a skill. OpenCode 2 discovers `~/.config/opencode/skills` and project `.opencode/skills`. Manual skills must not be copied into those directories; they live under `~/.config/opencode/highend/skills/` and are invoked only as `~/.config/opencode/commands/.md` (or project `.opencode/commands/.md`). diff --git a/docs/source-wave.md b/docs/source-wave.md index aa146eb..a1e004d 100644 --- a/docs/source-wave.md +++ b/docs/source-wave.md @@ -22,7 +22,8 @@ Recorded per Phase 0 contract. | [microsoft/playwright-cli](https://github.com/microsoft/playwright-cli) | `0.1.17` / Apache-2.0 | Lightweight CLI for exploratory browser automation and interactive QA. | **REFRESH** | `skills/playwright-qa` | Refreshed with CLI diagnostic commands (`find`, `highlight`, `tracing`, `console`). Kept within <=200 line budget and 4-door browser hierarchy. | | [jkudish/jev-mcp](https://github.com/jkudish/jev-mcp) | upstream ref | Issue/ticket tracking and Canny task verification MCP server. MIT. | **SKIPPED** | None (`rules/decision-log-protocol.md`, `rules/01-verification.md`, `docs/mcp.md`) | Intentionally skipped as required runtime MCP; core done-gate operates offline. Canny done-gate conventions absorbed directly into rules and decision-log (`FACT:` vs `JUDGMENT:`). | | [qkal/Canny](https://github.com/qkal/Canny) | upstream ref | Canny feedback/task verification and done-gate workflow. | **MERGE** | `rules/01-verification.md`, `rules/decision-log-protocol.md`, `manual-skills/decision-log/` | Merge offline typed-gate patterns (assertions ≠ proof, missing facts halt, auto vs review). No runtime server. | -| Other Jev demos (ultrafast, compaction, trader, drone, mario, OneVOne, neo4jev, killmyidea, jev-review, jev-curate, jev-codex-router, typesafe-mcp, json-render, SemDecide, Winnow, Blink, agent-desktop, Prism, …) | upstream refs | Specialized niche autonomous demos and router experiments. | **REJECT** | None | Reject monolithic demo bloat and foreign router layers. OpenCodeHighEnd foundation remains clean and focused. | +| Other Jev demos (ultrafast, compaction, trader, drone, mario, OneVOne, neo4jev, killmyidea, jev-review, jev-curate, jev-codex-router, typesafe-mcp, SemDecide, Winnow, Blink, agent-desktop, Prism, Jev json-render compose, …) | upstream refs | Specialized niche autonomous demos and router experiments. | **REJECT** | None | Reject monolithic demo bloat and foreign router layers. OpenCodeHighEnd foundation remains clean and focused. `vercel-labs/json-render` is a separate Apache-2.0 source (see ADD row); Jev compose APIs stay REJECT. | +| [vercel-labs/json-render](https://github.com/vercel-labs/json-render) | `c2600d73908ed505e6d726f5b6f969ba8f597ce7` | Generative UI framework: typed catalog + JSON spec → renderers. Apache-2.0. | **DONE** | `skills/json-render` | First-party wrapper. npm packages not vendored. After tokens/direction or internal schema UI. Never bypass Design Bank for marketing. Experimental Jev compose not ported. | | [itsmostafa/typesafe-mcp](https://github.com/itsmostafa/typesafe-mcp) | upstream ref | TypeSafe external API integration MCP. | **REJECT** | None | Reject as additional core MCP. Core remains codebase-memory-mcp, context7, shadcn. | | [ai-boost/awesome-harness-engineering](https://github.com/ai-boost/awesome-harness-engineering) | upstream ref | Agent harness patterns, context hygiene, fail-closed gates. | **MERGE** | `templates/AGENTS.md`, `docs/architecture.md`, `rules/00-routing.md` | Merge harness-over-model, artifact-gated specialist graph, and context boundary principles. | | [PaulRBerg/agent-skills](https://github.com/PaulRBerg/agent-skills) | upstream ref | Agent coding skills and engineering conventions. | **CHERRY-PICK** | `rules/00-routing.md`, `skills/codebase-design/` | Cherry-pick module interface and seam principles. Do not vendor catalog; `frontend-design` must not become a skill. | @@ -50,8 +51,9 @@ Recorded per Phase 0 contract. | [CopilotKit/openmuse](https://github.com/CopilotKit/openmuse) | upstream ref | Personal agent application (mobile/web, Hono API server, Playwright worker, container computer). MIT. | **REJECT** | None | Full multi-service personal agent application infrastructure. Outside the scope of an OpenCode skill overlay. | | [tt-a1i/archify](https://github.com/tt-a1i/archify) | upstream ref | Agent skill for interactive HTML architecture and sequence diagrams. MIT. | **PIN_ONLY** | `skills/diagram-design` | Same capability already owned and pinned by `skills/diagram-design` (`dc1ace47b99a`). Do not introduce a duplicate 63rd diagram skill. | | [nilbuild/video-demo](https://github.com/nilbuild/video-demo) | upstream ref | Web app demo video recording with zoom-ins and voiceover via Playwright + TTS. MIT. | **POINTER_ONLY** | `skills/id-demo-video`, `skills/hyperframes` | Video walkthroughs and demo recordings already owned by `id-demo-video` (narrated tour) and `hyperframes` (deterministic HTML video). Do not add parallel video demo skill. | -| [carnot-tech/consulting-pptx-skill](https://github.com/carnot-tech/consulting-pptx-skill) | upstream ref | Consulting slide generator with 62 slide templates and checks. MIT. | **POINTER_ONLY** | `skills/smartdoc` | Specialized Japanese consulting slide factory. Document contracts, Office reviews, and structured ingest stay strictly under `smartdoc` and `markitdown`. Do not vendor slide generation templates. | +| [carnot-tech/consulting-pptx-skill](https://github.com/carnot-tech/consulting-pptx-skill) | `f50edac656d34636f026afec9e6dbb3697f4c6d4` | Consulting slide rules, archetypes, and mechanical checks. MIT. | **DONE** | `skills/deck-design` | First-party wrapper + condensed English rule sheet. Upstream 62-type HTML/PPTX packs not vendored. smartdoc keeps PDF/DOCX; markitdown keeps ingest. | | [blixvip/NullMotion](https://github.com/blixvip/NullMotion) | upstream ref | Motion graphics launch-film preview over HyperFrames drafts. No license. | **POINTER_ONLY** | `skills/hyperframes` (`references/brag.md`) | Unlicensed repository (`license: null`). 18s launch video card pattern already synthesized in `skills/hyperframes/references/brag.md`. Do not vendor unlicensed assets or add duplicate skill. | | [getzep/graphiti](https://github.com/getzep/graphiti) + [topoteretes/cognee](https://github.com/topoteretes/cognee) | upstream refs | Temporal entity knowledge graphs and memory pipelines for AI agents. | **REJECT** | None (`docs/mcp.md` pointer) | External memory graph databases requiring dedicated services/neo4j backends. Codebase indexing and symbol memory is strictly owned by `codebase-memory-mcp` (v0.11.0). Never add extra core MCP servers. | -| [THU-MAIC/OpenMAIC](https://github.com/THU-MAIC/OpenMAIC) + [Tencent/WeKnora](https://github.com/Tencent/WeKnora) + [VectifyAI/PageIndex](https://github.com/VectifyAI/PageIndex) + [open-webui/open-webui](https://github.com/open-webui/open-webui) + [QwenAudio/qwen-audio-agent](https://github.com/QwenAudio/qwen-audio-agent) | upstream refs | Multi-agent research suites, enterprise RAG platforms, web UI shells, and specialized audio agent models. | **REJECT** | None | Monolithic SaaS/RAG platforms and specialized modal model architectures. Outside the scope of OpenCodeHighEnd. | +| [THU-MAIC/OpenMAIC](https://github.com/THU-MAIC/OpenMAIC) + [Tencent/WeKnora](https://github.com/Tencent/WeKnora) + [open-webui/open-webui](https://github.com/open-webui/open-webui) + [QwenAudio/qwen-audio-agent](https://github.com/QwenAudio/qwen-audio-agent) | upstream refs | Multi-agent research suites, enterprise RAG platforms, web UI shells, and specialized audio agent models. | **REJECT** | None | Monolithic SaaS/RAG platforms and specialized modal model architectures. Outside the scope of OpenCodeHighEnd. PageIndex is a separate MIT source (see ADD/DONE row). | +| [VectifyAI/PageIndex](https://github.com/VectifyAI/PageIndex) | `037a7dbacfb9a19f38b354ce60cee5094b3f854c` | Vectorless tree/reasoning RAG for long documents. MIT. | **DONE** | `skills/pageindex` | First-party wrapper. Local tree-then-reason; SDK optional on the user machine. Cloud MCP not registered. Not Graphiti/Cognee/second codebase-memory. Degrade `NOT_CONFIGURED`. | | [jakubkrehel/better-interface](https://ui-skills.com) | ui-skills upstream | Tactile interface guidelines (no hairline-only affordances, contrast boundaries). MIT. | **MERGE** | `skills/emil-design-eng/references/interface-feel.md` | Key tactile checklist item ("No Hairline-Only Affordances") merged into `interface-feel.md`. No new skill folder. | diff --git a/rules/00-routing.md b/rules/00-routing.md index 0faa639..2400a41 100644 --- a/rules/00-routing.md +++ b/rules/00-routing.md @@ -26,9 +26,9 @@ Do not infer a model provider from a logical model name. Treat custom-gateway al The router classifies every user task into exactly one closed intent: ```text -repo_understand | bug | security | perf | ui_direction | ui_implement +repo_understand | bug | security | perf | ui_direction | ui_implement | generative_ui motion | scroll_2d | scroll_3d | img3d | docs | ingest_md | prose -academic | browser_qa | architecture | warehouse | ops_data | video_html | demo_id +academic | longdoc_nav | browser_qa | architecture | warehouse | ops_data | video_html | demo_id | slides_pptx ``` | Intent | Primary Route | Handoff Boundary / Rule | @@ -40,14 +40,17 @@ academic | browser_qa | architecture | warehouse | ops_data | video_html | demo_ | `perf` | `full-performance-audit` | Measured LCP/INP/CLS/latency/bundle bottlenecks | | `ui_direction` | `found-this-design` | Stop after writing `.impeccable/found-this-design.json` | | `ui_implement` | `impeccable` | Requires pinned world or project `DESIGN.md` | +| `generative_ui` | `json-render` | Typed catalog + JSON spec → components; after tokens/direction or internal schema UI; never bypass Design Bank for marketing | | `motion` | `emil-design-eng` | Micro-interactions, spring physics, touch feel | | `scroll_2d` | `scroll-craft` | Scrollytelling, pinned 2D timelines, scroll triggers | | `scroll_3d` | `scroll-world` | Continuous 3D fly-through, camera-scrub worlds | | `img3d` | `img2threejs` | Procedural Three.js models from reference images | | `docs` | `smartdoc` | Technical docs, OCR/PDF/DOCX extraction & contracts | +| `slides_pptx` | `deck-design` | Consulting PPTX / 16:9 HTML decks; smartdoc keeps PDF/DOCX; markitdown keeps ingest | | `ingest_md` | `markitdown` | Structure-preserving Markdown ingest from Office/PDF | | `prose` | `humanizer` / `/unslop` | Prose AI-tell removal; technical docs stay `technical-writing` | | `academic` | `academic` | Literature surveys, IMRaD manuscripts, peer critique | +| `longdoc_nav` | `pageindex` | Tree/reasoning nav of long structured docs; not Graphiti/Cognee/second CBM | | `browser_qa` | `playwright-qa` → `browser-act` → `chrome-devtools-axi` → `click-path-audit` | 4-door hierarchy; isolated verification sessions | | `video_html` | `hyperframes` | Programmatic HTML-to-MP4 via headless Chrome + FFmpeg | | `demo_id` | `id-demo-video` (`/demo-video`) | Indonesian narrated app tour; cards via hyperframes | @@ -93,10 +96,10 @@ Never list unused tools or uncalled MCP methods as used. - Scholarly literature surveys, academic manuscripts (IMRaD/thesis/proposal), and structured peer critique: `/academic` (not `research`, not `smartdoc` unless file extract/render). - Fuzzy or conflicting domain terms, glossary, CONTEXT.md / ADR writing: `/domain-modeling`. Full product interviews that should leave CONTEXT.md/ADRs: `/grill-with-docs`. - Module, interface, seam, testability, abstraction: `/codebase-design` (distinct from `/api-design` for REST and `/contract-first` for machine schemas). Multi-sketch bake-off: suggest `/architect` (manual). Do not auto-start `/architect`. -- Throwaway evidence for one design question: `/prototype`. Not for production UI; skip ordinary implementation, ADHD, and `/arena`. +- Throwaway evidence for one design question: `/prototype`. Not for production UI; skip ordinary implementation, ADHD, and `/arena`. Schema/JSON generative UI: `/json-render`. - Unknown / hard bugs, regressions, measured slowdown: `/diagnosing-bugs`. Skip typos, known-cause, and test-first known fixes (`/tdd`). - Authoring SKILL.md / AGENTS.md / skill descriptions / context pointers: `/writing-for-agents` (distinct from `/skill-stocktake` which audits catalog hygiene). Workflow choice is handled directly by the router without a specialist. -- Documents (answer, create, transform, extract, review, PDF/DOCX): `/smartdoc`. File to Markdown ingest: `/markitdown`. Reusable book/module knowledge: `/smartbook-ingest`. SmartDoc may read an existing SmartBook; that is not a second implementation specialist. Impeccable `document` stays DESIGN.md. +- Documents (answer, create, transform, extract, review, PDF/DOCX): `/smartdoc`. Consulting PPTX / 16:9 slide decks: `/deck-design`. Long structured document tree/reasoning nav: `/pageindex`. File to Markdown ingest: `/markitdown`. Reusable book/module knowledge: `/smartbook-ingest`. SmartDoc may read an existing SmartBook; that is not a second implementation specialist. Impeccable `document` stays DESIGN.md. - Prose AI-tell removal and natural tone polishing: `/humanizer`. Manual `/unslop` is an alias to the same specialist body. Do not auto-apply on ordinary code or diffs. Technical documentation structure stays `/technical-writing`. Code linting stays `/install-anti-slop`. Prompt structure stays `/prompt-optimizer`. - Editorial HTML and inline SVG diagrams (architecture, sequence, ER, flowcharts, Wardley): `/diagram-design`. Mermaid/draw.io are inputs to redraw, not final output. Frontend UI implementation stays `/impeccable`. Code-level seams stay `/codebase-design`. - Agent architecture diagnosis, autonomous loop failures, context leakage, wrapper regressions: `/agent-architecture-audit`. Load only when user names the agent stack job. Defensive security and secrets auditing stay `/full-audit-keamanan`. @@ -130,7 +133,7 @@ The specialist architecture forms a deterministic graph connected by file artifa ## UI and browser - Matching or choosing a visual direction from the local design bank (Refero / Motionsites): `/found-this-design` first. Stop before component implementation. Then `/impeccable` after a pick. Bank root comes from `~/.config/opencode/highend/config/design-bank.json` (optional override `OPENCODE_DESIGN_BANK`). -- Visual UI once a world is chosen, the brief is already visual, or creating UI atoms (buttons, inputs, cards, nav): UI atoms → impeccable after Design V2 shortlist; BANK_MISS ≠ generate. Design V2 shortlist `kind=component` is an internal stage, never a separate specialist route. Do not run `/found-this-design` for atomic components. +- Visual UI once a world is chosen, the brief is already visual, or creating UI atoms (buttons, inputs, cards, nav): UI atoms → impeccable after Design V2 shortlist; BANK_MISS ≠ generate. Design V2 shortlist `kind=component` is an internal stage, never a separate specialist route. Do not run `/found-this-design` for atomic components. Schema-driven generative UI from a typed catalog: `/json-render` after tokens/direction exist, or for internal schema UI; never bypass Design Bank for marketing; never Jev compose. - Design Intelligence is an internal, lazy retrieval stage of Impeccable `new-work`, never a primary route or specialist. Design V2 is the same: an offline user bank, never a specialist. - Stitch MCP: screen/comp generation only; then found-this-design or impeccable + Design V2 atoms. Never implement production UI from Stitch alone. Treat existing Stitch screens as approved comps; local atom shortlist remains mandatory. - UI Skills MCP: design-skill lookup only. Product UI remains Design Bank + Impeccable + Design V2 atoms + shadcn. BANK_MISS ≠ generate from a random ui-skills document. @@ -173,7 +176,7 @@ The specialist architecture forms a deterministic graph connected by file artifa | `/review` `/code-review` | in-session review; `/matt-code-review` if two-axis | | `/imagine` | NOT_APPLICABLE; directors stay visual-studio / scroll-craft / scroll-world | | `/docx` `/pdf` | missing alias; nearest = `smartdoc` (do not add `commands/pdf.md` or `commands/docx.md`) | -| `/pptx` | NOT_APPLICABLE | +| `/pptx` | `deck-design` | | `/pr-babysit` | `/gh-axi` | | `game-asset-*` `/resume-*` `/build-with-ai` | NOT_APPLICABLE | diff --git a/skills/deck-design/NOTICE.md b/skills/deck-design/NOTICE.md new file mode 100644 index 0000000..07c5a11 --- /dev/null +++ b/skills/deck-design/NOTICE.md @@ -0,0 +1,11 @@ +# Notice: deck-design + +Adapted from [carnot-tech/consulting-pptx-skill](https://github.com/carnot-tech/consulting-pptx-skill) +(`f50edac656d34636f026afec9e6dbb3697f4c6d4`). + +MIT License. Copyright (c) carnot-tech contributors. + +OpenCodeHighEnd ships a first-party skill wrapper and a condensed English +rule sheet. Upstream 62-type HTML/PPTX template packs, `check_deck.py`, and +`new_deck.py` are not vendored. Use them from a clone of the upstream repo +if the user already has one; this overlay does not install them. diff --git a/skills/deck-design/SKILL.md b/skills/deck-design/SKILL.md new file mode 100644 index 0000000..ddf0136 --- /dev/null +++ b/skills/deck-design/SKILL.md @@ -0,0 +1,50 @@ +--- +name: deck-design +description: Consulting-grade PPTX and 16:9 HTML slide decks with archetypes and mechanical checks. Use for slide factories, board decks, consulting PPTX, and check_deck-style reviews. smartdoc keeps PDF/DOCX contracts; markitdown keeps ingest. Not email HTML. Not product UI. +compatibility: opencode +license: MIT +--- + +# deck-design + +Consulting slide specialist. One slide = one message. Titles carry the conclusion. + +Intent: `slides_pptx`. Generating or mechanically checking decks lives here. +`smartdoc` = PDF/DOCX contracts. `markitdown` = ingest existing PPTX to Markdown. +Impeccable `email.md` = HTML email. `diagram-design` = editorial SVG, not slides. + +## When + +- User asks for consulting slides, board deck, PPTX, 16:9 HTML sections, or a slide-rules check. +- A storyline of titles must be written before layout. + +## When not + +- Per-job document intelligence, OCR, letters, forms → `smartdoc`. +- Convert existing PPTX to Markdown → `markitdown`. +- Product UI / marketing site → `found-this-design` / `impeccable`. +- Do not vendor upstream 62-type HTML/PPTX template packs into this overlay. + +## Load + +- Rules: [references/rules.md](references/rules.md) +- Attribution: [NOTICE.md](NOTICE.md) + +## Pipeline + +1. Lock purpose, audience, IN/OUT (3–5 lines). +2. Write a **title storyline** (one concluding title per slide). Titles alone must read as a story. +3. Pick a showing (table with axes, chart, two-column fact/implication, metric cards). Do not dump charts into tables. +4. Draft 16:9 HTML (`1 section = 1 slide`) using project or first-party CSS tokens. No rounded-rect decoration kit. No POINT footer band. +5. Mechanical check against [references/rules.md](references/rules.md). FAIL must be 0 before ship (cover/back-cover empty-title WARN allowed). +6. Human pass: overlapping, overflow, empty lower half, hyphenation, left/right baseline mismatch. +7. PPTX export is optional. Prefer PDF/HTML. If `python-pptx` (or an equivalent the **project** already has) is missing, export is `NOT_CONFIGURED` — do not pip-install into the overlay. + +Missing Chromium for print-to-PDF is `NOT_CONFIGURED`, not PASS. Never Google Chrome as a required binary; headless Chromium if the host already has it. + +## Hard rules + +- Do not copy `assets/SuperTemplate_62type.pptx` or upstream parts HTML into the overlay. +- Do not put “generated by …” on every slide; one source line on the back cover is enough. +- Numbers in the title must match body counts. +- SmartDoc must not generate PPTX. diff --git a/skills/deck-design/references/rules.md b/skills/deck-design/references/rules.md new file mode 100644 index 0000000..ff68d78 --- /dev/null +++ b/skills/deck-design/references/rules.md @@ -0,0 +1,34 @@ +# Slide rules (condensed) + +Adapted from `carnot-tech/consulting-pptx-skill` slide-rules (MIT). Full upstream +list is ~80 items; this sheet is the overlay fence. Do not vendor the 62-type +catalog. + +## Story + +- Title states the conclusion. Default one line; break at a meaning boundary, never shrink-to-fit. +- No です/ます (or English equivalent filler). Titles concatenated must form one story. +- One slide = one message. Left = fact/figure, right = implication. No bottom “POINT” band. +- Title counts must match body numbering. Do not put the page’s item count in the title. + +## Tables and figures + +- Tables have axes (rows = items, columns = lenses). Header is larger/bolder than body, no fill, no thin-grey header color. +- Header vs body: at least +2pt (aim +3–4pt). Last row has no bottom rule. +- Trends, mix, and distributions are charts, not tables. +- Equal-width columns when cells are the same kind (dates, options, orgs). + +## Decoration + +- No rounded rectangles as a chrome system. Filled boxes have no extra outline. +- If color encodes meaning, the same slide carries a legend. +- No decorative kicker in all-caps English. Two-column headings must not start with a conjunction (“So”, “Therefore”, “だから”). +- One term per deck. Expand abbreviations on first use. Bullet endings match within a level. + +## Checks before ship + +- [ ] Title storyline reads as one argument +- [ ] FAIL-level rule breaches = 0 +- [ ] Cover/back-cover empty-title WARN only if those pages are intentionally untitled +- [ ] Print or Chromium PDF pass: no overlap, no clip, no empty lower half +- [ ] PPTX requested but no exporter → `NOT_CONFIGURED` diff --git a/skills/emil-design-eng/references/interface-feel.md b/skills/emil-design-eng/references/interface-feel.md index 496e340..ddb192d 100644 --- a/skills/emil-design-eng/references/interface-feel.md +++ b/skills/emil-design-eng/references/interface-feel.md @@ -64,9 +64,11 @@ Tactile polish and interface feel principles merged from `make-interfaces-feel-b - [ ] **Press Feedback Discipline**: Interactive cards and buttons should respond with subtle downward scaling (`transform: scale(0.97)`) on pointerdown, resolving cleanly on pointerup within 100–150ms. - [ ] **Reduced-Motion Fallback**: When `prefers-reduced-motion: reduce` is enabled, zero out spatial translations and physical bounces while preserving opacity fades for state clarity. - [ ] **No Hairline-Only Affordances (better-interface MERGE)**: Interactive elements must not rely strictly on a 1px border to communicate clickable boundaries; use background contrast, elevation, or padded hit targets. +- [ ] **Contrast boundaries**: Adjacent surfaces that are only separated by a 1px line must also differ in fill, elevation, or padding so the edge survives 200% zoom and grayscale. +- [ ] **State is not hue-only**: hover / active / disabled / selected remain distinguishable without color (weight, icon, pattern, or copy). ## 6. Layered Shadows & Adaptive Flow (mengto/beautiful-shadows + pbakaus/adapt + superfuture/design-review MERGE) - [ ] **Multi-Stop Ambient Shadows**: Simulate realistic ambient illumination by layering multiple subtle box-shadows (sharp contact shadow + mid ambient diffusion) rather than single harsh offsets. -- [ ] **Container-Adaptive Components**: Use CSS container queries (`@container`) on self-contained cards and modules so they adapt fluidly to local container width rather than global viewport size alone. +- [ ] **Container-Adaptive Components**: Use CSS container queries (`@container`) on self-contained cards and modules so they adapt fluidly to local container width rather than global viewport size alone. Drop optional chrome before shrinking type below 14px inside a container. - [ ] **Pre-Verification Design Review**: Audit visual hierarchy, contrast ratios, concentric radius geometry, and hit targets before handing off to browser verification. diff --git a/skills/eval-harness/SKILL.md b/skills/eval-harness/SKILL.md index 38d741e..f1607a3 100644 --- a/skills/eval-harness/SKILL.md +++ b/skills/eval-harness/SKILL.md @@ -50,5 +50,5 @@ Consult [references/methodology.md](references/methodology.md) for detailed scor - `A ≈ B` on the skill's claimed task is evidence for `RETIRE` or `COMPRESS`; route that verdict to `skill-stocktake`. 6. **Adversarial & Safety Probes (External Playbook):** - - For agent red-teaming or multi-turn vulnerability probing aligned with OWASP LLM Top 10, maintainers may optionally consult external frameworks such as `confident-ai/deepteam` (Apache-2.0). - - This framework is external only; do not vendor it into the overlay or add it to project runtime dependencies. + - For agent red-teaming or multi-turn vulnerability probing aligned with OWASP LLM Top 10, maintainers may optionally consult `confident-ai/deepteam` (Apache-2.0) **outside** this overlay. + - OPTIONAL_POINTER only: never `pip install` into the overlay venv, never add an MCP or skill folder, never list it as CONFIGURED. Missing binary/package is `OPTIONAL_ABSENT`, not FAIL. diff --git a/skills/found-this-design/SKILL.md b/skills/found-this-design/SKILL.md index 6d97db0..5087e77 100644 --- a/skills/found-this-design/SKILL.md +++ b/skills/found-this-design/SKILL.md @@ -32,6 +32,7 @@ Generate a high-fidelity first-viewport photo of **this product** in each recomm ## Hard rules - Stop before component atoms; atoms are impeccable + Design V2. +- Schema/JSON generative UI (typed catalog → spec → components) routes to `json-render`. This skill remains visual direction from the Design Bank. - **Search with the scripts only.** Never read any `catalog.json` into context. - External brand pattern corpora (e.g. `awesome-design-md`) may be referenced by humans as styling ideas, but never fetched, cloned, or vendored into the project. Product UI direction flows strictly from the local Design Bank → `impeccable`. - Do not implement UI, copy a Motion prompt into code, or overwrite the project's `DESIGN.md` unless the user asked to pin files. diff --git a/skills/full-audit-keamanan/SKILL.md b/skills/full-audit-keamanan/SKILL.md index 89418ec..73a0610 100644 --- a/skills/full-audit-keamanan/SKILL.md +++ b/skills/full-audit-keamanan/SKILL.md @@ -13,7 +13,7 @@ Produce a practical, defensive security review that improves real-world resilien ## Reference Baseline Use current official/project baselines as orientation, not as a substitute for repository evidence: - OWASP Top 10, OWASP API Security Top 10, OWASP ASVS, OWASP Cheat Sheets -- OWASP Top 10 for LLM Applications when AI agents, RAG, prompt/tool use, or model gateways are present (optional external red-team playbook: `confident-ai/deepteam`, Apache-2.0; maintainer-side only, non-vendored, do not install into overlay) +- OWASP Top 10 for LLM Applications when AI agents, RAG, prompt/tool use, or model gateways are present. OPTIONAL_POINTER: `confident-ai/deepteam` (Apache-2.0) is maintainer-side only — never vendor, never pip-install into the overlay, never register as MCP/skill. Missing tool = `OPTIONAL_ABSENT`, not FAIL. - NIST SSDF / secure SDLC practices for supply-chain and build/release controls - Platform/vendor docs for framework-specific secure defaults diff --git a/skills/impeccable/reference/audit.md b/skills/impeccable/reference/audit.md index dea0ffa..b2f03eb 100644 --- a/skills/impeccable/reference/audit.md +++ b/skills/impeccable/reference/audit.md @@ -35,6 +35,31 @@ Detailed checklist: [accessibility.md](accessibility.md). **Optional React Tooling**: When auditing a React project AND the user explicitly asks or audit depth warrants component-level static profiling, run `npx react-doctor@latest` (or `npx react-doctor@latest design --verbose`). This is strictly an optional on-demand check; never require network/npx during default installation, and never add as a required skill. +### When to run react-doctor (OPTIONAL_TOOL, not a skill) + +Run only if **all** of these hold: + +- The tree is React (or Next/Remix with React). +- The user asked, or Implementation Integrity / Performance scores are ≤2 and smells below are unconfirmed. +- `npx` is available **and** the user accepts an on-demand network fetch. + +Skip when offline, when the project forbids npx, or when a default install/doctor run would pull packages. Absence is `OPTIONAL_ABSENT`, not FAIL. + +**React smell checklist** (confirm in source; do not auto-fix here): + +- Client components wrapping purely static trees +- Sequential waterfalls (`await` in a loop, uncached fetches in render) +- Missing list `key`, or index keys on reorderable lists +- `useState` holding derived values that should be computed +- `useEffect` used only to transform props into state +- Unstable object/array/function identities in hook deps or child props +- Barrel-importing a whole library for one symbol +- Context value recreated every render without memo +- Route/tree without an error boundary +- Hydration mismatch from `Date.now()`, `Math.random()`, or locale-only markup +- Premature `memo`/`useMemo` with no measured re-render cost +- Effects that subscribe without cleanup + **Score 0-4**: 0=Severe issues (layout thrash, unoptimized everything), 1=Major problems (no lazy loading, expensive animations), 2=Partial (some optimization, gaps remain), 3=Good (mostly optimized, minor improvements possible), 4=Excellent (fast, lean, well-optimized) ### 3. Theming diff --git a/skills/impeccable/reference/taste-guard.md b/skills/impeccable/reference/taste-guard.md index 652afd0..4d585ae 100644 --- a/skills/impeccable/reference/taste-guard.md +++ b/skills/impeccable/reference/taste-guard.md @@ -53,6 +53,10 @@ Before shipping UI, verify against the four gates: - Review desktop and mobile renders together under observed browser inspection. - Confirm layout stability (e.g. `min-h-[100dvh]` to prevent viewport jumping). - Verify all packages exist in `package.json` before importing; no unrequested heavy dependencies. + - No leftover lorem, TODO, placeholder avatars, or fake logos in Persuade or Operate. + - LCP-relevant images declare width/height or CSS `aspect-ratio`. + - Above-the-fold copy includes at least one concrete product fact (liveliness), not a manifesto. + - Tone matches surface mode: Operate uses verbs and status; Persuade may be bolder but never fake proof. --- diff --git a/skills/json-render/NOTICE.md b/skills/json-render/NOTICE.md new file mode 100644 index 0000000..cc7f0a1 --- /dev/null +++ b/skills/json-render/NOTICE.md @@ -0,0 +1,21 @@ +# Notice: json-render + +Adapted from [vercel-labs/json-render](https://github.com/vercel-labs/json-render) +(`c2600d73908ed505e6d726f5b6f969ba8f597ce7`). + +Copyright 2025 Vercel Inc. + +Licensed under the Apache License, Version 2.0 (the "License"). +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. + +OpenCodeHighEnd ships a first-party skill wrapper only. npm packages are +not vendored. Experimental Jev composition from upstream docs is not +ported. diff --git a/skills/json-render/SKILL.md b/skills/json-render/SKILL.md new file mode 100644 index 0000000..f8f5224 --- /dev/null +++ b/skills/json-render/SKILL.md @@ -0,0 +1,49 @@ +--- +name: json-render +description: Generative UI from a typed JSON/schema catalog into project components. Use when the user wants schema-driven UI, a component catalog with JSON specs, or json-render catalogs/registries. After tokens/direction exist, or for internal schema-driven UI. Never bypass Design Bank for marketing UI. Not a replacement for impeccable craft. Not Jev compose. +compatibility: opencode +license: Apache-2.0 +--- + +# json-render + +Guardrailed generative UI: AI emits JSON constrained to a catalog you define; a renderer maps that spec onto real components. + +Intent: `generative_ui`. Primary specialist for schema/JSON UI. Visual direction still `found-this-design` → `impeccable`. Throwaway look-and-feel variants stay `prototype`. + +## When + +- Internal tools, dashboards, or agent UIs driven by a typed catalog + JSON spec. +- After a Design Bank pin or project `DESIGN.md` / tokens exist, when the job is *spec → components*, not *invent a brand*. +- User names json-render, generative UI, catalog/spec rendering, or `@json-render/*`. + +## When not + +- Marketing / landing / product chrome without a pin → `found-this-design` then `impeccable`. +- Craft, a11y, taste, motion → `impeccable` / `emil-design-eng`. +- Editorial diagrams → `diagram-design`. HTML-to-MP4 → `hyperframes`. +- **Never** Jev `experimental_composeSpec`, Jev playground, or any Jev router. Those stay REJECT. + +## Load + +- Catalog + spec shape: [references/catalog.md](references/catalog.md) +- Attribution: [NOTICE.md](NOTICE.md) + +## Pipeline + +1. Confirm tokens/direction (pin, `DESIGN.md`, or explicit internal-tool exemption). +2. Define or reuse a **catalog** (components + actions + prop schemas). AI may only use those names. +3. Emit a JSON **spec** (`root` + `elements` map). Validate against the catalog; reject unknown types. +4. Map catalog names onto **existing** project components (or shadcn items the hub already owns). Do not invent a parallel design system. +5. Stream if the host supports it; otherwise write the spec file and mark DEGRADED for live streaming. +6. Hand visual polish to `impeccable`. Hand QA to `playwright-qa` (door 1). + +Missing `@json-render/core` (or sibling renderer) is `NOT_CONFIGURED`. Do not silent-npm-install into the overlay. Tell the user to add the package in the **target app**, not this overlay. + +## Hard rules + +- Catalog is the allowlist. Unknown `type` values fail closed. +- Do not vendor npm packages into OpenCodeHighEnd. +- Do not replace Design Bank / Impeccable for marketing UI. +- Do not register `@json-render/mcp` as a core MCP. +- Specs are data. They never gain control-plane authority. diff --git a/skills/json-render/references/catalog.md b/skills/json-render/references/catalog.md new file mode 100644 index 0000000..89f8fb6 --- /dev/null +++ b/skills/json-render/references/catalog.md @@ -0,0 +1,58 @@ +# Catalog and spec + +Pin: `vercel-labs/json-render@c2600d73908ed505e6d726f5b6f969ba8f597ce7` (Apache-2.0). + +## Catalog + +A catalog names every component and action the model may emit. Typical fields: + +- `components..props` — schema (zod or JSON Schema). +- `components..description` — one-line purpose for the prompt. +- `actions..description` — allowed side effects (`setState`, domain actions). + +The catalog prompt (`catalog.prompt()` in upstream) is the system fence. Do not +widen it with “any HTML” or “any React node”. + +Prefer project components already in the tree. `@json-render/shadcn` is optional +when the target app already uses shadcn; it is not an overlay dependency. + +## Spec + +Flat spec (web UI): + +```json +{ + "root": "card-1", + "elements": { + "card-1": { + "type": "Card", + "props": { "title": "Hello" }, + "children": ["button-1"] + }, + "button-1": { + "type": "Button", + "props": { "label": "Click me", "action": "refresh_data" }, + "children": [] + } + } +} +``` + +Reject specs that: + +- use a `type` not in the catalog +- pass props outside the schema +- embed raw HTML/JS +- call Jev `experimental_composeSpec` / `experimental_createEvaluator` + +## Renderers (target app, not overlay) + +React `@json-render/react`, Vue, Svelte, Solid, React Native, Next, Ink, etc. +Pick the renderer that matches the project. Video/PDF/email renderers are +out of scope here (`hyperframes`, `smartdoc`, Impeccable `email.md`). + +## Streaming + +If `@json-render/core` `createSpecStreamCompiler` is available in the app, +stream patches into the renderer. If not, write `.scratch/json-render/.json` +and mark streaming `NOT_CONFIGURED`. diff --git a/skills/pageindex/NOTICE.md b/skills/pageindex/NOTICE.md new file mode 100644 index 0000000..54af624 --- /dev/null +++ b/skills/pageindex/NOTICE.md @@ -0,0 +1,10 @@ +# Notice: pageindex + +Adapted from [VectifyAI/PageIndex](https://github.com/VectifyAI/PageIndex) +(`037a7dbacfb9a19f38b354ce60cee5094b3f854c`). + +MIT License. Copyright (c) 2026 PageIndex AI / VectifyAI. + +OpenCodeHighEnd ships a first-party skill wrapper describing tree/reasoning +navigation. The Python SDK, Cloud API, and MCP server are not vendored and +are not registered as core MCP. Cloud keys stay off the overlay. diff --git a/skills/pageindex/SKILL.md b/skills/pageindex/SKILL.md new file mode 100644 index 0000000..36ffd10 --- /dev/null +++ b/skills/pageindex/SKILL.md @@ -0,0 +1,48 @@ +--- +name: pageindex +description: Tree and reasoning-based navigation of long complex documents before answering. Use for vectorless long-doc RAG, filings, manuals, textbooks, and hierarchical TOC reasoning. Not Graphiti/Cognee. Not a second codebase-memory. Prefer local/offline; degrade NOT_CONFIGURED without deps. +compatibility: opencode +license: MIT +--- + +# pageindex + +Vectorless long-document navigation: build a **tree index**, then **reason** down it. Similarity search is not this skill. + +Intent: `longdoc_nav`. `research` keeps primary-source lookup. `academic` keeps scholarly IMRaD. `smartdoc` keeps per-job contracts/OCR/render. `codebase-memory-mcp` keeps **code** graphs. Graphiti/Cognee stay REJECT. + +## When + +- Long structured professional docs (filings, manuals, textbooks, regulatory PDFs) where the question needs the right section, not a similar chunk. +- User names PageIndex, tree index, vectorless RAG, or “reason through the document”. + +## When not + +- Short docs that already fit in context → `smartdoc` / `research`. +- Codebase symbols → Codebase Memory MCP. +- Knowledge graphs / temporal entity memory → not this overlay (Graphiti/Cognee REJECT). +- Do not add a PageIndex MCP (cloud or local) to core servers. + +## Load + +- Tree method: [references/tree.md](references/tree.md) +- Attribution: [NOTICE.md](NOTICE.md) + +## Pipeline + +1. Confirm the artifact is a long structured document (or a small set of them). +2. Prefer **local** tree build: outline / TOC / heading walk first (no extra package). +3. If `pageindex` Python SDK is installed in the **user** environment, local flash index is allowed. Do not `pip install` into the overlay venv. +4. Retrieve by walking the tree with reasons (“this heading, because…”). Cite page or section. Do not dump similar chunks. +5. Answers remain bound to primary sources. The tree is a map, not a citation owner. + +If the SDK, model key, or PDF parser is missing: `NOT_CONFIGURED`. Answer only from text already extracted (`smartdoc` / `markitdown`) or stop with `ask_user`. Never fake a tree. + +Cloud PageIndex (`PAGEINDEX_API_KEY`, hosted MCP) is FOREIGN_ON_DEMAND and **off**. Do not enable it. Do not write API keys. + +## Hard rules + +- Not a core MCP. Not a second codebase-memory. +- Not Graphiti, Cognee, WeKnora, OpenMAIC, or Open WebUI. +- Do not vendor the PageIndex Python package. +- Degrade closed when deps are absent. diff --git a/skills/pageindex/references/tree.md b/skills/pageindex/references/tree.md new file mode 100644 index 0000000..4d9ce1f --- /dev/null +++ b/skills/pageindex/references/tree.md @@ -0,0 +1,49 @@ +# Tree then reason + +Pin: `VectifyAI/PageIndex@037a7dbacfb9a19f38b354ce60cee5094b3f854c` (MIT). + +## Why a tree + +Vector RAG retrieves by similarity. Long professional documents need +**relevance**, which takes a map of sections and a reason to open one. +PageIndex-style retrieval is two steps: + +1. **Index** — hierarchical tree (title, summary, page/section span, children). +2. **Retrieve** — LLM (or this session) walks the tree, recording why each node + was opened, then reads only those leaves. + +No vector DB. No blind chunking. + +## Local overlay path (no extra deps) + +When the SDK is absent: + +1. Extract text via `smartdoc` or `markitdown` (existing tools). +2. Build a heading tree from TOC / `h1–h3` / numbered sections. +3. Summarize each node in ≤150 words from its own text (do not invent). +4. Walk: start at root, pick children with a one-line reason, stop at leaves. +5. Quote spans with page or heading provenance. + +This is DEGRADED relative to upstream flash indexing, but it is honest. +Missing extractors → `NOT_CONFIGURED`. + +## Optional SDK (user machine) + +```text +pageindex Python package on PATH or importable +→ local flash index allowed +→ never pip-install into OpenCodeHighEnd +``` + +Cloud `index="cloud"` / `PAGEINDEX_API_KEY` / PageIndex MCP: do not configure. + +## Boundaries + +| Need | Route | +|---|---| +| Tree/reasoning over a long doc | **pageindex** | +| Official docs / API facts | `research` | +| Scholarly IMRaD | `academic` | +| Contract/OCR/render | `smartdoc` | +| Code symbols | codebase-memory-mcp | +| Entity knowledge graphs | REJECT (Graphiti/Cognee) | diff --git a/skills/playwright-qa/SKILL.md b/skills/playwright-qa/SKILL.md index ca53a95..2cad10f 100644 --- a/skills/playwright-qa/SKILL.md +++ b/skills/playwright-qa/SKILL.md @@ -48,6 +48,10 @@ playwright-cli -s=task-ui screenshot --filename=artifacts/qa-verify.png playwright-cli -s=task-ui close ``` +## Evidence ledger + +A PASS claim needs FACT rows: snapshot (or path), screenshot path, process exit 0. Optional flake: `playwright-cli -s=task-ui tracing start` then `tracing stop`. Missing artifact = `NOT_CONFIGURED`, not PASS. Never vendor browser-use; never make it door 0. Door 1 remains this skill. + ## References - Operational QA flow & assertions: [references/workflow.md](references/workflow.md) diff --git a/skills/playwright-qa/references/workflow.md b/skills/playwright-qa/references/workflow.md index 94296cb..303a2f0 100644 --- a/skills/playwright-qa/references/workflow.md +++ b/skills/playwright-qa/references/workflow.md @@ -22,7 +22,7 @@ - Text content changes after action. - Error messages appear appropriately for invalid input. - Fresh snapshot confirms new DOM state. -6. **Capture visual evidence**: When visual confirmation is needed: +6. **Capture visual evidence**: When visual confirmation is needed. Ledger: snapshot + screenshot path + exit 0 = FACT; missing file = `NOT_CONFIGURED`. For flakes, `tracing start` / `tracing stop` and keep the zip off git. Never browser-use as door 0. ```bash playwright-cli -s= screenshot --filename=artifacts/evidence.png ``` diff --git a/skills/prototype/SKILL.md b/skills/prototype/SKILL.md index 062a139..eee8cf7 100644 --- a/skills/prototype/SKILL.md +++ b/skills/prototype/SKILL.md @@ -14,6 +14,7 @@ Identify which question is being answered — from the user's prompt, the surrou - **"Does this logic / state model feel right?"** → [LOGIC.md](LOGIC.md). Build a single shareable HTML file — free-play buttons plus tabbed guided walkthroughs — that pushes the state machine through cases that are hard to reason about on paper, and that a non-developer can drive. - **"What should this look like?"** → [UI.md](UI.md). Generate several radically different UI variations on a single route, switchable via a URL search param and a floating bottom bar. +- **"Can a typed catalog drive this UI?"** → skill `json-render` (schema/JSON generative UI). This prototype skill does not own catalog/spec rendering. Visual direction still `found-this-design` → `impeccable`. The two branches produce very different artifacts — getting this wrong wastes the whole prototype. If the question is genuinely ambiguous and the user isn't reachable, default to whichever branch better matches the surrounding code (a backend module → logic; a page or component → UI) and state the assumption at the top of the prototype. diff --git a/skills/research/SKILL.md b/skills/research/SKILL.md index 72090aa..2943564 100644 --- a/skills/research/SKILL.md +++ b/skills/research/SKILL.md @@ -13,3 +13,5 @@ Current library or framework docs: MCP `context7` when repo evidence is not enou If the user asked for a note, write one Markdown file in the repo (match existing convention). Cite each claim. If they only wanted an answer, do not create a file. This is not `/why`. Repo history, PRs, and local design rationale stay on `/why`. Scholarly papers, literature surveys, and academic peer review route to `academic`. + +Long structured professional documents (filings, manuals, textbooks) that need tree/section navigation before answering route to `pageindex`. Keep this skill's primary-source rule: every claim still traces to the owning doc, spec, or API. `pageindex` output is a map, not a citation owner. diff --git a/skills/smartdoc/SKILL.md b/skills/smartdoc/SKILL.md index 41e6ef3..897cae7 100644 --- a/skills/smartdoc/SKILL.md +++ b/skills/smartdoc/SKILL.md @@ -45,6 +45,7 @@ Load [references/qa.md](references/qa.md) after content exists. Load [references - Identity only when the artifact needs it and no profile is selected. - Academic literature synthesis, scholarly papers, and peer critique route to `academic`; SmartDoc handles file intake, OCR, and output rendering. - Bulk PPTX/XLSX/EPUB/HTML/ZIP → Markdown first may use `markitdown`, then resume SmartDoc modes. Native PDF/DOCX extract via `opencode-he smartdoc` stays default when it already works. markitdown output is a source file, not a contract. +- Creating or mechanically checking consulting PPTX / 16:9 slide decks routes to `deck-design`. SmartDoc does not generate PPTX. Ingest of an existing deck still uses `markitdown`. - Ask only HIGH/CRITICAL questions whose answers change the artifact. HIGH confidence → proceed. - Never call a local score Turnitin. Never promise 0%. Never run a detector-evasion loop. - Handwriting is a renderer, not a skill. diff --git a/templates/AGENTS.md b/templates/AGENTS.md index 3ad502f..46e49d6 100644 --- a/templates/AGENTS.md +++ b/templates/AGENTS.md @@ -10,7 +10,7 @@ Availability is not a reason to use a tool. One primary specialist. At most one ## Closed Intent & Default Classify into exactly one intent before acting: -`repo_understand | bug | security | perf | ui_direction | ui_implement | motion | scroll_2d | scroll_3d | img3d | docs | ingest_md | prose | academic | browser_qa | architecture | warehouse | ops_data | video_html | demo_id` +`repo_understand | bug | security | perf | ui_direction | ui_implement | generative_ui | motion | scroll_2d | scroll_3d | img3d | docs | ingest_md | prose | academic | longdoc_nav | browser_qa | architecture | warehouse | ops_data | video_html | demo_id | slides_pptx` 1. Repo evidence is enough → do the work. No specialist. 2. User typed a slash command → load that command's specialist. Do not substitute. @@ -37,11 +37,11 @@ Code Mode host is OpenCode 2: session tools are strictly `tools.opencode.session ## Specialists (load one) -UI direction → skill `found-this-design` (must write `.impeccable/found-this-design.json` before implement) then `impeccable`. UI atoms (button, input, card, nav) after world/brief → impeccable after Design V2 shortlist; BANK_MISS ≠ generate (never `found-this-design` for buttons). Motion UI (easing, hover, seam) → `emil-design-eng`. Still/ads/non-UI surface → `visual-studio`. Scroll-led story → `scroll-craft`. Camera/3D world/diorama → `scroll-world`. Object image to procedural Three.js → `img2threejs`. Registry → shadcn MCP. Design Intelligence and Design V2 are internal to Impeccable `new-work`, never a route. Stitch MCP = screen/comp generation only; then found-this-design or impeccable + Design V2 atoms. Never implement production UI from Stitch alone. UI Skills MCP = design-skill lookup only; product UI remains Design Bank + Impeccable + Design V2 atoms + shadcn; BANK_MISS ≠ generate from a random ui-skills document. +UI direction → skill `found-this-design` (must write `.impeccable/found-this-design.json` before implement) then `impeccable`. UI atoms (button, input, card, nav) after world/brief → impeccable after Design V2 shortlist; BANK_MISS ≠ generate (never `found-this-design` for buttons). Motion UI (easing, hover, seam) → `emil-design-eng`. Still/ads/non-UI surface → `visual-studio`. Scroll-led story → `scroll-craft`. Camera/3D world/diorama → `scroll-world`. Object image to procedural Three.js → `img2threejs`. Registry → shadcn MCP. Design Intelligence and Design V2 are internal to Impeccable `new-work`, never a route. Stitch MCP = screen/comp generation only; then found-this-design or impeccable + Design V2 atoms. Never implement production UI from Stitch alone. UI Skills MCP = design-skill lookup only; product UI remains Design Bank + Impeccable + Design V2 atoms + shadcn; BANK_MISS ≠ generate from a random ui-skills document. Schema/JSON generative UI → skill `json-render` (after tokens/direction or internal schema UI; never bypass Design Bank for marketing; never Jev compose). Browser QA → skill `playwright-qa` (isolated verification session; builder does not self-attest). Explicit/session BrowserAct → `browser-act`. Observed cause → `chrome-devtools-axi` after `opencode-chromium-cdp` (`127.0.0.1:9223`). Never Google Chrome. Project E2E suites (Playwright Test/Cypress) stay authoritative for regressions. -Auth/secret/payment/upload/webhook/privileged/public API → `full-audit-keamanan`. Measured LCP/INP/CLS/latency/bundle → `full-performance-audit`. GitHub → `gh-axi`. Hard unknown bug → `diagnosing-bugs`. Documents (PDF/DOCX/extract/review) → `smartdoc`. File → Markdown ingest → `markitdown`. Reusable local knowledge → `smartbook-ingest`. +Auth/secret/payment/upload/webhook/privileged/public API → `full-audit-keamanan`. Measured LCP/INP/CLS/latency/bundle → `full-performance-audit`. GitHub → `gh-axi`. Hard unknown bug → `diagnosing-bugs`. Documents (PDF/DOCX/extract/review) → `smartdoc`. Consulting PPTX / slide decks → `deck-design`. Long structured docs (tree/reasoning nav) → `pageindex`. File → Markdown ingest → `markitdown`. Reusable local knowledge → `smartbook-ingest`. Prose AI-tells / humanize → skill `humanizer`. Slash `/unslop` is the same specialist, manual only. Technical writing structure → suggest `/technical-writing`. Academic literature / manuscript / peer-critique → skill `academic` (not `research`, not `smartdoc` unless file extract/render). Facts library/API → Context7; `research` only if repo lacking. Deterministic HTML video / render HTML to MP4 → skill `hyperframes` (not `visual-studio`, not `emil-design-eng`). Editorial diagram HTML/SVG → skill `diagram-design` (not `impeccable`). Demo video aplikasi / walkthrough layar / narasi Indonesia / demo lomba → skill `id-demo-video` (bukan `hyperframes` untuk durasi panjang utuh, bukan `playwright-qa`, bukan `visual-studio`). Kartu judul HTML→MP4 tetap `hyperframes`. diff --git a/tests/test_install.py b/tests/test_install.py index ab3f074..18121d1 100644 --- a/tests/test_install.py +++ b/tests/test_install.py @@ -122,7 +122,7 @@ def test_fresh_install_idempotent_uninstall(self): self.assertEqual(sha256(self.sentinel), self.sentinel_hash) self.assertEqual({p.name for p in (self.tmp / ".claude").iterdir()}, {"sentinel.txt"}) skills = list((self.tmp / ".config" / "opencode" / "skills").iterdir()) - self.assertEqual(len([p for p in skills if p.is_dir()]), 47) + self.assertEqual(len([p for p in skills if p.is_dir()]), 50) cmds = list((self.tmp / ".config" / "opencode" / "commands").glob("*.md")) self.assertEqual(len(cmds), 15) self.assertEqual(cmd_skills_verify(), 0) @@ -140,7 +140,7 @@ def test_fresh_install_idempotent_uninstall(self): rc2 = cmd_install() self.assertEqual(rc2, 0) - self.assertEqual(len([p for p in (self.tmp / ".config" / "opencode" / "skills").iterdir() if p.is_dir()]), 47) + self.assertEqual(len([p for p in (self.tmp / ".config" / "opencode" / "skills").iterdir() if p.is_dir()]), 50) self.assertEqual(len(list((self.tmp / ".config" / "opencode" / "commands").glob("*.md"))), 15) bashrc = (self.tmp / ".bashrc").read_text(encoding="utf-8") self.assertEqual(bashrc.count("OPENCODEHIGHEND:BEGIN"), 1) diff --git a/tests/test_migration.py b/tests/test_migration.py index 87052d8..ab3201d 100644 --- a/tests/test_migration.py +++ b/tests/test_migration.py @@ -106,7 +106,7 @@ def test_migrate_claudebestfriend_1_4_2_to_ocbf(self): (self.tmp / ".local" / "share" / "opencode-highend" / "components" / "installer").exists() ) skills = list((self.tmp / ".config" / "opencode" / "skills").iterdir()) - self.assertEqual(len([p for p in skills if p.is_dir()]), 47) + self.assertEqual(len([p for p in skills if p.is_dir()]), 50) with redirect_stdout(io.StringIO()): self.assertEqual(cmd_verify(), 0) self.assertEqual(cmd_doctor(), 0) diff --git a/tests/test_routing.py b/tests/test_routing.py index 5b16785..d74bb5d 100644 --- a/tests/test_routing.py +++ b/tests/test_routing.py @@ -59,6 +59,9 @@ def test_mappings(self): "img2threejs": "img2threejs", "markitdown": "markitdown", "id-demo-video": "id-demo-video", + "json-render": "json-render", + "deck-design": "deck-design", + "pageindex": "pageindex", } for label, needle in expected.items(): self.assertIn(needle, blob, label) @@ -153,6 +156,9 @@ def test_new_specialist_boundaries(self): "mongodb-ops", "vercel-ops", "id-demo-video", + "json-render", + "deck-design", + "pageindex", ] for spec in required_specialists: self.assertIn(spec, self.agents, f"Expected {spec} in AGENTS.md") @@ -227,6 +233,34 @@ def test_ui_skills_routing_boundary(self): self.assertIn("UI Skills MCP: design-skill lookup only", self.routing) self.assertIn("BANK_MISS ≠ generate from a random ui-skills document", (ROOT / "docs" / "routing.md").read_text(encoding="utf-8")) + def test_json_render_routing_boundary(self): + self.assertIn("Schema/JSON generative UI → skill `json-render`", self.agents) + self.assertIn("`generative_ui` | `json-render`", self.routing) + docs = (ROOT / "docs" / "routing.md").read_text(encoding="utf-8") + self.assertIn("json-render", docs) + skill = (ROOT / "skills" / "json-render" / "SKILL.md").read_text(encoding="utf-8") + self.assertIn("Never bypass Design Bank for marketing UI", skill) + self.assertIn("Jev", skill) + + def test_deck_design_routing_boundary(self): + self.assertIn("Consulting PPTX / slide decks → `deck-design`", self.agents) + self.assertIn("`slides_pptx` | `deck-design`", self.routing) + docs = (ROOT / "docs" / "routing.md").read_text(encoding="utf-8") + self.assertIn("`/pptx` routes to `deck-design`", docs) + skill = (ROOT / "skills" / "deck-design" / "SKILL.md").read_text(encoding="utf-8") + self.assertIn("smartdoc keeps PDF/DOCX", skill) + smartdoc = (ROOT / "skills" / "smartdoc" / "SKILL.md").read_text(encoding="utf-8") + self.assertIn("deck-design", smartdoc) + + def test_pageindex_routing_boundary(self): + self.assertIn("Long structured docs (tree/reasoning nav) → `pageindex`", self.agents) + self.assertIn("`longdoc_nav` | `pageindex`", self.routing) + skill = (ROOT / "skills" / "pageindex" / "SKILL.md").read_text(encoding="utf-8") + self.assertIn("Not Graphiti/Cognee", skill) + self.assertIn("NOT_CONFIGURED", skill) + research = (ROOT / "skills" / "research" / "SKILL.md").read_text(encoding="utf-8") + self.assertIn("pageindex", research) + def test_no_context_guard_rule(self): self.assertFalse((ROOT / "rules" / "04-context-guard.md").exists()) diff --git a/tests/test_skills.py b/tests/test_skills.py index d99ca72..ead9020 100644 --- a/tests/test_skills.py +++ b/tests/test_skills.py @@ -56,11 +56,11 @@ def jaccard(left: set[str], right: set[str]) -> float: class SkillPolicyTests(unittest.TestCase): def test_counts(self): allow, skills, model, manual = load_policy(ROOT) - self.assertEqual(len(allow), 62) - self.assertEqual(len(model), 47) + self.assertEqual(len(allow), 65) + self.assertEqual(len(model), 50) self.assertEqual(len(manual), 15) self.assertEqual(set(allow), set(skills)) - for name in ("supabase-ops", "mongodb-ops", "vercel-ops", "img2threejs", "markitdown", "id-demo-video"): + for name in ("supabase-ops", "mongodb-ops", "vercel-ops", "img2threejs", "markitdown", "id-demo-video", "json-render", "deck-design", "pageindex"): self.assertIn(name, allow) self.assertIn(name, model) self.assertIn("demo-video", manual) diff --git a/vendor/license-audit.json b/vendor/license-audit.json index d224d80..475bc94 100644 --- a/vendor/license-audit.json +++ b/vendor/license-audit.json @@ -1,7 +1,7 @@ { "schemaVersion": 1, "product": "OpenCodeHighEnd", - "productVersion": "0.1.6", + "productVersion": "0.1.7", "note": "Evidence-based. A missing frontmatter license is not a grant. Adapted \u2260 first-party.", "skills": { "demo-video": { @@ -313,6 +313,21 @@ "license": "MIT", "evidence": "SKILL.md frontmatter (first-party MIT rewrite; NOTICE.md)", "redistribution": "mit" + }, + "json-render": { + "license": "Apache-2.0", + "evidence": "vercel-labs/json-render c2600d73 + SKILL.md frontmatter + skills/json-render/NOTICE.md", + "redistribution": "apache-2.0" + }, + "deck-design": { + "license": "MIT", + "evidence": "carnot-tech/consulting-pptx-skill f50edac + SKILL.md frontmatter + skills/deck-design/NOTICE.md", + "redistribution": "mit" + }, + "pageindex": { + "license": "MIT", + "evidence": "VectifyAI/PageIndex 037a7dba + SKILL.md frontmatter + skills/pageindex/NOTICE.md", + "redistribution": "mit" } } } diff --git a/vendor/provenance.json b/vendor/provenance.json index 6cd8e4a..a2c902e 100644 --- a/vendor/provenance.json +++ b/vendor/provenance.json @@ -1,7 +1,7 @@ { "schemaVersion": 1, "product": "OpenCodeHighEnd", - "productVersion": "0.1.6", + "productVersion": "0.1.7", "firstPartyLicense": "MIT", "components": [ { @@ -150,7 +150,7 @@ "license": "MIT", "modified": true, "redistribution": "mit", - "notes": "Seam QA calibration note (~18–25 dB shimmer tolerance) merged. Continuous 3D fly-through landing with vanilla-JS scrub engine; paid video backends degrade to NOT_CONFIGURED." + "notes": "Seam QA calibration note (~18\u201325 dB shimmer tolerance) merged. Continuous 3D fly-through landing with vanilla-JS scrub engine; paid video backends degrade to NOT_CONFIGURED." }, { "component": "visual-studio", @@ -643,6 +643,33 @@ "modified": true, "redistribution": "mit", "notes": "Adapted from affaan-m/ECC. Consumer/provider collaboration around one machine-checkable contract artifact." + }, + { + "component": "json-render", + "path": "skills/json-render", + "upstream": "vercel-labs/json-render@c2600d73908ed505e6d726f5b6f969ba8f597ce7", + "license": "Apache-2.0", + "modified": true, + "redistribution": "apache-2.0", + "notes": "First-party wrapper. npm not vendored. Jev experimental compose not ported." + }, + { + "component": "deck-design", + "path": "skills/deck-design", + "upstream": "carnot-tech/consulting-pptx-skill@f50edac656d34636f026afec9e6dbb3697f4c6d4", + "license": "MIT", + "modified": true, + "redistribution": "mit", + "notes": "First-party wrapper. 62-type template packs not vendored." + }, + { + "component": "pageindex", + "path": "skills/pageindex", + "upstream": "VectifyAI/PageIndex@037a7dbacfb9a19f38b354ce60cee5094b3f854c", + "license": "MIT", + "modified": true, + "redistribution": "mit", + "notes": "First-party wrapper. Not a core MCP; Cloud/SDK not vendored." } ] } diff --git a/vendor/skill-allowlist.txt b/vendor/skill-allowlist.txt index b5bcc1e..8097280 100644 --- a/vendor/skill-allowlist.txt +++ b/vendor/skill-allowlist.txt @@ -15,6 +15,7 @@ contract-first cost-aware-llm-pipeline create-verification-skill decision-log +deck-design demo-video diagnosing-bugs diagram-design @@ -35,10 +36,12 @@ impeccable improve-codebase-architecture install-anti-slop interrogate +json-render maintain-verification-skill markitdown matt-code-review mongodb-ops +pageindex playwright-qa prompt-optimizer prototype diff --git a/vendor/skill-policy.json b/vendor/skill-policy.json index 835b306..bdd62cb 100644 --- a/vendor/skill-policy.json +++ b/vendor/skill-policy.json @@ -1,6 +1,6 @@ { "schemaVersion": 1, - "note": "allowlist = WHAT is owned. This file = HOW each owned skill may be invoked. provenance = WHERE it came from. Catalog frozen at 62 names (47 model, 15 manual; see docs/CATALOG-FREEZE.md).", + "note": "allowlist = WHAT is owned. This file = HOW each owned skill may be invoked. provenance = WHERE it came from. Catalog frozen at 65 names (50 model, 15 manual; see docs/CATALOG-FREEZE.md).", "skills": { "academic": { "invocation": "model" @@ -53,6 +53,9 @@ "decision-log": { "invocation": "manual" }, + "deck-design": { + "invocation": "model" + }, "demo-video": { "invocation": "manual" }, @@ -113,6 +116,9 @@ "interrogate": { "invocation": "manual" }, + "json-render": { + "invocation": "model" + }, "maintain-verification-skill": { "invocation": "manual" }, @@ -125,6 +131,9 @@ "mongodb-ops": { "invocation": "model" }, + "pageindex": { + "invocation": "model" + }, "playwright-qa": { "invocation": "model" }, diff --git a/vendor/sources.json b/vendor/sources.json index c36fc4c..9ec6488 100644 --- a/vendor/sources.json +++ b/vendor/sources.json @@ -1,7 +1,7 @@ { "schemaVersion": 1, "product": "OpenCodeHighEnd", - "productVersion": "0.1.6", + "productVersion": "0.1.7", "sources": { "codebase-memory": { "repository": "https://github.com/DeusData/codebase-memory-mcp", @@ -201,6 +201,27 @@ "copyright": "Copyright (c) 2026 Dillon Mulroy", "licenseFile": "vendor/licenses/DMMULROY-ANTI-SLOP-MIT.txt", "note": "Vendored rule snapshot for TS/JS projects with 4 modes (audit, recommended, strict, custom) and opt-in Effect rules." + }, + "json-render": { + "repository": "https://github.com/vercel-labs/json-render", + "commit": "c2600d73908ed505e6d726f5b6f969ba8f597ce7", + "license": "Apache-2.0", + "copyright": "Copyright 2025 Vercel Inc.", + "note": "First-party skill wrapper. npm packages not vendored. Experimental Jev composition not ported." + }, + "deck-design": { + "repository": "https://github.com/carnot-tech/consulting-pptx-skill", + "commit": "f50edac656d34636f026afec9e6dbb3697f4c6d4", + "license": "MIT", + "copyright": "Copyright (c) carnot-tech contributors", + "note": "First-party skill wrapper. Upstream 62-type HTML/PPTX packs not vendored." + }, + "pageindex": { + "repository": "https://github.com/VectifyAI/PageIndex", + "commit": "037a7dbacfb9a19f38b354ce60cee5094b3f854c", + "license": "MIT", + "copyright": "Copyright (c) 2026 PageIndex AI / VectifyAI", + "note": "First-party skill wrapper. SDK/Cloud/MCP not vendored and not core MCP." } } }