Skip to content

plugin: han-communication - extracting a new plugin from han-core, and consolidating guidance#114

Draft
mxriverlynn wants to merge 21 commits into
mainfrom
han-communication
Draft

plugin: han-communication - extracting a new plugin from han-core, and consolidating guidance#114
mxriverlynn wants to merge 21 commits into
mainfrom
han-communication

Conversation

@mxriverlynn

@mxriverlynn mxriverlynn commented Jul 10, 2026

Copy link
Copy Markdown
Collaborator

140+ files, and +4K/-1K ... 😭 this may be the cause of a Han v5 release. still a WIP though. needs a lot of testing and fine tuning first.

that said ...


Summary

This PR extracts Han's readability standard into a new foundational han-communication plugin that every prose-producing plugin depends on, so the writing rule and voice profile live in one canonical place instead of being copy-pasted into each plugin.

Behavior changes

The readability standard now has a single owner. Before this branch, readability-rule.md and writing-voice.md were vendored into han-core, han-github, and han-reporting. "Vendored" means the same files were duplicated on disk. Editing the standard meant editing several copies and hoping they stayed in sync. Now the two files live only in han-communication/references/, the duplicates are deleted, and there is one source of truth.

Consuming skills reach the standard through a new inline skill, han-communication:readability-guidance. "Inline" means it runs in the calling skill's own context rather than in a separate agent. It reads the two canonical reference files and hands control straight back, so the standard stays loaded while the caller drafts and self-checks. Rewired skills (code-review, research, update-pr-description, stakeholder-summary, and others) now invoke that skill instead of reading a vendored copy. The readability-editor agent and the edit-for-readability skill also moved into han-communication. The adversarial rewrite pass they perform is unchanged.

For anyone installing the suite, han-communication is a new dependency edge beneath everything. The han meta-plugin now bundles it, and han-core, han-coding, han-github, han-reporting, and the opt-in han-atlassian each declare a direct dependency on it. This is han-core's first-ever dependency. Installing any prose-producing plugin now pulls in han-communication automatically.

What to look at first

  1. Start with han-communication/skills/readability-guidance/SKILL.md. It holds the new inline skill and the mechanism the whole PR turns on. Confirm that the "runs in the caller's context, does not produce a deliverable" contract reads clearly, since every consumer now depends on that behavior.
  2. Check the dependency edges in the plugin.json manifests and .claude-plugin/marketplace.json. Verify that the new han-communication dependency is declared on each prose-producing plugin and that the meta-plugin bundles it, so no consumer sources the standard without depending on its owner.
  3. Read one or two rewired consumer SKILL.md files, for example han-core/skills/research/SKILL.md and han-github/skills/update-pr-description/SKILL.md. Check that the cross-plugin invocation replaces the old vendored read cleanly and that nothing still points at a deleted copy.
  4. Compare the Phase 4 deletions (git show 563efec --stat) against the Phase 3 rewiring. Confirm that every vendored copy that was removed had its consumers repointed first, so no skill is left reading a file that no longer exists.

Extract readability-editor, edit-for-readability, and their reference
docs into a new foundational han-communication plugin; consuming skills
delegate to it rather than reading vendored copies.
Full delegation (user choice) replaces all three inline uses of the
standard; D4 rescoped, D5 gains opt-in dependency fallback, D7 expands
to the full docs/tooling inventory; 11 findings recorded.
Resolve dead spec anchors, add missing inline D1/D5 links, complete
cross-reference fields on all decisions and findings.
…ndency

Every plugin that hosts or triggers a delegating skill (han-core,
han-coding, han-github, han-reporting, han meta, han-atlassian) declares
han-communication directly; no transitive-resolution reliance. Closes
OI-1 and cleans up han-planning exclusion wording.
…findings

Team (junior-developer, adversarial-validator, evidence-based-investigator,
gap-analyzer) confirmed the plan's foundations and surfaced: step-order
preservation risk under forced delegation (D4), dependency-graph narration
scope (D7 class 5), manifest description updates (D8), the Codex packaging
surface (new D10), plus delegation-scope wording and future-wrapper rule.
…me doc scope

Resolve 9 findings: split Preconditions for the Codex surface (F23),
widen D4's step-preservation commitment to renumber/split/heading cases
(F28), qualify D10 Codex parity + opt-in install path + OI-2 (F29), and
reframe D7 doc classes as a comprehensive grep so the recurring
missed-file class is closed (F25-F27, F30, F31).
Final round (Large cap): junior-developer clean; adversarial-validator
reproduced the D5/D10 inventories and confirmed no file-discovery gap.
Resolved 4 refinements (F32-F35): rewrite-depth for docs/readability.md,
order-significant non-numbered lists in the preservation commitment,
OI-2 blast-radius correction, and the mandated Review History section.
…guidance skill)

Adopt the readability-guidance skill approach after evidence gathering
(Claude Code docs + in-repo): skills invoked via the Skill tool run in
the same context, so han-communication exposes a resource-surfacing
readability-guidance skill that sources the standard cross-plugin for
in-voice drafting. D3 reframed (source cross-plugin), D4 reframed (staged
model, editor retained for synthesis only), D11 added (the guidance
mechanism), OI-3 added (prototype gate). Preserves docs/readability.md's
staged model that full delegation collapsed; rehabilitates the F3 hybrid.
…ated

Adversarial R4 found readability-guidance is the repo's documented
data-fetch composition anti-pattern (skill-composition.md). Per user
direction (option 3): built and ran an inline prototype (resumed 3/3 —
weak signal, not reliability), did NOT update skill-composition.md,
hardened OI-3 into a rigorous blocking spike with a named fallback, and
captured the risk + inline-vs-fork distinction on D11. Fixed revision
propagation: stale D7 'abolished staged model' (F36), editor rule-path
break (F37), impossible edge-case examples (F40), decision counts (F43),
and refreshed the Review History for R4.
…ualified

Rigorous subagent-harness spike (46 trials, 4 arms): 34/34 same-context
Skill-call invocations completed with zero early exits, including a
worst-case adversarial arm. Forked context:fork disqualified because it
isolates the guidance so its content never reaches the caller. api_retry
could not be induced (infra-level fault), so that path is reduced by
inference, not measured. D11 known-risk resolved and prototype gate
cleared; skill-composition.md to record the inline variant as a
supported exception.
Records the spike outcome in the spec: OI-3 marked resolved, the inline
readability-guidance mechanism validated (34/34 same-context runs, zero
early exits) and the forked variant disqualified. Bakes the inline (no
context:fork) requirement into the Primary Flow, updates the open-item
count 2 -> 1, and notes the unmeasured api_retry residual risk plus the
documented fallbacks.
…ption

The OI-3 spike validated one narrow shape that looks like data-fetch but
is supported: an inline (never context:fork) sub-skill that surfaces a
whole shared standard into the caller's context and hands control back.
Carves it out of the data-fetch section with its three defining
properties, adds it to the decision guide, and keeps the honest limit
that api_retry was not directly exercised.
Move the spike report, incident fixture, all 46 trial artifacts, and the
8 harness skill definitions from the session scratchpad into
artifacts/oi-3-spike/ so the spike is reproducible independent of the
session that ran it. Add a pointer from the research note.
…anic graduated to T1

Lightweight self-review round confirming the post-spike edits are
internally consistent (open-item count, trial counts, cross-file claims
all agree). One finding (F46): the OI-3 edit had leaked the context:fork
frontmatter mechanic into a Primary Flow behavioral sentence. Since the
spike settled that mechanic, it graduates from the OI-3 open item to a
new technical note T1; Primary Flow restated behaviorally. No blocking
open items remain (OI-2 non-blocking); spec ready for plan-implementation.
…ation)

Medium team (PM + junior-developer + structural-analyst + devops-engineer
+ test-engineer), 2 rounds. Produces feature-implementation-plan.md plus
the implementation decision log (8 full + 1 trivial decision) and
iteration history, and a discovery-notes inventory.

Key outcomes: 6-phase copy-first/delete-last sequencing with a hard
pre-delete grep gate; the exact 6-plugin direct-dependency edge list
(confirming D5 from scratch); editor invocation-contract change (rename +
drop rule-path arg); the Codex surface is EXTENDED not built (RECON-1),
with zero Codex dependency/description edits; version bumps listed but
deferred to release (han-core a MAJOR candidate); a grep-driven docs
sweep including the 'agents live in han-core' exception; manual
verification (static grep/diff + one light smoke, no CI). 3 YAGNI
deferrals. Open items OI-2 and the semver call are both non-blocking.
…(Phase 1)

Stand up the new han-communication plugin additively — the suite still runs on
the existing vendored copies until later phases rewire and delete them.

- Both manifests: .claude-plugin/plugin.json (no dependencies) and
  .codex-plugin/plugin.json mirroring han-core's Codex schema
- Co-located canonical references/readability-rule.md + writing-voice.md
- readability-editor agent and edit-for-readability skill (byte copies)
- New inline readability-guidance skill (no context: fork) that surfaces the
  standard into the caller's context
- han-communication entries added to both marketplaces

Refs feature-implementation-plan.md D-4, D-7, T1.
…e 2)

Add the han-communication dependency edge to the six declaring Claude
manifests before any consumer rewire, so the capability resolves by qualified
name once Phase 3 lands.

- han-core gains its first-ever dependencies key (["han-communication"])
- han-coding, han-github, han-reporting prepend han-communication
- han meta and han-atlassian prepend han-communication
- Update dependency-narrating descriptions for han, han-coding, han-atlassian
  in both plugin.json and the marketplace.json mirror
- han-planning, han-linear, han-feedback, han-plugin-builder untouched
- Zero Codex edits (schema has no dependencies field)

Refs feature-implementation-plan.md D-1, D-4.
…s-plugin (Phase 3)

All 13 consumer skills now source the shared readability standard by invoking
han-communication:readability-guidance at their drafting point instead of
reading a vendored ../../references/readability-rule.md file.

- 9 synthesis skills: editor dispatch renamed han-core -> han-communication and
  the now-unresolvable rule-path argument dropped (the editor reads its own
  co-located canonical rule); gap-analysis's size-conditional skip preserved
- 4 draft-and-self-check skills (runbook, issue-triage, ADR, html-summary):
  gain the guidance invocation, dispatch no editor
- edit-for-readability (han-communication copy): editor rename + rule-path drop
- self-check lead-ins repointed to the in-context standard; the six criteria
  blocks are unchanged
- 6 secondary template/reference files repointed off the dead rule path

Refs feature-implementation-plan.md D-3.
…s (Phase 4)

With every consumer rewired and the pre-delete grep gate clean, remove the
duplicated readability capability so han-communication owns the only copy.

- 6 vendored references deleted (han-coding, han-github, han-reporting x
  readability-rule.md + writing-voice.md)
- 4 han-core originals deleted (readability-editor agent, edit-for-readability
  skill, readability-rule.md, writing-voice.md)
- find now returns exactly one copy of each reference file
- no han-core:readability-editor / han-core:edit-for-readability name survives
  in plugin source

Refs feature-implementation-plan.md D-2.
…ove (Phase 5)

Repoint every doc, index, and dependency narration at the new han-communication
home and reframe the invariants the move inverts.

- Move long-form docs: readability-editor -> docs/agents/han-communication/,
  edit-for-readability -> docs/skills/han-communication/; fix their sibling links
- New readability-guidance long-form doc, with the api_retry residual-risk
  troubleshooting note
- Skills index gains a foundational han-communication section (readability-guidance
  + edit-for-readability); agents index entry repointed
- Reframe "all agents live in han-core" to name the han-communication exception
  (CLAUDE.md, CONTRIBUTING.md); record han-core's first-ever dependency
- Replace the vendoring instruction with cross-plugin sourcing via
  readability-guidance (CONTRIBUTING.md, docs/readability.md)
- Repoint canonical readability-rule.md / writing-voice.md pointers, dependency
  narration (README, choosing-a-han-plugin, extend-han how-to), and the
  han-atlassian Codex co-requisite; add han-communication to both install lists
- Repoint live .claude/ maintenance skills and the PR template at the new
  writing-voice.md location
- CHANGELOG Unreleased entry records the extraction; history left untouched

Refs feature-implementation-plan.md D-6, D-7, D-9.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant