154 Commits

Author SHA1 Message Date
Ghaida Zahran f9fb794e7a Release v1.4.0 v1.4.0 2026-05-27 05:31:36 -07:00
Ghaida Zahran 3848a4c23c feat(banner): pivot to markdown-only — drop bash invocation
End-user testing surfaced two showstoppers with the bash path:
1. Bash tool output gets collapsed to a preview by Claude Code,
   hiding most of the banner behind a "ctrl+o to expand" prompt.
2. Bash tool calls require user approval on first use, which
   breaks the "confident reduction" discipline the banner aims for.

The spec anticipated this risk (§9) and allowed downgrading to
markdown-only as primary. Pivoting now. The hooks/banner.sh and
hooks/check-banner-map.sh stay in the repo as reference / future
tooling but are no longer in the /intent rendering path.

Loses indigo color (markdown can't render ANSI from model text).
Keeps: 16-mark meaningful frame, 8 categories, glyphs, wordmark,
thesis, opening question, shared left margin. All structural
identity moves intact.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 18:03:57 -07:00
Ghaida Zahran 4588a1b59e build: regenerate distributions after invocation banner wiring
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 14:12:23 -07:00
Ghaida Zahran 5c69b9ba2b feat(intent): wire invocation banner into the skill
Adds the Invocation banner section at the top of skills/intent/SKILL.md.
Primary path runs hooks/banner.sh via Bash tool for ANSI-colored
rendering; fallback path renders an equivalent monochrome markdown
block when bash isn't available.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 14:11:28 -07:00
Ghaida Zahran 4e8b2004bd feat(banner): add pre-release cross-check for category map
Verifies every skill in skills/ has an entry in banner.sh CATEGORY_MAP.
Run before release to catch drift between the source skill list and
the banner's inline category mapping.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 14:09:58 -07:00
Ghaida Zahran b0f02e6817 feat(banner): render meaningful frame and jazz-head content
The frame uses one dash per skill (16 total), split by 7 vertical
bars into 8 canonical categories. Wordmark + thesis + opening
question are aligned to a shared left margin between the frames.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 13:59:24 -07:00
Ghaida Zahran 6e7334952a feat(banner): enumerate skills and group by category
Read skills/ at runtime and bin into the 8 canonical categories.
Orphans (in skills/ but not in CATEGORY_MAP) are collected for the
later neutral-tone fallback path.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 13:28:08 -07:00
Ghaida Zahran 2278716ad7 feat(banner): add ANSI palette and category map
Mirror the 8 canonical categories from docs/src/lib/skills.ts inline
in banner.sh per CLAUDE.md reliability-over-composition. Per-category
indigo tones and helper accessors for lookup.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 13:23:50 -07:00
Ghaida Zahran c8680977e3 fix(banner): strict-mode triad and clarifying comments
Code review on T1 flagged the missing set -e / pipefail, the imprecise
comment above SCRIPT_DIR, and the implicit hooks/-relative coupling of
REPO_ROOT. All three addressed; behavior unchanged for the skeleton.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 13:22:21 -07:00
Ghaida Zahran 9c275da0a8 feat(banner): add hooks/banner.sh skeleton
Path-resolving stub that will become the /intent invocation banner.
Subsequent commits build out ANSI color rendering, skill enumeration,
and the meaningful-frame composition.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 13:19:31 -07:00
Ghaida Zahran 58cabf8e04 chore: ignore local .worktrees/ directory
Adding before creating worktrees for the verbosity audit work so
worktree contents don't get tracked.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-01 12:33:46 -07:00
Ghaida Zahran 8ebd61bbb7 Release v1.3.0 v1.3.0 2026-05-01 07:00:40 -07:00
Ghaida Zahran 1329c4fffc docs(readme): add storytelling to the quick decision tree
Slots between philosopher and intent — preserves the visual grouping of
cross-cutting / cognitive-mode entries at the bottom of the tree, and
mirrors philosopher's dual-trigger pattern (question + symptom).
2026-05-01 06:59:43 -07:00
Ghaida Zahran 8413c5cf1a build: regenerate distributions after skill content fixes 2026-04-30 23:48:30 -07:00
Ghaida Zahran 9907c49839 chore(deps): update docs dependencies
Picks up postcss 8.5.13 (was 8.5.9), addressing GHSA-qx2v-qp2m-jg93
(XSS via unescaped </style> in stringify, CVSS 6.1, build-time only).
Also picks up astro 6.2.1 (was 6.1.6).

npm audit now reports 0 vulnerabilities.
2026-04-30 23:48:21 -07:00
Ghaida Zahran 16a369229b fix(docs): address WCAG accessibility findings
- Color contrast: --blueprint-mark light bumped from #74748c to #65657a
  (was 4.36:1, now passes WCAG AA on --bg). Dark mode --blueprint-mark
  bumped from #5c5c78 to #8888a8 (was 2.93:1, hard fail). Synced
  --severity-low-fg between [data-theme='dark'] and the
  prefers-color-scheme media query (was #7878a0 vs #8888b0; now both
  #8888b0).
- Output panel triggers in how-to-use.astro: added aria-expanded='false'
  and aria-controls='output-panel'; output-panel.js now toggles
  aria-expanded on open/close so screen readers know the button controls
  a dialog.
- Theme toggle aria-label is now dynamic: starts as 'Switch to dark
  mode' and updates on each toggle to describe the next action, not the
  current state. Initial label syncs to the active theme on page load.
- output-panel.js: documented the safety contract for the innerHTML
  assignment so future changes know the upstream simpleMarkdown()
  escapeHtml() guarantee is the only thing keeping it safe.
2026-04-30 23:47:32 -07:00
Ghaida Zahran e3f534f2bb fix(docs): harden content parsers against silent failure modes
- patterns.ts: walk forward to find category description (was reading
  the blank line that follows every category heading, leaving every
  category.description empty). Also validate severity values against a
  known set and throw on typos rather than silently rendering broken
  badges.
- showcase.ts: make Output / Philosopher / Storytelling regexes
  mutually exclusive — each capture stops at any of the other two, so
  source ordering doesn't silently corrupt parsing.
- skills.ts: tolerate missing blank line between '## Overview' and its
  first paragraph (existing regex required a blank line and silently
  returned empty when omitted).
- agents.ts: cross-validate AGENT_META against agents/ directory and
  throw on either orphan metas or missing metas (was silently dropping
  agents added without matching meta entries).
2026-04-30 23:45:17 -07:00
Ghaida Zahran 7018b4fb05 fix(skills): remove person references and clarify presentation status
- skills/storytelling/SKILL.md: clarify that 'presentation' is forthcoming
  rather than presenting it as a live peer skill in the frontmatter
  description
- skills/localize/SKILL.md: drop '(Hall)' and '(Hofstede)' parenthetical
  attributions from cultural-dimension framework names
- skills/intent/references/information-architecture.md: drop 'Don Norman's'
  attribution from the Design of Everyday Things reference

Per the project rule: skills speak directly without name-dropping; sources
stay in design docs, not in skill content.
2026-04-30 23:44:04 -07:00
Ghaida Zahran fa688c291c fix(docs): tighten storytelling content in /strategize for design strategy
In a design strategy context, storytelling needs to be punch, not
paragraph. Shrinks the /strategize Output's S/C/R section from ~400
words to ~110 (one sentence per beat plus a 'why now' and a discipline
note), and the storytelling callout from ~130 words to ~70 (focused on
the discipline-as-principle rather than retelling the brief).

The /blueprint and /journey storytelling content stays longer — those
skills tolerate narrative because their deliverables ARE the narrative.
Strategy doesn't have that license; decision density per word is the
constraint.
2026-04-30 16:28:31 -07:00
Ghaida Zahran eca4a2a063 feat(docs): rewrite showcase outputs to reflect storytelling discipline
The /strategize, /blueprint, and /journey outputs in the how-to-use
showcase now reflect the storytelling patterns that were restated inline
in those skills. Closes the coherence gap where the new storytelling
callouts claimed a discipline that the deliverables didn't show.

- /strategize output: relabeled Context/Gap/Opportunity as
  Situation/Complication/Resolution; added 'why now' beat; added
  preamble explaining the discipline caught a manufactured complication.
- /blueprint output: added 'The choreography' lead section naming the
  three representative humans (Sarah/Marcus/Diane) plus density and
  future-buyer actors; tagged frontstage and backstage sections with
  their corresponding arcs.
- /journey output: led with three protagonist-arcs (Sarah seller,
  Marcus buyer, Diane organizer), each with goal/obstacle/turning
  point/resolution; tagged each flow with its primary arc.
2026-04-30 16:16:55 -07:00
Ghaida Zahran f5a9b2d322 feat(docs): integrate storytelling skill into how-to-use showcase
Adds an optional '### Storytelling' callout pattern parallel to the
existing '### Philosopher' callout — rendered as a labeled aside under
relevant steps. Storytelling callouts added to /strategize (situation →
complication → resolution applied to the brief), /blueprint (choreography
across multi-actor service), and /journey (protagonist-arc with refusal
to smooth Sarah-shaped variance into a composite).

Also updates the closing CTA copy from 'Fifteen skills' to 'Sixteen
skills'.
2026-04-30 16:12:11 -07:00
Ghaida Zahran 89b20257eb docs: update README and HOW-TO-USE for storytelling skill
Bumps the skill count from 15 to 16 across README intro, skills section
header, plugin install description, and HOW-TO-USE plugin tips. Adds the
storytelling entry under the Cross-cutting section in README's skill list.
2026-04-30 16:05:27 -07:00
Ghaida Zahran c8299e7cae build: regenerate storytelling distribution after removing Shared principles section 2026-04-30 15:45:13 -07:00
Ghaida Zahran 84abea2185 fix(storytelling): remove agent-only 'Shared principles' section
This boilerplate section appears in all 6 agent files but in no other
SKILL.md. Including it in the storytelling skill was a copy-paste error
during drafting. The principles are real but they belong to agents, not
to individual skills.
2026-04-30 15:44:47 -07:00
Ghaida Zahran 2c2d1ca6a9 fix(docs): use dynamic skill count instead of hardcoded 15
Replaces hardcoded '15 skills' on the skills page hero, the index hero
description, and the Base layout default. Skill count now derives from
loadSkills().length and updates automatically when skills are added or
removed.
2026-04-30 15:28:20 -07:00
Ghaida Zahran 96705df1c5 build: regenerate distributions for storytelling skill
Adds storytelling.mdc / storytelling.md and updates the four host skills
(journey, blueprint, strategize, evaluate) plus intent (anti-pattern catalog
Category 10) across Cursor and Copilot distributions. AGENTS.md and
copilot-instructions.md updated for the new skill count.
2026-04-30 15:22:34 -07:00
Ghaida Zahran 3a6fef102c feat(docs): register storytelling skill in cross-cutting category
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 15:21:56 -07:00
Ghaida Zahran b357fe9cb7 feat(intent): add Category 10 narrative pathologies to anti-pattern catalog
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 15:18:29 -07:00
Ghaida Zahran be28632a5f feat(evaluate): restate protagonist-arc-on-failures storytelling pattern inline
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 15:17:10 -07:00
Ghaida Zahran bb7d90d7f1 feat(strategize): restate situation-complication-resolution pattern inline
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 15:16:13 -07:00
Ghaida Zahran 8c4dd97c49 feat(blueprint): restate choreography storytelling pattern inline
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 15:15:13 -07:00
Ghaida Zahran 6533dd9d69 feat(journey): restate protagonist-arc storytelling pattern inline 2026-04-30 15:14:05 -07:00
Ghaida Zahran 2a96f216c3 feat(storytelling): add workflow, skill family, and output shape
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 15:12:43 -07:00
Ghaida Zahran 4b7428ed36 feat(storytelling): add stance section with five refusals
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-30 15:10:39 -07:00
Ghaida Zahran 28e55e4dfd fix(storytelling): rephrase frontmatter description
Replace 'carrying emotional truth across humans' with 'giving design work
narrative structure that makes people care'. Reads naturally; matches how
people talk about the work.
2026-04-30 15:08:36 -07:00
Ghaida Zahran 554a09adf7 feat(storytelling): add pattern library section
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-30 15:07:14 -07:00
Ghaida Zahran 8d3ddc7768 feat(storytelling): scaffold skill with frontmatter and overview 2026-04-30 15:02:53 -07:00
Ghaida Zahran 9775bb3f7c Release v1.2.1
Fix plugin install failure on Claude Code 2.1.114 by removing the
manifest path overrides that triggered schema rejection on the agents
field. Source skills/ and agents/ are now the canonical distribution
for Claude Code — frontmatter lives in the source agent files, and
auto-discovery handles the rest.

- Bake frontmatter into each agents/*.md (name, description, tools,
  plus model: opus for sage). Drop AGENT_META heredocs from build.sh.
- Remove skills and agents path overrides from .claude-plugin/plugin.json
  and the unrecognized $schema root key from marketplace.json.
- Delete generated .claude/skills/ and .claude/agents/ trees; Claude Code
  now reads source directly.
- Move agents/HOW-TO-USE.md to repo root to keep agents/ limited to real
  agent files.
- Simplify build.sh to Cursor + Copilot generation only; update release
  workflow zip to pack skills/ + agents/ + HOW-TO-USE.md.
- Add claude plugin validate gate to release.sh so manifest regressions
  block the release before the tag goes out.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
v1.2.1
2026-04-18 10:17:01 -07:00
Ghaida Zahran 3305230862 Release v1.2.0 v1.2.0 2026-04-17 23:19:33 -07:00
Ghaida Zahran 357e178911 Update docs and regenerate distributions for v1.2.0
README: fix stale Rune/Sage taxonomy (now Rune → /specify,
Sage → /philosopher) and expand the Claude Code plugin section to
mention that agents are now registered alongside skills.

HOW-TO-USE.md: new "Option 4: Claude Code plugin" deployment section
covering /plugin install and @<agent> subagent invocation.

Distributions: regenerated .claude/agents/ (new — 6 agents with
build-time frontmatter), .claude/skills/intent + measure (scope
limits + loop-back content), .cursor/rules/, and .github/ to match.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 23:15:37 -07:00
Ghaida Zahran a7e4373e53 Fix stale AGENT_META mapping for Rune and Sage
Rune now correctly maps to ['specify'] with domain 'Engineering Handoff'
(was ['transpose', 'localize', 'measure'] — an earlier taxonomy that
didn't match Rune's actual role). Sage maps to ['philosopher'] only
(was ['philosopher', 'blueprint', 'specify']).

This bugfix was bundled with a since-reverted agent refactor; extracting
it as a standalone fix.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 22:58:11 -07:00
Ghaida Zahran 0b609003b9 Fix bash 3.2 parser issue in agent frontmatter generation
macOS stock bash 3.2 misparses heredocs inside $(cat <<EOF ... EOF)
inside a case statement: the first case falls through to the default
branch and subsequent heredocs break the parse entirely. Refactor to
define per-agent description variables via `IFS= read -r -d ''`
heredocs before the loop, then reference them in a simple case
statement. Strip the trailing newline that read-d leaves behind.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 22:58:11 -07:00
Ghaida Zahran ceaeb7ab01 Add scope limits and loop-back guardrails to Intent
Intent skill: "When NOT to use Intent" section (scope limiters for
localized tweaks, pure-technical work, wrong-framework cases, time
pressure, expert users); "Loop-backs and exit conditions" subsection
with guardrails (named triggers, human checkpoints, 2-loop budget per
engagement, written exit conditions).

Measure skill: measure→strategize triggers (audience contradiction,
feature validation failure, solution-fit failure, Goodhart's Law,
opportunity miscount), common false positives, responsible reopen
steps, one-reopen-per-iteration stop condition.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 21:10:54 -07:00
Ghaida Zahran 404c0ab27d Register Intent agents via plugin with build-time frontmatter
Source agents/*.md stays clean (prose only, paste-friendly for Claude
Projects, web Claude, and tools that consume raw markdown). build.sh
generates .claude/agents/*.md by prepending per-agent YAML (name,
description, tools, model). plugin.json declares "agents" alongside
"skills" so installs register the subagents automatically.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-17 20:56:10 -07:00
Ghaida Zahran 725ebaf43c Release v1.1.1 v1.1.1 2026-04-16 07:36:43 -07:00
Ghaida Zahran 5802ac9733 Add Overview and trigger sections to philosopher skill
Adds parser-compatible sections so the website skills page displays
"What it does" and "When to use it" content for the philosopher skill.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 07:35:41 -07:00
Ghaida Zahran 694855b124 Standardize subpage hero and section vertical rhythm
Consistent padding, font-size, and max-width across all subpage heroes.
Remove desktop padding-left overrides and dead first-of-type rule.
Symmetric section padding throughout.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 03:17:28 -07:00
Ghaida Zahran 18a85ae14e Philosopher callout: remove top margin, bottom margin matches sections 2026-04-16 02:58:52 -07:00
Ghaida Zahran 8b0c1748b1 Redesign hero How to Use link as button with adjacent description
Solid accent button "See Intent in action" with muted description
text beside it instead of the previous full-width banner link.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 02:56:04 -07:00
Ghaida Zahran 5143709eb5 Add How to Use link in homepage hero
Prominent call-to-action between the lede and install blocks:
"See it in action — follow a project from first question to
engineering handoff" with accent background and arrow icon.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 02:54:44 -07:00