diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 3ef23034..1dc3c8a2 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -6,10 +6,11 @@ exclude: "^(docs/plans/|docs/research/|han-reporting/skills/html-summary/assets/)" repos: - # Prettier owns formatting for Markdown, JSON, YAML, and JS: 120-column prose, - # ordered-list numbering, and unwrapped .github templates (.prettierrc.json), - # with ignore rules in .prettierignore. Running the local devDependency keeps - # Prettier's version in package.json only, not duplicated in a hook mirror. + # Prettier owns formatting for JSON, YAML, and JS at 120 columns. Markdown is + # deliberately excluded in .prettierignore: agents read skills and reference + # files as raw source, and Prettier's list renumbering and code-span trimming + # change what those files say. Running the local devDependency keeps Prettier's + # version in package.json only, not duplicated in a hook mirror. # It runs first so the hygiene fixers below never fight it. - repo: local hooks: @@ -25,11 +26,12 @@ repos: hooks: - id: shellcheck - # Hygiene checks. The whitespace/EOL fixers exclude the file types Prettier - # already normalizes (Markdown, JSON, YAML, JS), so Prettier owns those and - # these cover the rest (shell scripts, dotfiles, LICENSE) with no overlap. - # check-yaml and check-json are intentionally omitted: Prettier parses and so - # validates those types already. + # Hygiene checks. The whitespace/EOL fixers exclude JSON, YAML, and JS because + # Prettier owns those, and they exclude Markdown for its own reason: a trailing + # double-space is a meaningful hard line break, so a whitespace fixer would + # change how the file reads. That leaves these covering the rest (shell scripts, + # dotfiles, LICENSE) with no overlap. check-yaml and check-json are intentionally + # omitted: Prettier parses and so validates those types already. - repo: https://github.com/pre-commit/pre-commit-hooks rev: v6.0.0 hooks: diff --git a/.prettierignore b/.prettierignore index 86505819..efc971f2 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,15 @@ +# Markdown is the product, not just prose about it: skills, agents, and reference +# files are read as raw source by agents, so a transform that renders the same can +# still change what an agent is told to do. Prettier has two such transforms that +# cannot be turned off, because they are core CommonMark normalizations: +# * It renumbers ordered lists, while the prose cross-references to those steps +# ("see Step 6") stay put and end up pointing at the wrong ones. +# * It strips the spaces inside inline code spans, so a heading spec written as +# ` — ` becomes `—` next to prose that still says "with surrounding spaces". +# Both survive proseWrap: preserve and embeddedLanguageFormatting: off, so there is +# no configuration that formats this repo's Markdown without corrupting it. +*.md + # Static historical artifacts: left as written. docs/plans/ docs/research/ diff --git a/.prettierrc.json b/.prettierrc.json index 616da9f6..963354f2 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,12 +1,3 @@ { - "printWidth": 120, - "proseWrap": "always", - "overrides": [ - { - "files": ".github/**/*.md", - "options": { - "proseWrap": "never" - } - } - ] + "printWidth": 120 } diff --git a/han-atlassian/.claude-plugin/plugin.json b/han-atlassian/.claude-plugin/plugin.json index d71ae0d0..e268444f 100644 --- a/han-atlassian/.claude-plugin/plugin.json +++ b/han-atlassian/.claude-plugin/plugin.json @@ -2,9 +2,5 @@ "name": "han-atlassian", "description": "Atlassian-facing extensions to the Han suite. Adds markdown-to-confluence, which publishes a local Markdown file to a user-specified Confluence page; project-documentation-to-confluence, which runs the core project-documentation skill and then publishes the result there; investigate-to-confluence, which runs the core investigate skill and publishes the resulting investigation report there; code-overview-to-confluence, which runs the core code-overview skill and publishes the resulting overview there; plan-a-feature-to-confluence, which runs the plan-a-feature planning skill and publishes the spec and its companion artifacts there as a page tree; and work-items-to-jira, which creates one Jira ticket per slice from a work-items file. All work through the Atlassian MCP server. Depends on han-core, han-planning, and han-coding (its wrapper skills run skills from each) and requires a configured Atlassian MCP server. Opt-in: installed on its own, not pulled in by the han meta-plugin.", "version": "2.2.0", - "dependencies": [ - "han-core", - "han-planning", - "han-coding" - ] + "dependencies": ["han-core", "han-planning", "han-coding"] } diff --git a/han-coding/.claude-plugin/plugin.json b/han-coding/.claude-plugin/plugin.json index 16c10483..3f5a73fe 100644 --- a/han-coding/.claude-plugin/plugin.json +++ b/han-coding/.claude-plugin/plugin.json @@ -2,7 +2,5 @@ "name": "han-coding", "description": "Coding-facing skills for the Han suite: writing, reviewing, testing, investigating, and standardizing code. Home of the tdd skill, which drives a feature or behavior through a BDD-framed red-green-refactor loop with an enforced observed-failure gate, and the refactor skill, which restructures existing code without changing its behavior through a test-gated refactoring loop, plus code-review (comprehensive review of local changes), code-overview (a progressive-disclosure, understand-now overview of unfamiliar code or a PR's changes), architectural-analysis (module-level coupling, data flow, concurrency, risk, and SOLID assessment), test-planning (coverage-gap and edge-case test plans), investigate (evidence-based root-cause debugging), and coding-standard (creating and updating coding standards). Depends on han-core; bundled by the han meta-plugin.", "version": "2.6.0", - "dependencies": [ - "han-core" - ] + "dependencies": ["han-core"] } diff --git a/han-feedback/.claude-plugin/plugin.json b/han-feedback/.claude-plugin/plugin.json index ddc337ad..96fcf0fe 100644 --- a/han-feedback/.claude-plugin/plugin.json +++ b/han-feedback/.claude-plugin/plugin.json @@ -2,7 +2,5 @@ "name": "han-feedback", "description": "Post-session feedback skill for the Han suite. Captures structured observations, ratings, and improvement ideas on the Han skills you ran in a session and optionally posts them as a GitHub issue to testdouble/han. Opt-in: installed on its own, not pulled in by the han meta-plugin.", "version": "2.0.0", - "dependencies": [ - "han-core" - ] + "dependencies": ["han-core"] } diff --git a/han-github/.claude-plugin/plugin.json b/han-github/.claude-plugin/plugin.json index e077b0c5..75398eed 100644 --- a/han-github/.claude-plugin/plugin.json +++ b/han-github/.claude-plugin/plugin.json @@ -2,7 +2,5 @@ "name": "han-github", "description": "Github specific extensions to the Han plugin for agentic planning and coding. Provides skills to post code reviews as PR comments, update a PR description with a consistent format, etc.", "version": "2.2.2", - "dependencies": [ - "han-core" - ] + "dependencies": ["han-core"] } diff --git a/han-linear/.claude-plugin/plugin.json b/han-linear/.claude-plugin/plugin.json index 26d05066..a43549bb 100644 --- a/han-linear/.claude-plugin/plugin.json +++ b/han-linear/.claude-plugin/plugin.json @@ -2,7 +2,5 @@ "name": "han-linear", "description": "Linear-facing extensions to the Han suite. Adds work-items-to-linear, which creates one Linear issue per slice from a work-items file. Works through the Linear MCP server. Depends on han-core and requires a configured Linear MCP server. Opt-in: installed on its own, not pulled in by the han meta-plugin.", "version": "1.0.2", - "dependencies": [ - "han-core" - ] + "dependencies": ["han-core"] } diff --git a/han-planning/.claude-plugin/plugin.json b/han-planning/.claude-plugin/plugin.json index 7f32bc1a..9036ef9b 100644 --- a/han-planning/.claude-plugin/plugin.json +++ b/han-planning/.claude-plugin/plugin.json @@ -2,7 +2,5 @@ "name": "han-planning", "description": "Planning-facing skills for the Han suite: specifying, planning, sequencing, breaking down, and stress-testing work before implementation. Home of plan-a-feature (build a feature specification from scratch through a relentless, evidence-based interview that walks the design tree), plan-implementation (turn a feature specification into an implementation plan through a project-manager-led team conversation), plan-a-phased-build (split a body of context into a sequence of independently demoable vertical-slice phases), plan-work-items (break a trusted implementation plan into independently-grabbable, atomic work items), and iterative-plan-review (stress-test an existing plan through multiple codebase-grounded review passes). Depends on han-core; bundled by the han meta-plugin.", "version": "2.0.4", - "dependencies": [ - "han-core" - ] + "dependencies": ["han-core"] } diff --git a/han-plugin-builder/skills/guidance/references/templates/marketplace-example.json b/han-plugin-builder/skills/guidance/references/templates/marketplace-example.json index b48708dc..b33323b4 100644 --- a/han-plugin-builder/skills/guidance/references/templates/marketplace-example.json +++ b/han-plugin-builder/skills/guidance/references/templates/marketplace-example.json @@ -11,10 +11,7 @@ "description": "Alternate description location (merged with root description)", "version": "1.0.0" }, - "allowCrossMarketplaceDependenciesOn": [ - "other-internal-marketplace", - "partner-tools-marketplace" - ], + "allowCrossMarketplaceDependenciesOn": ["other-internal-marketplace", "partner-tools-marketplace"], "plugins": [ { "name": "relative-path-plugin", diff --git a/han-plugin-builder/skills/guidance/references/templates/plugin-example.json b/han-plugin-builder/skills/guidance/references/templates/plugin-example.json index 8d439d88..8a34578d 100644 --- a/han-plugin-builder/skills/guidance/references/templates/plugin-example.json +++ b/han-plugin-builder/skills/guidance/references/templates/plugin-example.json @@ -91,8 +91,5 @@ } } ], - "dependencies": [ - "helper-lib", - { "name": "secrets-vault", "version": "~2.1.0" } - ] + "dependencies": ["helper-lib", { "name": "secrets-vault", "version": "~2.1.0" }] } diff --git a/han-reporting/.claude-plugin/plugin.json b/han-reporting/.claude-plugin/plugin.json index ac42cbcd..4b395a46 100644 --- a/han-reporting/.claude-plugin/plugin.json +++ b/han-reporting/.claude-plugin/plugin.json @@ -2,7 +2,5 @@ "name": "han-reporting", "description": "Reporting and summary skills for the Han suite. Turns feature specifications into plain-language stakeholder summaries (also called executive or business summaries) with diagrams, for sharing with non-technical stakeholders before implementation kicks off.", "version": "2.1.1", - "dependencies": [ - "han-core" - ] + "dependencies": ["han-core"] } diff --git a/han/.claude-plugin/plugin.json b/han/.claude-plugin/plugin.json index 988b8790..87d2adf7 100644 --- a/han/.claude-plugin/plugin.json +++ b/han/.claude-plugin/plugin.json @@ -2,11 +2,5 @@ "name": "han", "description": "Evidence-based planning, investigation, documentation, and review for solo and small-team product engineers. Installs the full Han suite by pulling in han-core, its planning skills (han-planning), its code-writing skills (han-coding), its GitHub extensions (han-github), and its reporting skills (han-reporting).", "version": "4.6.0", - "dependencies": [ - "han-core", - "han-planning", - "han-coding", - "han-github", - "han-reporting" - ] + "dependencies": ["han-core", "han-planning", "han-coding", "han-github", "han-reporting"] }