Follow-up to the 25-skill batch, driven by running our own skill_lint.py
against it.
Linter precision (engineering/write-a-skill):
- A module imported from the same skill's scripts/ directory is a permitted
local helper under Pattern 9, not a non-stdlib dependency. Previously flagged
md_render, slide_render and stats_core as external.
- Pattern 7's argparse/__main__ requirements describe entry-point tools. Pure
library modules imported by a sibling no longer fail for lacking a CLI.
- Genuine third-party imports and cross-skill imports still error.
- Checks extracted to lint_checks.py.
Script line budget — extracted cohesive units into same-directory helpers
rather than compressing, so no guidance text or docstrings were sacrificed:
- cloud-security: posture_auditor 323->230, iam_least_privilege 337->238
(+ posture_rules.py, iam_rules.py)
- statistical-analyst: run_test 326->134 (+ test_impl.py)
- reflect: calibration_scorer 340->184 (+ calibration_core.py)
- clinical-research: protocol_auditor 319->292 (+ protocol_rules.py),
sample_size_calculator 305->300 (+ power_formulas.py)
clinical-research also gains the conventional t-correction for the two-mean
design, so n now matches a t-test-based stats package (n=64/group at d=0.5,
was 63). NOTE_MEAN states the correction, the raw normal-approximation figure,
and that power-at-planned-n remains normal-approximation and marginally
optimistic. Two-proportion unchanged at n=93/group; survival unchanged at 247
Schoenfeld / 253 Freedman events at HR=0.7.
Every refactor verified byte-identical against its pre-refactor output on the
shipped samples. calibration_scorer holds its Murphy identity
(Brier = REL - RES + UNC) with selftest 12/12 and reference values
brier=0.294259 rel=0.109074 res=0.061728 unc=0.246914.
All 25 skills pass skill_lint. 72/83 documented workflow blocks exit 0; the
other 11 are documented CI gates firing on deliberately flawed sample data.
Also: capture and deep-work workflow examples now redirect into the ignored
build/ dir instead of the repo root.
Closes four coverage gaps identified by auditing the library against the
broader skills ecosystem. All content authored from scratch against
standards/skill-authoring-standard.md.
New domains:
- business-operations/ (6): capacity-planner, process-mapper,
vendor-management, internal-comms, knowledge-ops, procurement-optimizer
- research-ops/ (4): market-research, product-research, clinical-research,
research-finance — applied/operational, scoped distinct from academic
research/
- markdown-html/ (4): md-document, md-slides, md-review, design-system —
stdlib-only markdown to HTML, zero network calls
Additions to existing domains:
- engineering/ (5): write-a-skill, spec-driven-workflow, code-tour,
agent-harness, cloud-security
- data-analytics/ (1): statistical-analyst
- project-management/ (2): team-communications, meeting-analyzer
- personal-productivity/ (3): capture, deep-work, reflect
44 new stdlib-only Python tools. Verified: 82 documented workflow blocks
execute, 71 exit 0 and 11 are documented CI gates firing on deliberately
flawed sample data. Statistical implementations validated against published
reference values (stats_core: 18/18; clinical sample-size matches textbook
n=93 and n=63; calibration Murphy decomposition reconciles to 0 delta).
Pattern 9 extraction test passes, including skills with local helper imports.
Zero oversized descriptions across all affected domains.
Wiring: plugin.json for each new domain, build_manifest.py DOMAINS,
marketplace registry, per-domain CLAUDE.md, root CLAUDE.md navigation map,
README counts (368 skills / 20 domains / 859 tools). Manifests regenerated.
inbox-triage was dropped from scope — personal-productivity/email-triage
already covers it and a near-duplicate would have been worse than the gap.
Align every assistant-facing config with the real library (was 204 skills /
13 domains / 559 tools) and adopt newer platform features.
- configs: correct counts to 339/17/787 and drop dead dir refs
(engineering-team/, marketing-skill/) across .cursorrules, .windsurfrules,
.clinerules, .goosehints, AGENTS.md, GEMINI.md
- cursor: add modern .cursor/rules/*.mdc Project Rules (always-on overview,
SKILL.md authoring, scripts/*.py conventions); keep .cursorrules as fallback
- claude marketplace: rewrite marketplace.json to v3.0.0 with all 17 domains
as plugins and live counts; add the 9 missing per-domain plugin.json files
and fix the 8 stale ones
- manifest: build_manifest.py now also emits .gemini/skills-index.json (was
stuck at 203) from the same source as cli/skills.json + registry.json, so the
three machine indexes can't drift; regenerated all three
Introduce authoring Pattern 11 (Clarify-First Gate): every skill that
emits a deliverable now confirms its 2-4 highest-leverage inputs before
generating, and asks the user when an input is unknown rather than
assuming. Directly attacks the top failure mode of AI-assisted work —
a polished but misaligned artifact produced from underspecified intent.
- standards/skill-authoring-standard.md: new Pattern 11 + checklist item
- 297 generative SKILL.md files: tailored `## Clarify First` section with
a verbatim stop rule, inputs mapped to each skill's real output fields
- 41 advisory/reference skills intentionally left ungated
- gate is self-contained inline text (no cross-skill/standards runtime
dependency) so each skill keeps working when downloaded standalone
- regenerated cli/skills.json and registry.json
- Fix doc_generator.py test name parsing (was extracting project name instead of test type)
- Add resource_type filter to doc_generator.py and quality_scorer.py to prevent non-deterministic node matching
- Use collections.deque for O(1) BFS in impact_analyzer.py
- Fix schema_diff.py model name fallback to use node_id suffix instead of full ID
- Replace emoji with plain ASCII labels in CLI output across all scripts
- Fix hardcoded 'redshift' profile in dbt_project.yml template
- Add dbt_utils dependency note in schema.yml
- Add incremental-only warning to macros.sql get_incremental_filter
- Fix duplicate word typo in optimization.md
- Clarify SELECT * rule in dbt_style_guide.md (terminal CTE pattern is acceptable)