Commit Graph
100 Commits
Author SHA1 Message Date
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 08689dfd8f fix(media-home): repair scrutiny round-1 doc-vs-reality findings
jellyfin: send the access token over exactly ONE channel per request (drop
the simultaneous X-Emby-Token header; the MediaBrowser Token= parameter is
the sole transport, legacy fallback remains documented as substitute-never-
stack and is request-capture tested); remove the dead no-op conditional in
JellyfinClient.__init__; make the login error-path test exception-safe with
patch.object; document the test-pinned dry-run plan keys and the actual
0/1/2 exit-code mapping in worked-recipes and SKILL.md.

peertube: replace the stale dry-run shape prose ('url'/'form') with the
test-pinned {dry_run, method, path, params} / form_fields keys; harden
cmd_me against a non-dict role (no AttributeError) with regression tests;
remove the dead client facade, the unused cmd_channels variable, and the
unused List/Tuple imports (ruff F401/F841 clean).

ghost: fold the 5 nested with-statements (ruff SIM117) in test_ghost.py
into single with-statements.

All three skills double-runner + proxy-trap green (25/56/37 tests);
validate-evals, paired smoke, quality validator, core gates, and catalog
check modes green.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-29 20:32:06 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> a20b66e6c1 fix(ghost): send source=html on html writes and repair scrutiny round-1 findings
Admin API writes carrying an html payload (create-post, update-post,
create-page) now attach the docs-required ?source=html query flag;
_post/_put gained params plumbing, and the create-post dry-run plan
includes params for plan/request parity. Regression tests pin the param
whenever an html payload is present (mocked request capture and dry-run
plans) and assert its absence on mobiledoc/lexical writes.

Docs: fix the jq interpolation typo in worked-recipes recipe 2 (missing
backslash made the scheduled-posts line exit 5), replace the blanket
"exit code 2" claim in admin-auth-and-basics with the script's actual
2-5 failure-class mapping, and state the source=html requirement in the
SKILL.md --html gotcha.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-29 19:53:50 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 83e07b9ac2 docs(peertube): thicken federated video skill against current API research
Research-driven rebuild of the peertube skill (docs.joinpeertube.org REST
reference 8.1.0 + SepiaSearch + server source + live anonymous probes):

- SKILL.md rewritten to the lastfm model: intent-grouped commands, pipeline
  recipes, jq guidance, researched gotchas, When-to-use/When-not-to-use,
  reference routing table. New negative boundary in the description
  (YouTube/Vimeo uploads, video editing, server administration).
- scripts/peertube-cli -> scripts/peertube, rewritten and extended:
  offset (start/count) pagination replaces the nonexistent page param,
  comments fixed to the hyphenated /comment-threads route, server command
  now composes /config/about + /server/stats (canonical paths), search
  gains --search-target with searchTarget=local default and help text
  stating its instance-local scope, new video/comments/channel/account/
  my-videos/logout commands, --server hoisted before or after the
  subcommand, OAuth2 password grant hardened for 2FA (x-peertube-otp)
  and the production client_secret masking behavior, per-instance
  owner-only token file with refresh-before-expiry and revocation.
- references/: auth-and-tokens, search-and-discovery, endpoint-catalog,
  gotchas-field-guide, worked-recipes - all cited to official docs with
  Sources footers (URLs verified live at authoring time).
- scripts/test_peertube.py: 54 offline tests (help, argument errors,
  dry-run plans, mocked OAuth2 persistence/refresh/revocation, handler
  contracts, documented pipeline chains) passing pytest strict-markers,
  unittest discovery, and the proxy-trap zero-egress rerun; one
  env-guarded anonymous live probe (PEERTUBE_LIVE_TESTS=1).
- evals/evals.json: six schema-v1 cases incl. SepiaSearch-scope and
  masked-secret cases plus a should-not-trigger YouTube negative probe.
- README refreshed for humans; root README blurb and skill-triggers row
  synced; marketplace.json/llms.txt regenerated (codex artifacts
  unchanged); test-results/ gitignored (pytest runner artifact).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-29 18:43:00 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> bf1bba6fc6 chore(catalog): sync jellyfin blurb and regenerated catalogs
- Root README blurb and references/skill-triggers.md trigger row now
  match the thickened jellyfin description (manual-sync requirement).
- Regenerate .claude-plugin/marketplace.json and llms.txt via --write:
  both embed skill descriptions, so the rewrite staled them; check
  modes exit 0 again. Codex artifact unaffected (no descriptions).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-29 17:38:18 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 2140d0d58d docs(jellyfin): thicken media-server skill against current API research
Full lastfm-model rebuild of the jellyfin skill against the 12.0-era
OpenAPI spec, core-dev authorization guidance, and server source:

- Document the researched auth sequence end to end: complete pre-token
  Authorization: MediaBrowser Client/Device/DeviceId/Version header
  required by POST /Users/AuthenticateByName (400 "Error processing
  request." without it), AccessToken returned, then Token= on the same
  header (legacy X-Emby-Token deprecated, disableable since 10.11,
  targeted for removal at 12.0).
- Extend scripts/jellyfin: new `login` subcommand demonstrating the
  pre-token header and printing session exports (password via
  stdin/prompt/env only), seasons/episodes TV navigation, next-up
  --series-id, browse --user-id (userId is required on non-API-key
  auth per the ItemsController guard), modern Token= header transport
  with X-Emby-Token fallback, 503 Retry-After handling, search
  Id/deprecated-ItemId fallback.
- Add 5 cited reference files (auth/sessions, endpoint catalog,
  user-scoping matrix, gotchas field guide, worked recipes) plus
  quick-connect; all cite api.jellyfin.org and live-verified sources.
- Upgrade relocated scripts/test_jellyfin_cli.py to the double-runner
  standard: 24 tests (was 8) covering help, argument errors, dry-run,
  mocked login header sequence, TV navigation, search-id fallback, and
  jq-executed pipeline-consumability chains; zero egress proven via
  proxy-trap rerun.
- Add evals/evals.json (6 cases incl. emby-install-not-for-jellyfin
  negative probe); rewrite SKILL.md (224 lines) and README; sync root
  README blurb and skill-triggers row; regenerate marketplace.json and
  llms.txt (description-embedding artifacts).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-29 17:37:35 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> cc7e61ed30 docs(ghost): thicken Admin API skill
Full lastfm-model rebuild of the ghost skill against current docs.ghost.org
research:

- Fix JWT signer correctness: hex-decode the secret half before HMAC-SHA256
  signing (official contract; literal-hex signing produced invalid tokens),
  document HS256 + kid header + aud /admin/ + 5-minute token window, add
  admin_api_audience() derivation and Ghost-scheme error handling with
  researched signatures (409 UPDATE_COLLISION, 404 non-public guidance,
  INVALID_AUTH_HEADER hint, 204 delete tolerance).
- Extend CLI surface: get-post, update-post (updated_at collision guard),
  delete-post, create-page, create-tag, posts pagination (--page/--order,
  meta.pagination surfaced), scheduled posting with --published-at guard;
  dry-run now previews method/URL/payload exactly as executed.
- Add 5 cited reference files (auth/basics, content-vs-admin split incl.
  draft-visibility asymmetry, endpoint guide, worked recipes, gotchas).
- Add scripts/test_ghost.py: 28 offline tests incl. fixed-vector JWT
  known-answer checks and jq-executed pipeline-consumability chains.
- Add evals/evals.json (6 cases incl. npm ghost-cli negative probe).
- Rewrite SKILL.md (155-line body) and README in lastfm model.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 21:24:20 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 3bcf476202 fix(openlibrary): warn when merge-stub redirect walk exhausts its budget
Addresses the tracked follow-up debt from thicken-openlibrary: the client
already bounds /type/redirect stub chasing at MAX_REDIRECT_HOPS, but a
chain that outlives the budget silently handed back an opaque stub, which
downstream commands rendered as an empty-shaped record with no hint why.
The walk now emits a stderr warning naming the unresolved location before
returning; mocked test drives HOPS+1 chained stubs end to end.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 19:35:15 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 1ca147eecd fix(openlibrary): harden work/isbn JSON output shapes
cmd_work tolerates explicit "authors": null (and non-dict entries) via
(data.get("authors") or []) guarded iteration, returning an empty array
instead of raising TypeError. cmd_isbn --json now emits authors as an
array of bare OLA keys matching `work --json` under the same field:
the edition path uses tolerant key extraction (flat refs, stray
double-nested refs), dedupes, and falls back to the linked work's
double-nested author keys when the edition ships none; publishers
likewise become a real list. Human output still renders comma-joined
labels. Refreshes the recipe gotcha note that still described the old
raw-curl work-record shape.

Adds mocked coverage: null-author work record (JSON [] + human '?'),
cross-command symmetric author arrays, tolerant edition key-only and
mixed-shape refs, ISBN handoff type stability, human label rendering,
and label-vs-key separation on mixed records.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 19:32:59 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> cc962bb298 docs(trakt): executable page loop and pagination metadata contract
SKILL.md essential commands show --page usage, add a seq/jq page-loop
recipe driven by the pagination.page_count field of the JSON output
(with 429 Retry-After handling), and document that --json emits
movies/shows plus the normalized pagination object whose keys mirror
X-Pagination-* headers, degrading to {} when headers are absent; human
output notes the Page N of M footer rule. References state
per-invocation paging and the same degradation fallback. Evals replace
the header-only pagination case with an executable loop case and a
second-page trending case asserting --page, pagination keys, and array
preservation. README Quick Start and test-table rows updated to match.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 18:50:30 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> eba124cb5e fix(trakt): expose --page and normalize X-Pagination headers in JSON
Every discovery command (movie/tv x trending/popular/anticipated) now
accepts --page alongside --limit and forwards both as query parameters.
TraktClient._get returns (data, pagination) where pagination is the
X-Pagination-* header set normalized onto the stable keys page, limit,
page_count, and item_count; missing or non-numeric headers degrade to an
empty object. JSON output keeps the movies/shows array beside a new
pagination object, human output appends "Page N of M" only when the
headers are present, and cmd_movie/cmd_tv collapse into one shared
cmd_discovery handler.

Adds mocked coverage for page=2 request params across all six commands,
header normalization (full/lowercase/partial/unparseable/missing),
missing-header fallback at client level, stable movie trending wrapper
and TV shapes beside pagination, and human page-line presence rules.
Green under pytest strict-markers, unittest discover, and the proxy
trap (zero egress).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 18:49:47 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> bd92ed3fca fix(tmdb): align CLI to genre list, tv search, and find contracts
- Replace raw-argv dispatch with parsed-attribute routing; add the
  documented nested `genre list --type movie|tv` subparser while keeping
  the flat legacy form a clean argparse rejection instead of a crash.
- Route `tv search` through client.search_tv (/search/tv) with TV
  formatting (name / first_air_date) via new cmd_tv_search.
- Gate find --source to exactly the official eight external_source
  values (imdb_id, facebook_id, instagram_id, tvdb_id, tiktok_id,
  twitter_id, wikidata_id, youtube_id); docs explicitly reject retired
  freebase_mid/freebase_id; SKILL.md documents both --type variants.

Adds parser-level regression tests for genre list, endpoint-selection
and output-shape tests for tv search, and parameterized acceptance and
rejection tests for external_source values (13 tests, 10 subtests,
green under pytest strict-markers, unittest discover, and the proxy
trap).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 18:29:26 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> c90fade381 fix(openlibrary): preserve author arrays in work JSON
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 10:16:43 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 577628224b chore(catalog): refresh Trakt skill indexes
Regenerate marketplace, Codex, and llms catalogs after thickening Trakt.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 10:00:38 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 620d2c94a6 docs(trakt): thicken Trakt API discovery skill
Add researched request-header guidance, endpoint references, offline tests, and eval coverage for Trakt discovery workflows.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 10:00:10 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 8cf85fe0a6 docs(tmdb): thicken API skill
Add researched TMDb references, external-ID and detail commands, offline tests, and eval coverage. Refresh the human README and generated catalogs.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 09:52:28 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 1d95c4b020 chore(catalog): sync openlibrary blurbs and regenerate catalogs
Root README blurb and skill-triggers row updated to match the new frontmatter description; marketplace.json and llms.txt regenerated via gen-*.rb --write (codex/agents outputs unchanged). Check modes all green.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 08:44:48 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> df44337a5d docs(openlibrary): lastfm-model SKILL.md rewrite and README refresh
SKILL.md rebuilt to the lastfm model: keyless setup with covers-host table, intent-grouped commands including new editions/ratings, ISBN-to-work-to-author pipeline recipe, jq guidance, Known Gotchas grounded in researched behavior (ISBN 302 redirects, merge stubs inside HTTP 200, OL...M/W/A suffix system with double-nested author refs, availability-needs-ia projection rule, silent-empty search errors, rate etiquette), When-to-use/When-not-to-use boundaries, and a four-row reference routing table. Body 240 lines. README rewritten for humans with verified What You Get paths. Description updated with imperative verb start and negative boundary.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 08:44:37 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 3dd9955770 docs(openlibrary): add eval manifest with negative probe
Six schema-v1 cases: ISBN-to-work-author key-graph walk, ebook discovery pipeline, the ISBN 302-redirect gotcha diagnosis, author disambiguation, a should-not-trigger probe for Koha/MARC library administration (id contains -not-), and keyless-setup/rate-etiquette guidance. Passes validate-evals and the fake-adapter paired smoke.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 08:44:08 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> c6caa55bac test(openlibrary): offline suite for extended CLI
27 tests across five classes: help output, argument errors, dry-run plans, mocked-client logic (merge-stub following with .json suffix repair, work-author fallback for authors:null editions, editions paging, ratings join, covers-host URLs, empty-results-as-success), plus two live probes gated behind OPENLIBRARY_LIVE_TESTS=1 that skip cleanly otherwise. Passes strict-markers pytest, unittest discovery, and the proxy-trap zero-egress rerun.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 08:43:54 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 8b84e2e824 feat(openlibrary): extend CLI with editions/ratings and redirect handling
New subcommands: editions (per-work edition listing with next_offset) and ratings (joined ratings + bookshelf counts). The client now follows in-body /type/redirect stubs left by merged records (appending .json to stub locations, since extension-less URLs 301 into HTML), recovers author keys from the linked work when edition records ship authors:null, normalizes bare/path key forms, unwraps {type,value} text fields centrally, assembles covers-host URLs skipping -1 placeholders, and validates sort choices client-side to avoid the server's plain-text 500 on unknown values. Existing flags, subcommands, --json, and --dry-run preserved.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 08:43:43 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> ce95392915 docs(openlibrary): add API references for key graph, search, ISBN, recipes
Four cited reference files distilled from live-verified research against
openlibrary.org developer docs: OL...M/W/A key graph with merge-stub behavior,
search query syntax and error model, ISBN 302 redirect resolution and covers
host rules, plus worked curl/jq pipelines with a symptom-indexed gotcha table.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 08:43:13 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 3e0453b118 fix(jira): correct ConnectionError hint to cite JIRA_SERVER env var
The die() message on connection failure told users to 'use --server',
but no such flag exists; JIRA_SERVER is the only endpoint override.
Replace the false clause with a hint that matches actual behavior.

Flagship scrutiny follow-up (non-blocking issue 1 from
thicken-jira-flagship validation).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 06:50:46 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> af9ca0f41b chore(catalog): sync root README blurb and regenerate catalogs
Root README jira blurb now mentions count matches and the expanded JQL
reference set, matching the updated frontmatter description. Regenerated
.claude-plugin/marketplace.json and llms.txt (description embed).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 06:10:28 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 1aab3e991c docs(jira): lastfm-model SKILL.md rewrite, evals manifest, README
Rewrite SKILL.md (199/500 body lines) with Setup (basic-auth token
mechanics), intent-grouped commands incl. new count/transitions,
three pipeline recipes, jq guidance, Known Gotchas grounded in
researched API behavior (search-endpoint duality with CHANGE-2046
status, transition screen-field requirements, ADF, CAPTCHA lockouts,
rate-limit headers, accountId GDPR migration), When-to-use /
When-not-to-use boundary, and a routing table covering all six
reference files.

Add schema-v1 evals/evals.json: six cases (read-only search,
stalled-sprint bulk-close pipeline, transition-id gotcha,
approximate-count, auth setup/expiry, and a GitHub-issue
should-not-trigger negative probe). Passes validate-evals and the
paired fake smoke.

Refresh README to human format with What You Get table listing real
paths. Regenerate catalogs for the description change; sync root
README blurb.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 06:10:12 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 9843ff7f4f feat(jira): extend CLI with count/transitions and pagination fixes
Script: add a 'count' subcommand (POST /search/approximate-count) and a
'transitions' discovery subcommand, plus --resolution on transition
(satisfies Done-screen requirements in one call), offset-paginated
fetches for --max > 50 with empty-page termination when total shrinks,
parsed API error envelopes (errors map + errorMessages) instead of raw
dumps, and 429 handling surfacing Retry-After/RateLimit-Reason. Existing
flags, --json/--dry-run, and subcommands preserved; stdlib+requests only.

Tests: 20-case offline suite (help output, argument errors, dry-run
plans, mocked-client pagination/error/transition logic) passing pytest
and unittest runners including the proxy-trap zero-egress rerun.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 06:09:56 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 32474b2848 docs(jira): add REST v3 references for auth, search duality, issues
Two new reference files distilled from live Atlassian docs research:
rest-auth-and-search.md (basic-auth email+token vs OAuth/PAT split,
rate-limit headers, error envelopes, legacy /search offset paging vs
enhanced /search/jql nextPageToken model with CHANGE-2046 deprecation
status) and rest-issues-and-transitions.md (issue CRUD shapes, the
GET-transitions-then-POST flow with screen-field requirements and
resolution semantics, ADF document model). Both carry Sources footers.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 06:09:16 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 3ff46ee934 docs(jira): re-expand JQL depth sections and neutralize org example
Add jql-history-and-dates.md covering WAS/CHANGED predicate walkthrough,
relative-date expression tables, and saved-filter composition/naming
conventions, per foundation scrutiny depth directives. Swap cookbook
query 49's organizationMembers("Atlassian") for the YOUR_ORG placeholder
and fix the matching catalog example. All claims cited to live-verified
Atlassian docs.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 06:09:06 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 5a097d5693 chore(catalog): regenerate after jira-jql absorption
Refresh all three generated artifacts so they reflect the jira-jql
removal and the renamed skill set:

- .claude-plugin/marketplace.json (154 plugins)
- .codex-plugin/plugin.json (154 skills)
- llms.txt (154 skills)

The codex generator also rewrites .agents/plugins/marketplace.json;
it remains byte-identical to origin/main (single-entry pointer
artifact carrying no skill names).

All three check modes exit 0 against the current tree.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 03:16:55 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 28d9903012 docs(jira): absorb jira-jql corpus into reference files
Migrate the retired jira-jql skill content into three dense
jira/references/ files, preserving full substance:

- jql-functions-catalog.md: complete function catalog with fields and
  operators, including JSM approval functions (approved/pending/
  approver/pendingApprovalBy/myApproval family) and SLA functions
  (breached/running/paused/completed/remaining/withinCalendarHours)
- jql-best-practices.md: performance rules, operator precedence
  (AND binds tighter than OR), the empty-value trap (!= excludes
  nulls), troubleshooting flows, marketplace extensions
- jql-cookbook.md: 50 ready-to-run queries organized by role
  (developers, scrum masters, product owners/managers, power users,
  admins)

Wire a Reference Files routing table into jira/SKILL.md pointing at
all three; add JQL gotchas (empty-value trap, precedence, leading
wildcards, search-endpoint duality) and two multi-step pipeline
recipes to SKILL.md. Each migrated file carries a Sources footer with
verified Atlassian doc URLs plus attribution to the retired skill.

Token parity vs source corpus: 53/53 function tokens preserved.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 03:14:48 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 17032f8fc7 docs(triggers): cite TMDB_ACCESS_TOKEN env var in tmdb trigger row
Align the convenience-index keyword with the env vars the bundled
tmdb script actually reads (TMDB_ACCESS_TOKEN or TMDB_API_KEY).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 02:34:57 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 2619ba395f docs(skills): add When-not-to-use boundaries to renamed skills
The quality validator enforces an imperative-verb description plus a
negative boundary on every changed SKILL.md. The six renamed skills and
cli-builder carried no substantive boundary, so add a tailored
When-not-to-use section to each naming concrete alternatives (dashboard
administration, sibling platforms, adjacent skills). cli-builder lands
at 499 lines, inside the 500-line budget.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 02:26:59 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> ff1dab9273 docs(skills): repair catalog cross-references after -cli renames
Update every audited reference site to the six renamed skills:
root README headings and links (and drop the jira-jql entry ahead of
its absorption), references/skill-triggers.md rows for jellyfin and
tempest plus four new-name rows for ghost/jira/openlibrary/tmdb,
scripts/grandfathered-skills.txt pruned to the three retained *-cli
entries, pyproject.toml deptry exclusion jellyfin-cli -> jellyfin,
neckbeard routing seams, cli-builder example names, and the lastfm /
verification-methodology eval texts mentioning jellyfin.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 02:13:56 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> dd97e846ec refactor(skills): drop -cli suffix from six consumer-API skills
Rename ghost-cli, jira-cli, jellyfin-cli, openlibrary-cli, tmdb-cli,
and tempest-cli to ghost, jira, jellyfin, openlibrary, tmdb, and tempest
via git mv. Rewrite frontmatter name fields to match new directories,
rename bundled scripts preserving executable bits, update internal
invocation strings and README quick-start examples, and relocate the
jellyfin pytest suite to jellyfin/scripts/ with its SCRIPT constant now
resolving to the renamed sibling script.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-26 02:10:49 -04:00
Magnus HedemarkandGitHub e10508b034 feat(bmad): add BMad control-plane protocol skill (#400)
* feat(bmad): add BMad control-plane protocol skill

New standalone methodology skill that lets any agent run the BMad method
(Breakthrough Method of Agile AI-Driven Development) as a harness-agnostic
control-plane protocol: five-field intent contracts, direct/bounded/initiative
classification, review-as-triage, failure routing by layer, and autonomy gating
with machine-readable spec status.

- SKILL.md protocol core with progressive disclosure + When not to use
- README.md human-facing install guide
- 9 references: protocol, classification, spec, lifecycle, project-context,
  review-and-failure-routing, autonomy, party-mode, adoption
- 4 templates: SPEC, INTENT, STORY, REVIEW
- scripts/check-spec.py + 16 tests (stdlib, deterministic spec validation)
- evals/evals.json: 9 output-quality cases
- Routing seams from bmad to adjacent skills and back from
  spec-driven-development, product-shaping, implementation-planning, neckbeard
- Catalog updates: root README, skill-triggers, marketplace/plugin/llms.txt

Closes #399

* fix(bmad): address droid-review findings

- check-spec.py: skip headings inside fenced/indented code blocks so a spec
  cannot PASS on section text that only appears in a code sample
- check-spec.py: catch UnicodeDecodeError on non-UTF-8 files and report FAIL
  instead of crashing
- STORY.md template: add created key for resumability/traceability parity
- SPEC.md template: split in-progress and in-review status bullets
- add 2 regression tests (heading-in-fence, non-UTF-8)

* fix(bmad): address droid-review round 2

- check-spec.py: read specs with utf-8-sig so a UTF-8 BOM cannot silently
  disable the frontmatter status check
- check-spec.py: handle standard YAML inline comments after status values
  (status: draft  # pending review) without a false FAIL
- references/protocol.md: make lifecycle phrasing consistent with
  lifecycle.md — four phases plus a learning closeout
- add 2 regression tests (BOM, inline comment)

* fix(bmad): tolerate trailing whitespace on frontmatter delimiters

A spec whose --- delimiter lines carry trailing spaces or tabs would silently
disable the status check and let an invalid status PASS. Relax the delimiter
pattern and add a regression test.

* fix(bmad): ignore inline comments in quoted status values

* fix(bmad): tolerate leading blank lines before frontmatter

* fix(bmad): fail closed on unparseable frontmatter, matching fence markers

Address droid-review round 5 and 6 findings as a single closed class:
- Fail closed when a file opens with a --- delimiter that cannot be parsed,
  so no whitespace/frontmatter permutation can silently disable the status
  check (previously: unparseable frontmatter was treated as 'no status'
  warning, letting an invalid status PASS).
- Track fence opener markers in collect_headings so a mismatched fence no
  longer closes a code block early (false-PASS on missing sections) and an
  unclosed fence no longer swallows real headings.
- Accept empty well-formed frontmatter (---\n---) and closing delimiters
  without a trailing newline.
- STORY.md template: parent-spec points at the sibling SPEC.md.
- README: status vocabulary is not a strict linear chain; blocked is a
  resumable routing signal.

Whitespace/frontmatter mutation sweep: 9 formatting variants x valid/invalid
status all verdict correctly; malformed delimiters fail closed. 29 tests.
2026-08-24 08:05:43 -04:00
Magnus HedemarkandGitHub e4cc9d7efd Merge pull request #398 from magnus919/docs/product-shaping-routing-seams
docs(skills): add product-shaping routing seams
2026-08-23 13:13:55 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> c0412b51bd docs(skills): add product-shaping routing seams (roadmapping bets boundary, neckbeard feature path)
- product-roadmapping-and-portfolio: name the bets boundary in "When Not
  to Use" — this skill sequences strategic bets across cycles; shaping a
  single bounded bet routes to product-shaping.
- product-shaping: sharpen the existing roadmapping boundary sentence to
  spell out bet vs. sequences (appetite + circuit breaker vs.
  continue/pause/kill across cycles).
- neckbeard README: route feature-sized work through product-shaping
  between discovery (product-discovery) and specification
  (spec-driven-development).

Docs-only routing seams per #394; no behavioral content changes.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-23 13:08:25 -04:00
Magnus HedemarkandGitHub af59c45bd5 Merge pull request #397 from magnus919/docs/neckbeard-cold-reader-contract
docs(neckbeard): require cold-reader issue bodies at the change-contract gate
2026-08-23 01:06:24 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> c568bac43e docs(neckbeard): require cold-reader self-contained issue bodies at the change-contract gate
Issue/ticket bodies emitted from a delivery run must be written for a cold
reader: a contributor with none of the session context and no access to the
agent's local artifacts. Encode this at the change-contract layer so any run
that emits tracker artifacts inherits it.

- templates/change-contract.md: new "Issue/ticket body (cold-reader
  requirement)" section listing the five requirements (background naming the
  investigation, complete inline evidence with file:line refs, reproduction
  commands runnable by a stranger, acceptance-criteria checkboxes, no
  agent-local paths or private-artifact references), plus a header-note
  pointer with the litmus test.
- references/journey.md: journey-level statement of the requirement plus
  pointers at phase 1 (intake output row) and phase 5 (verification-planning
  output row) where tracker artifacts are emitted.
- evals/evals.json: add case cold-reader-issue-body-gate covering a body draft
  that references off-repo artifacts ("artifact pyramid", local /tmp ledger,
  detail available on request) and must be rejected/rewritten by the gate.

Closes #385

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-23 01:02:16 -04:00
Magnus HedemarkandGitHub 864bb7d15b Merge pull request #396 from magnus919/docs/neckbeard-gate3-traceability
docs(neckbeard): require requester-outcome traceability at gate 3
2026-08-23 00:53:00 -04:00
Magnus HedemarkandGitHub 545f92a76a Merge pull request #393 from magnus919/feat/product-shaping-skill
feat(product-shaping): add Shape Up adaptation skill for bounded product work
2026-08-23 00:51:01 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 1cd5e19620 docs(neckbeard): require requester-outcome traceability at gate 3
Implements issue #378 (Finding F4 of the journey SDLC validation brief):
separate validation from verification in the change-request journey.

Gate 3 now requires that at least one SPEC.md acceptance criterion traces
to the requester's stated outcome/problem restated from primary evidence
in phase 2 - verification proves the build matches the spec; this
criterion proves it solves the requester's actual problem (15288/12207
validation vs. verification discipline).

- references/stages.md: authoritative new Gate 3 bullet (single source
  of truth for gate definitions)
- references/journey.md: phase 4 Output and Gate rows aligned, deferring
  to stages.md; phase-continuity and gate summary unchanged
- templates/change-contract.md: acceptance-criteria guidance requires a
  criterion tracing to the Problem section
- templates/delivery-packet.md: acceptance-criteria mapping field asks
  for the requester-outcome trace for the gate-3 verdict
- evals/evals.json: gate-3 assertions updated in four full-path cases;
  all 13 case IDs stable

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-23 00:48:12 -04:00
Magnus Hedemark 571acdffca chore(generated): refresh catalog artifacts after product-methodology description update 2026-08-23 00:45:30 -04:00
Magnus Hedemark 186e7d636a fix(product-methodology): start description with imperative verb
CI's changed-skill quality gate requires descriptions to begin with a
recognized imperative verb (repo AGENTS.md rule). The seam edit in this PR
made the file a changed skill, surfacing the pre-existing violation.
2026-08-23 00:45:30 -04:00
Magnus Hedemark 673335d21a feat(product-shaping): add Shape Up adaptation skill for bounded product work
New class-level methodology skill adapted from Ryan Singer's Shape Up
(Basecamp, 2019), extended for human+AI-agent build teams:

- SKILL.md: core loop (shape -> bet -> build -> move on) with entry-point
  routing and negative trigger boundaries
- 6 references: principles, shaping (incl. non-UI work), betting, building,
  hybrid-adaptation, anti-patterns (independent field record 2019-2026)
- 2 templates: PITCH.md (five ingredients), SCOPE_MAP.md (hill states)
- evals: 6 output-quality cases incl. hybrid and routing regression cases

Routing surfaces: catalog README entry, skill-triggers index row,
product-methodology seam (consume won bets; no pre-bet shredding).
Generated artifacts regenerated against current main.

Closes #387
2026-08-23 00:45:30 -04:00
Magnus HedemarkandGitHub b0f3a954de Merge pull request #395 from magnus919/docs/neckbeard-phase9-lesson-capture
docs(neckbeard): add skip-transparent lesson capture to phase 9 closeout
2026-08-23 00:41:04 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 7c0de4cb76 docs(neckbeard): add skip-transparent lesson capture to phase 9 closeout
Implements issue #377 (journey dossier F2, ADAPT verdict): phase 9 closeout
now records lesson capture per stages.md Stage 6 "Deliver and learn" — either
the reusable lesson(s) and their durable destination (skill, memory, or
project docs), or an explicit "no reusable lesson identified" determination.
Mirrors skip transparency: silent omission is prohibited. Terminal-state
semantics stay intact — lessons are recorded IN the terminal record; a fired
trigger or follow-up starts a new change request via phase 1 intake.

- references/journey.md: phase 9 Output row gains the lesson-capture field;
  phase-continuity row updated ("terminal; triggers and lessons recorded in
  the terminal record").
- references/delivery-packet.md: group (i) row gains lesson capture; terminal
  semantics cover lessons alongside triggers; skip-transparency doctrine
  cross-referenced for closeout lessons.
- templates/delivery-packet.md: section (i) fillable "Lessons captured" field
  with durable-destination note + example line.
- references/lifecycle.md: intro, terminal-states closeout note, and closeout
  row aligned with the extended group-(i) field set.
- evals/evals.json: expected_output + assertions extended in bug-fix-
  reproduction-regression and refactor-characterization-architecture-review
  (13 IDs stable).

stages.md untouched: Stage 6 already mandates lesson capture; journey/packet
now consume it. README table unchanged (still accurate).

Closes #377

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-23 00:36:25 -04:00
Magnus HedemarkandGitHub 11a5be93ef Merge pull request #392 from magnus919/docs/neckbeard-phase9-rollback-triggers
docs(neckbeard): record rollback/follow-up triggers at phase 9 closeout
2026-08-23 00:24:38 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 176086dc48 docs(neckbeard): record rollback/follow-up triggers at phase 9 closeout
Implements issue #376 (journey dossier F1, ADAPT-minimal verdict): phase 9
closeout now records rollback/follow-up triggers alongside terminal state +
release evidence, stating what would cause re-entry; operational discoveries
route to a NEW change request via phase 1 intake instead of resurrecting the
terminal packet. Terminal-state semantics stay intact.

- references/journey.md: phase 9 Output row gains trigger fields + new-CR
  routing; phase-continuity row updated ("terminal; triggers recorded in the
  terminal record").
- references/delivery-packet.md: group (i) row gains trigger fields; terminal
  semantics clarify triggers are recorded in, not re-opening, the packet.
- templates/delivery-packet.md: section (i) fillable field + example.
- references/lifecycle.md: intro, terminal-states note, closeout row aligned.
- evals/evals.json: assertions extended in bug-fix-reproduction-regression,
  schema-migration-rollback-release-readiness, release-authority-blocked-
  terminal-state (13 IDs stable).
- research brief: F1 citation of "SKILL.md step 6" corrected to step 5.

No phase added; stages.md untouched (lesson capture is issue #377).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-23 00:20:42 -04:00
Magnus HedemarkandGitHub a855475258 Merge pull request #391 from magnus919/ci/skillevaluator-advisory-gate
ci(skillevaluator): add advisory SkillEvaluator quality gate
2026-08-23 00:11:28 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> aa19b692f9 ci(skillevaluator): add advisory SkillEvaluator quality gate
Add NVIDIA SkillEvaluator as an advisory (non-blocking) Tier 1 gate on
PRs and pushes touching skill-relevant paths. Runs the documented
keyless check set (schema,pii,license,quality,unicode,lint) pinned to
skillevaluator v0.1.0 per changed skill, uploads JSON reports as an
artifact, and posts one advisory summary line per skill to the job log.

SkillSpector is deliberately not installed: upstream still ships it
"separately installed and unpinned", so the security scan is excluded
by design until a documented compatible pair exists.

Closes #383

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-23 00:06:26 -04:00
Magnus HedemarkandGitHub 74dc86f61d Merge pull request #390 from magnus919/chore/polish-grade-c-skills-part2
chore(skills): polish grade-C skills (part 2 of 2)
2026-08-22 23:45:23 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> c628897b6f chore(catalog): regenerate artifacts for updated yc-weekly-growth-compass description
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:38:55 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 1a6d77972a chore(writers-helper): add Available Scripts table and Prerequisites/Limitations
Convert the prose Scripts list into the formal table with copy-pasteable
invocations verified against each script --help, and add factual
Prerequisites and Limitations.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:38:55 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 1f281206df chore(workflow-architect): add Prerequisites and Limitations sections
This resource-based skill ships no scripts, so instead of an Available
Scripts table, document the resources it loads (sub-skill protocols,
references, generation templates), the agent capabilities it needs, and
its real limitations (Hermes-runtime targeting, observation-mode turn
threshold, inference-only discovery).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:38:55 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 82f740f12a chore(nous-branding): add Available Scripts table and Prerequisites/Limitations
Consolidate the two generation/post-processing scripts into the formal
Available Scripts table and add factual Prerequisites and Limitations,
slotting cleanly into the post-#382 references structure.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:38:43 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> cedf44c295 chore(data-cleaning): add Available Scripts table and Prerequisites/Limitations
Document both previously undocumented pytest suites alongside the profiler
and reconciler in the formal table, and add factual Prerequisites and
Limitations.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:38:43 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> dbec36cddd chore(yc-weekly-growth-compass): add Prerequisites/Limitations, fix description gate
Add factual Prerequisites and Limitations. Lead the description with an
imperative verb and add an explicit negative boundary to satisfy the
quality validator; keep trigger keywords intact.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:38:43 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> c9c4fc531b feat(yc-weekly-growth-compass): add eval manifest and fix stale script flags
Add schema-v1 evals/evals.json with six cases covering growth check-ins,
series trending with time-to-target, decision framing, projections, a
should-not-trigger case, and benchmark honesty. Fix documented flags that
do not exist in the script (--project-weeks/--target-revenue/--add-to-
weekly) to the real ones (--project-periods/--target-value/--dry-run).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:38:43 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 249224507c feat(woodpecker-ci): add eval manifest for output quality
Add schema-v1 evals/evals.json with seven cases covering compose deployment,
pipeline YAML authoring, queued-pipeline diagnosis, secret safety for
untrusted PRs, forge-admin scope boundary, GitHub Actions should-not-
trigger, and upgrade/backup planning.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:38:29 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 62dd315520 chore(woodpecker-ci): add Available Scripts table and Prerequisites/Limitations
Formalize the woodpecker-doctor.py entry into an Available Scripts table,
add factual Prerequisites and Limitations, and normalize the negative-
boundary heading so the quality gate recognizes it.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:38:29 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 2069855ee8 chore(tailscale): add Available Scripts table and Prerequisites/Limitations
Convert the prose Root Scripts list into the formal Available Scripts table
with copy-pasteable invocations, and add factual Prerequisites and
Limitations from compatibility frontmatter and bundle behavior.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:38:29 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> f09efcdb8f feat(lastfm): add eval manifest for output quality
Add schema-v1 evals/evals.json with six cases covering listening stats,
discovery pipelines, scrobble auth requirements, geo charts, playback
should-not-trigger routing, and period/JSON handling.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:38:18 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 8675b765e5 chore(lastfm): add Available Scripts table and Prerequisites/Limitations
Convert the implicit CLI documentation into the formal table (including the
previously undocumented test-lastfm.sh), add factual Prerequisites and
Limitations from compatibility frontmatter and known gotchas, and add the
missing negative-boundary section required by the quality gate.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:38:18 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 49cdf1b533 feat(flaresolverr): add eval manifest for output quality
Add schema-v1 evals/evals.json with seven faithful cases covering challenge-
blocked retrieval, health checks, session POSTs, routing to flaresolverr-cli,
auth-bypass refusal, setup guidance, and a should-not-trigger bulk scrape.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:38:00 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> e1db555610 chore(flaresolverr): add Available Scripts table and Prerequisites/Limitations
Document the previously undocumented test-flaresolverr.sh alongside the CLI
in a formal Available Scripts table, and add factual Prerequisites and
Limitations derived from the skill real behavior.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:37:49 -04:00
Magnus HedemarkandGitHub d9afd1d396 Merge pull request #389 from magnus919/chore/polish-grade-c-skills-part1
chore(skills): polish grade-C skills (part 1 of 2)
2026-08-22 23:21:03 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 1a9df7c38a chore(catalog): regenerate artifacts for updated agent-council description
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:15:23 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 2812a927bb feat(agent-council): add eval manifest for output quality
Six schema-v1 eval cases grounded in real skill behavior: council
invocation and bootstrapping, convergence-diagnostic reading,
quick-mode selection, claims-verification discipline, profile-library
fallback, plus one should-not-trigger case for simple factual lookups.
Satisfies the eval-coverage ratchet for this modified skill.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:15:23 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 6efee5ce2b feat(agent-council): document bootstrap script, add Prerequisites/Limitations, fix description boundary
Add an Available Scripts table for scripts/bootstrap.py with invocation
and run-when guidance; add Prerequisites and Limitations covering the
single-model debate design and claims-verification guardrail. Lead the
frontmatter description with the imperative verb Run and add an explicit
negative boundary so the changed skill passes the CI quality gate; all
trigger keywords are preserved.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:15:23 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 077c5d0988 chore(actuarial-risk-modeling): add Available Scripts table and document test suite
Add an Available Scripts table covering risk_preflight.py,
temporal_split_audit.py, and the previously undocumented test_risk_scripts.py;
add Prerequisites and Limitations for the dependency-free first-pass scripts.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:15:06 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 8b02175bf7 chore(semantic-spacetime): add Available Scripts table and Prerequisites/Limitations
Document semantic-spacetime.py subcommands (lint/map/distance/trajectory/drift)
in an Available Scripts table with invocation and run-when guidance; add
Prerequisites and Limitations grounded in the CLI's read-only model analysis.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:15:06 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 3cc8c8f0f7 chore(promise-theory): add Available Scripts table and Prerequisites/Limitations
Document promise-contract.py (lint/render commands) in an Available
Scripts table with invocation and run-when guidance; add Prerequisites
and Limitations reflecting static validation scope and the not-contract-law boundary.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:15:06 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 9e079f70f5 chore(life-coach): add Available Scripts table and Prerequisites/Limitations
Document validate-capabilities.py in an Available Scripts table with
invocation and onboarding-timing guidance; add Prerequisites and
Limitations reflecting the no-capability fallback and nonclinical scope.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:14:57 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> ba7f05f490 chore(cncf-landscape): add Available Scripts table and Prerequisites/Limitations
Document landscape_query.py in an Available Scripts table with a
copy-pasteable invocation and run-when guidance; add Prerequisites and
Limitations grounded in the tool's snapshot-based, read-only design.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:14:57 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 81b104b826 chore(ascii-city-engine): add Available Scripts table and Prerequisites/Limitations
Document validate-city-pack.py in an Available Scripts table with
invocation and workflow-step timing; add Prerequisites and Limitations
covering v1 geometry bounds, CPU rendering, and offline validation scope.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:14:30 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 47cd4d430a chore(dsm5): add Available Scripts table and Prerequisites/Limitations
Document lookup.py in an Available Scripts table with invocation and
run-when guidance tied to the routing workflow; add Prerequisites and
Limitations reflecting the stdlib-only local-library search.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:14:30 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> a9e93c023a chore(aeo): add Available Scripts table and Prerequisites/Limitations
Convert the prose script list into an Available Scripts table covering
aeo_audit.py, build_prompt_matrix.py, and test_aeo_scripts.py with
copy-pasteable invocations and run-when guidance; add Prerequisites and
Limitations derived from the skill's compatibility notes.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 23:14:30 -04:00
Magnus HedemarkandGitHub ae96c47f81 Merge pull request #388 from magnus919/feat/token-budget-gate
feat(validation): add SKILL.md token-budget gate and split oversized skills
2026-08-22 22:52:20 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> c427762276 chore(catalog): regenerate artifacts for updated epub description
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 22:47:53 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> deb802fbb6 feat(epub): collapse SKILL.md sections and add eval manifest
Body was ~19.5k chars, past the new 20k token-budget gate. Collapses
Capability Discovery to a stub pointing at the existing
references/agent-capability-discovery.md, summarizes Apple Books
compatibility instead of duplicating its table, and moves the LLM
Configuration Convention plus the Knowledge Extraction Deep Dive into
references/llm-config-and-extraction.md. Keeps format essentials, the
script decision table, CLI examples, workflows, gotchas, and pitfalls,
and extends the references index with the two touched/new files; body
is now 16,261 chars.

Also adds evals/evals.json (6 output-quality cases incl. one
should-not-trigger case) to satisfy the eval-coverage ratchet.

The description previously started with "EPUB", which fails the
imperative-verb rule that CI enforces on every changed skill; it now
leads with "Read" while keeping all trigger keywords. Adds a
"When not to use" section (non-EPUB documents, DRM-locked books,
Kindle-native formats). Regenerates .claude-plugin/marketplace.json
and llms.txt accordingly.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 22:47:53 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 18f78a1c20 docs(migration-engineering): split SKILL.md into focused references
Body was ~20.5k chars, past the new 20k token-budget gate. Moves the
five migration-type classifications into
references/migration-types.md and the structured planning field tables
into references/planning-fields.md (cross-referencing
templates/migration-plan.md). SKILL.md keeps triggers, boundaries,
the workflow skeleton with summaries pointing at existing references,
the Loading Guide (now including both new files), and specialist
routing; body is now 11,432 chars.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 22:47:16 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> c8103784f8 feat(nous-branding): split SKILL.md into focused references
Body was ~24k chars, past the new 20k token-budget gate. Moves the
style-lane grammar + prompt cues + asset catalog into
references/style-lanes.md, the full visual system (palettes, mascot,
typography, textures, art style) into references/visual-system.md, and
post-processing modes/intensity calibration into
references/post-processing.md. SKILL.md keeps triggers, the negative
boundary, prompt templates, API notes, anti-patterns, compliance
checklist, and a Loading Guide table; body is now 12,042 chars.

Also adds evals/evals.json (6 output-quality cases incl. one
should-not-trigger case) to satisfy the eval-coverage ratchet, and adds
a "When not to use" section so the changed-skill quality gate passes.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 22:47:16 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 4006940e86 feat(validation): add SKILL.md token-budget gate to validate-skills.rb
Issue #382: the 500-line cap alone lets dense prose slip through, so
bodies are now measured in characters (~4 chars/token proxy for the
~5,000-token budget) after stripping YAML frontmatter. Bodies over
20,000 characters hard-error with split-into-references remediation,
mirroring the existing oversized-reference gate (#277).

Adds ReferenceFileScan.oversized_skill_md_errors next to
oversized_reference_errors, wired into the per-skill loop, with
Minitest coverage: under-limit passes, over-limit fails with path and
size, exactly-at-limit passes (strict >), huge-frontmatter/tiny-body
passes, missing-frontmatter stays silent (reported elsewhere), and
missing SKILL.md is ignored.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 22:46:58 -04:00
Magnus HedemarkandGitHub 9e40609768 Merge pull request #386 from magnus919/chore/pin-npx-versions
chore(docs): pin npx package versions in skill docs
2026-08-22 22:19:02 -04:00
Magnus Hedemark a880fc5be6 feat(hugo-theme): add eval manifest for output quality 2026-08-22 22:15:57 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> b0845776a1 chore(docs): pin npx package versions in skill docs (Fixes #381)
Pin copy-pasteable npx invocations to explicit versions so agents
executing them verbatim get reproducible behavior:

- playwright docs: npx playwright@1.62.1 (SKILL.md, README.md,
  references 02-selectors / 05-ci-integration / 07-accessibility)
- mermaid-diagrams: @mermaid-js/mermaid-cli@11.16.0 (SKILL.md,
  references/pdf-rendering-pipeline.md)
- hugo-theme seo-outputs-testing: @axe-core/cli@4.13.0
- agent-skills using-scripts.md: strengthen version-pinning bullet
  into a normative rule for copy-pasteable commands

Reword the anydoc cli-reference "Version pinning" prose so the
anti-pattern is explained didactically without presenting an unpinned
command as a recipe; the @0.1.6 house pin is unchanged.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 22:07:49 -04:00
Magnus HedemarkandGitHub 688611ec15 Merge pull request #379 from magnus919/docs/research-methodology-timeout-recovery
docs(research-methodology): add interruption and timeout recovery guidance
2026-08-22 18:39:16 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 7b70935ead feat(research-methodology): add eval manifest for output quality
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 18:35:43 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933558+factory-droid[bot]@users.noreply.github.com> 78dc36e5e8 docs(research-methodology): add when-not-to-use negative boundary
Co-authored-by: factory-droid[bot] <138933558+factory-droid[bot]@users.noreply.github.com>
2026-08-22 18:26:40 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933558+factory-droid[bot]@users.noreply.github.com> 2c7c0d59ea docs(research-methodology): add interruption and timeout recovery guidance
Document that a delegated research worker timeout is an interruption, not a
result: recover partial artifacts, resume from the last durable checkpoint,
and judge completion by evidence completeness rather than elapsed time.

Co-authored-by: factory-droid[bot] <138933558+factory-droid[bot]@users.noreply.github.com>
2026-08-22 18:20:20 -04:00
Magnus HedemarkandGitHub ea26d12be3 Merge pull request #375 from magnus919/research/neckbeard-journey-sdlc-validation
research(neckbeard): nine-phase journey validation against SDLC frameworks (#372)
2026-08-22 18:15:09 -04:00
Magnus HedemarkandGitHub 02c807aa0b Merge branch 'main' into research/neckbeard-journey-sdlc-validation 2026-08-22 18:12:30 -04:00
Magnus HedemarkandGitHub 8e6d633a37 Merge pull request #330 from magnus919/dependabot/pip/types-jsonschema-gte-4.26.0.20260518
chore(deps-dev): update types-jsonschema requirement from >=4 to >=4.26.0.20260518
2026-08-22 18:12:02 -04:00
Magnus HedemarkandGitHub a4f3557e8f Merge pull request #329 from magnus919/dependabot/pip/ruff-gte-0.16.3
chore(deps-dev): update ruff requirement from >=0.16.1 to >=0.16.3
2026-08-22 18:11:55 -04:00
Magnus HedemarkandGitHub e48751af26 Merge pull request #328 from magnus919/dependabot/pip/pytest-xdist-gte-3.8.0
chore(deps-dev): update pytest-xdist requirement from >=3.0 to >=3.8.0
2026-08-22 18:11:49 -04:00
Magnus HedemarkandGitHub 743acc354c Merge pull request #285 from magnus919/dependabot/pip/deptry-gte-0.25.1
chore(deps-dev): update deptry requirement from >=0.20 to >=0.25.1
2026-08-22 18:11:42 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933558+factory-droid[bot]@users.noreply.github.com> b1412a313c research(neckbeard): validate nine-phase journey against SDLC and agentic frameworks (#372)
Comparative dossier mapping the nine-phase change-request journey against
ISO/IEC/IEEE 15288, ISO/IEC/IEEE 12207, CMMI-DEV V1.3, and ITIL 4, plus
Anthropic Building Effective Agents, the OpenAI practical guide to building
agents, and the Agent Skills specification.

Conclusion: no material structural gaps. Three ADAPT-class documentation
recommendations (phase-9 rollback/follow-up triggers, phase-9 lesson capture
aligned with stages.md Stage 6, requester-outcome traceability at gate 3);
retirement/decommissioning confirmed as deliberate scope boundary; gate
placement converges with published agentic practice.

Co-authored-by: factory-droid[bot] <138933558+factory-droid[bot]@users.noreply.github.com>
2026-08-22 18:09:22 -04:00
Magnus HedemarkandGitHub e27a510e6d Merge pull request #284 from magnus919/dependabot/pip/radon-gte-6.0.1
chore(deps-dev): update radon requirement from >=6.0 to >=6.0.1
2026-08-22 17:59:55 -04:00
Magnus HedemarkandGitHub 0e9c085a15 Merge branch 'main' into dependabot/pip/radon-gte-6.0.1 2026-08-22 17:56:45 -04:00
Magnus HedemarkandGitHub f21eeeda04 Merge pull request #252 from magnus919/release-please--branches--main
chore(main): release 0.7.0
2026-08-22 17:48:11 -04:00