Commit Graph
26 Commits
Author SHA1 Message Date
Magnus HedemarkGitHubfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
3eb7bd4096 feat(validation): enforce 60K-char cap on skill reference files (#279)
* feat(validation): enforce 60K-char cap on skill reference files

Implements issue #277:

- validate-references.rb: new oversized_reference_errors check — every
  references/*.md must be <= 60,000 characters; error reports path, size,
  and the split-and-reindex remediation; wired into validate-skills.rb
- test-validate-skills.rb: 5 fixture tests (under-limit passes, over-limit
  fails with path+size, exactly-at-limit passes, remediation message,
  non-.md ignored); the suite now runs in validate.yml after the format
  check (it was previously untested in CI)
- Docs: agent-skills/SKILL.md, agent-skills/references/best-practices.md,
  and the AGENTS.md Format Compliance table document the cap and the
  split-and-reindex procedure
- Compliance: split remote-systems-administration/references/ansible.md
  and programming-principles/references/refactoring-guru.full.md into an
  index + focused parts (content moved verbatim); SKILL.md routing,
  README, and source-index references updated; pre-existing stale
  refactoring-guru-smells.md reference repointed to the index
- Fix pre-existing quality-gate violations in the programming-principles
  and remote-systems-administration descriptions (imperative verb +
  negative boundary) so this PR's CI quality step passes; regenerated
  llms.txt and marketplace artifacts

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>

* test(evals): add eval manifests to modified skills for ratchet

The eval-coverage ratchet requires schema-valid eval manifests for any
skill modified once coverage is past 50%. This PR modifies
programming-principles and remote-systems-administration (splitting
their oversized references), so add evals/evals.json to both:

- programming-principles: 6 output-quality cases (task-to-book mapping,
  principled code review, refactor-vs-rewrite, no-op detection, rule
  distillation, principle conflicts)
- remote-systems-administration: 6 output-quality cases (discovery
  before change, smallest control plane, rollback planning, platform
  identification, verification evidence, escalation on missing
  authority)

Coverage: 87/145 (60.0%) schema-valid; ratchet clean.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>

---------

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-04 22:39:14 -04:00
Magnus HedemarkGitHubfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
aa893e3ec2 feat(bundles): define bundle manifests and lifecycle capability matrix (#203) (#231)
* feat(bundles): add bundle manifest schema, manifests, and validation (#203)

Introduce a machine-readable composition contract for canonical bundles:
purpose, audience, stages, included skills, prerequisites, outputs,
handoffs, conflicts, and eval suite (schemas/bundle-manifest-v1.schema.json,
following the evals-v1 versioned-schema convention). Ship the bounded design
note (docs/bundle-manifest-design.md), a schema-conformant example, canonical
manifests for the three new milestone bundles, and a stdlib-only validator
(scripts/validate-bundles.rb) that rejects incomplete, contradictory, and
undeclared-overlapping manifests while keeping bundles an optional layer.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>

* feat(bundles): add lifecycle capability matrix generator and validators (#203)

Add scripts/gen-lifecycle-matrix.rb, which deterministically produces the
human-readable docs/lifecycle-capability-matrix.md (one row per canonical
bundle) and the machine-readable docs/lifecycle-capability-matrix.json (with
per-cell source provenance) reusing the gen-*.rb conventions. Add
scripts/validate-lifecycle-matrix.rb to check bundle coverage, cell
traceability, artifact currency, and catalog-exactness of nested bundle
helpers.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>

* test(bundles): add bundle manifest validation tests (#203)

Add scripts/test-validate-bundles.rb covering schema conformance of the
committed example, valid-manifest and declared-conflict positives, per-field
incomplete-manifest rejections, contradictory-manifest rejections (missing
skill, undeclared handoff artifact, non-catalog conflict), undeclared-overlap
rejection naming both manifests, and matrix generator/validator
completeness and drift detection.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>

* ci(bundles): wire bundle manifest validation into the gate (#203)

Add validate-bundles.rb, test-validate-bundles.rb, the lifecycle matrix
generator check, and the matrix validator to .github/workflows/validate.yml
alongside the existing validator steps.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>

---------

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-02 19:48:09 -04:00
Magnus HedemarkGitHubusername <username>factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
8d30f22cb8 fix(product-strategy): correct stale RICE reference (#211)
* fix(product-strategy): correct stale RICE reference

Fix the misspelled prose reference at product-strategy/references/product-strategy.md:69
to point at the canonical rice-framework.md owned by product-methodology. Add a
repository check that scans references/*.md for stale prose backtick references
to nonexistent files (the bug class the SKILL.md link-resolution pass cannot
see), wired into validate-skills.rb, with a regression test suite proving the
stale reference is caught when reintroduced. product-strategy and
product-methodology remain grandfathered; no evals manifests are added.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>

* fix(validate-references): case-sensitive resolution for stale-reference scan

The references scan resolved backtick tokens case-insensitively on hosts with
case-insensitive filesystems (default macOS APFS), so a token such as
`EVIDENCE-LEDGER.md` matched an existing lowercase `evidence-ledger.md` and
escaped detection locally while failing CI's Linux runners. Resolve candidates
against exact directory entries so results match CI on every host, and treat
neckbeard delivery-packet field names (EVIDENCE-LEDGER, DELIVERY-SPEC, REVIEW,
V2-SPEC) as doc-type names rather than file references. Adds regression tests
for case-mismatched and exact-case references.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>

---------

Co-authored-by: username <username>
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-02 16:07:05 -04:00
usernameandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 96f0bd4e46 fix(ci): prevent sys.modules cross-contamination between test directories in check-artifacts
When unittest discover processes skills/binary-analysis/tests/ before
tests/, the integration package gets cached in sys.modules from the
first discover call. Later discover calls reuse the cached package
which doesn't contain the expected test modules, causing spurious
ModuleNotFoundError failures.

Fix: snapshot and restore sys.modules between discover iterations.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-07-30 19:10:03 -04:00
Magnus HedemarkandGitHub 865a1e90c6 feat: fix remaining agent readiness signals for level 5
Squash merge. All CI passes.

4 signals fixed: min_release_age, issue_labeling_system, error_to_insight_pipeline, deployment_observability.
2026-07-29 18:33:55 -04:00
Magnus HedemarkandGitHub 6b44d6f490 feat: improve agent readiness with dev tooling, CI checks, and tests
All CI steps pass including the root pyproject.toml build fix.

14 signals addressed across 3 phases:
- Phase 1: single_command_setup, devcontainer, large_file_detection, tech_debt_tracking, duplicate_code_detection
- Phase 2: structured_logging, log_scrubbing, test_isolation, service_flow_documented, agents_md_validation
- Phase 3: integration_tests_exist, automated_security_review, runbooks_documented, issue_labeling_system
2026-07-29 18:23:26 -04:00
usernameandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> bfe05ef18a feat(ci): add mypy, radon, and deptry to CI pipeline
Add mypy strict type checking, radon cyclomatic complexity analysis,
and deptry unused dependency detection. Fix type annotations in
eval-coverage.py and release.py to pass strict mypy checks.

Resolves 4 agent-readiness signals: type_check, strict_typing,
cyclomatic_complexity, unused_dependencies_detection.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-07-29 17:52:28 -04:00
usernameandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 476d7e11b0 feat(ci): add linting, formatting, coverage, and security configs
Add ruff linter/formatter with pre-commit hooks, pytest-cov with 60%
coverage threshold, CODEOWNERS, Dependabot for pip/GHA updates, and
.env.example. Auto-fix existing ruff violations across eval_runner/
and scripts/.

10 agent-readiness criteria resolved: lint_config, formatter,
pre_commit_hooks, naming_consistency, dead_code_detection,
test_coverage_thresholds, test_performance_tracking, codeowners,
dependency_update_automation, env_template.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-07-29 17:43:41 -04:00
username 687d7d7c33 fix: permit removal of eval-covered skills 2026-07-27 10:04:27 -04:00
Magnus HedemarkGitHubmagnus919 <magnus919>
a617ccaf2d feat: validate eval manifest coverage states (#129)
* feat: validate eval manifest coverage states

* test: create fixture directory explicitly

---------

Co-authored-by: magnus919 <magnus919>
2026-07-24 18:13:32 -04:00
Magnus HedemarkGitHubmagnus919 <magnus919>
547aed2db9 fix(verification): preserve requested source fidelity (#127)
Co-authored-by: magnus919 <magnus919>
2026-07-24 16:42:39 -04:00
Magnus HedemarkandGitHub 1e10a56199 fix: complete eval ratchet verification (#109)
Closes #102

Authored by Jasper (AI agent on behalf of @magnus919).
2026-07-22 02:16:36 -04:00
Magnus HedemarkandGitHub fc8a8952ee fix: enforce eval coverage ratchet for complete changed skill directories (#107)
Wire the Phase 3 ratchet into CI by passing the PR base SHA to
eval-coverage.py --modified-from. Expand changed-skill detection from
SKILL.md-only diffs to the entire skill directory so that references,
scripts, fixtures, README, and eval manifest edits all count as
modifications. Add a monotonic coverage floor that fails CI when
coverage decreases between the base and candidate revisions.

Add script tests for ratchet-mode detection and coverage-decrease
behaviour. Update AGENTS.md and CONTRIBUTING.md to describe the
behaviour CI now enforces.

Closes #102

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-07-22 01:51:57 -04:00
Magnus HedemarkandGitHub be0c8df5e2 feat: eval coverage ratchet — gate new skills, track coverage, ratchet thresholds (#99)
Phase 1: New skills (not in grandfathered-skills.txt) must have
evals/evals.json with at least 5 test cases. All 107 existing skills
are grandfathered.

Phase 2: scripts/eval-coverage.py reports coverage (skills with/without
evals, case counts, reference-priority sorting). Added as informational
CI step.

Phase 3: Ratchet thresholds — at 25% coverage, modified skills without
evals get a warning; at 50%, they fail CI. Enforced via
--modified-from flag for PR-scoped checks.

Closes #90
2026-07-21 21:03:21 -04:00
Magnus HedemarkGitHubmagnus919 <magnus919>
dd457f1170 fix: close skill quality lint gaps (#98)
Co-authored-by: magnus919 <magnus919>
2026-07-21 20:47:16 -04:00
Magnus HedemarkGitHubmagnus919 <magnus919>
c092a14c8e feat: validate changed skill descriptions (#97)
Co-authored-by: magnus919 <magnus919>
2026-07-21 20:00:38 -04:00
Magnus HedemarkGitHubmagnus919 <magnus919>
cde4a67ef4 feat: add generated llms.txt skill index (#93)
Generate a root discovery catalog from public skill frontmatter and fail CI
when the committed index drifts. Add a fixture-based regression test for
bundle paths, nested-helper exclusion, normalized descriptions,
deterministic ordering, and stale-file recovery.

Closes #78

AI-assisted: yes (Jasper/Hermes Agent)

Co-authored-by: magnus919 <magnus919>
2026-07-21 17:48:38 -04:00
Magnus HedemarkandGitHub 3d650dad77 fix: correct bundle skill paths in Codex plugin manifest (#91)
The generator used File.basename which stripped the bundles/ prefix,
emitting ./neckbeard instead of ./bundles/neckbeard. Codex discovered
92/96 skills — the 4 bundle entrypoints were missing because their
paths didn't resolve.

Verified with live Codex CLI: all 96 skills now discoverable.

AI-assisted: yes (Jasper/Hermes Agent)
2026-07-21 14:20:56 -04:00
Magnus HedemarkandGitHub 0f2aaf1583 feat: add Codex plugin packaging (single-plugin, metadata-only) (#83)
* feat: add Codex plugin packaging (single-plugin, metadata-only)

Adds .codex-plugin/plugin.json with a skills array listing all public
skills, plus .agents/plugins/marketplace.json for one-command install:

  codex plugin marketplace add magnus919/agent-skills
  codex plugin install magnus919

Same pattern as mattpocock/skills — one plugin, explicit skill paths,
no dist/, no curation, no duplication. Bundle-internal helpers excluded
by the shared glob. CI check mode fails if the manifest drifts.

Closes #79

AI-assisted: yes (Jasper/Hermes Agent)

* chore: trigger CI

* chore: regenerate Codex plugin manifest to include neckbeard bundle
2026-07-21 03:13:20 -04:00
Magnus HedemarkandGitHub 3c8b6cd71c feat: add Claude Code plugin marketplace (metadata-only catalog) (#80)
Adds .claude-plugin/marketplace.json exposing all 95 public skills as
installable plugins via /plugin marketplace add magnus919/agent-skills.

Metadata-only approach: each entry uses source './' + skills ['./<name>']
+ strict:false, so no per-skill plugin.json or directory restructuring is
needed. Bundle-internal helper skills are excluded; bundle entrypoints are
included.

- scripts/gen-claude-marketplace.rb: generates and validates the manifest
- CI step fails if marketplace.json drifts from the skill tree
- README: Claude Code install instructions

Closes #76

AI-assisted: yes (Jasper/Hermes Agent)
2026-07-21 02:17:35 -04:00
Magnus HedemarkandGitHub bd66202e06 fix: remove invalid Hermes skill metadata (#67) 2026-07-19 01:04:33 -04:00
Magnus HedemarkandGitHub 7243433565 chore: align governance with shipped artifact types (#62)
Closes #61\n\nImplemented and independently reviewed with AI assistance from Jasper on behalf of Magnus Hedemark.
2026-07-17 23:37:37 -04:00
Magnus HedemarkandGitHub 139e7d87c4 docs: enforce complete root skill catalog coverage (#42)
Closes #39
2026-07-13 12:32:53 -04:00
Magnus HedemarkandGitHub e0857d385a docs: enforce alphabetical root skill catalog order (#38)
Closes #28
2026-07-13 12:02:53 -04:00
Jasper (AI Assistant) 637c12d832 fix: align skill audit conventions (#101) 2026-07-11 15:40:50 -04:00
Magnus Hedemark a5f7e74972 fix: resolve skill audit findings 2026-07-11 09:24:58 -04:00