Commit Graph
100 Commits
Author SHA1 Message Date
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
Magnus HedemarkGitHubfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
1c6982f5e9 Merge pull request #373 from magnus919/feat/neckbeard-position-assessment
feat(neckbeard): position-assessment entry mode and tracker-neutral intake

Closes #371. Merged at head 5aee6fc after branch update from main; CI green at that SHA on the merged tree (validate, paired-eval-smoke, paired-eval-tests).

Six rounds of droid-review did not converge to zero findings; per the documented stop, the four remaining non-blocking prose-consistency findings (two touching trust-boundary doctrine) are recorded in the PR timeline as follow-up material for a separate reviewed change.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 17:43:05 -04:00
Magnus HedemarkandGitHub 5aee6fcf9d Merge branch 'main' into feat/neckbeard-position-assessment 2026-08-22 17:38:28 -04:00
Magnus HedemarkandGitHub fb8f5c8894 Merge pull request #374 from magnus919/feat/litellm-skill
feat(skill): add LiteLLM AI gateway operations skill
2026-08-22 15:35:58 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 030e6dfd47 feat(skill): add LiteLLM AI gateway operations skill
Add litellm/, an operational tool skill for the LiteLLM AI gateway (proxy)
and Python SDK, in the same vein as the vllm and llama-cpp engine skills.

Contents:
- SKILL.md: operating contract, operating loop, verification boundaries,
  and hard boundaries; concise core sections routing depth to references
- README.md: human-facing install/use guide with required sections
- references/: nine dated, source-indexed references (source index,
  quickstart + SDK, config & routing, keys/teams/budgets/spend, caching &
  guardrails, observability & logging, deployment, security & public
  hosting, troubleshooting), researched against litellm 1.97.0
  (2026-08-22) including a live proxy probe of the health endpoints
- scripts/litellm-health: read-only GET-only probe (liveliness, readiness,
  /v1/models, /model/info); stdlib-only Python 3.9+, --json, --help
  without a server
- tests/test_litellm_health.py: 18 deterministic tests against a local
  stub HTTP server, including the observed-traffic GET-only contract
- templates/proxy-config-record.md and proxy-deployment.md: fillable
  records; the config record is the rollback unit
- evals/evals.json: schema_version 1, six output-quality cases

Also regenerates tracked catalog artifacts (.claude-plugin/marketplace.json,
.codex-plugin/plugin.json, llms.txt) and adds the root README catalog entry
plus the skill-triggers.md index row.

AI assistance: authored with AI assistance (Factory Droid) under human
direction; facts verified against litellm 1.97.0 and official docs dated
2026-08-22.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-22 15:31:16 -04:00
Magnus HedemarkandGitHub f7d550bb6b fix(site-reliability): make recovery closure gate explicit (#370)
* fix(site-reliability): make recovery closure gate explicit

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): close review gaps

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): link closure evidence sequence

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): link executive closure evidence

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): close authorization and monitoring gaps

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): close mutation and monitoring gaps

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): gate detailed runbook mutations

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): gate remaining operational paths

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): make authorization evidence attributable

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): close final review gaps

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): require independent recovery confirmation

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): close recovery evidence review gaps

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): complete human recovery handoff

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): normalize recovery status tokens

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): require independent resolution approval

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): close authorization consistency gaps

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): normalize incident status guidance

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): carry human confirmation through resolution

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): complete incident closure evidence

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): remove automated recovery claim

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix(site-reliability): normalize monitoring announcement

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

---------

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-22 06:27:18 -04:00
Magnus HedemarkandGitHub 1291f9576e fix: SkillOpt optimize AI operating economics (#369)
* fix: SkillOpt epoch 1 for AI operating economics

Promote cold-load entry points, quick-start reference routing, the minimum decision-record contract, and trigger-oriented progressive disclosure.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix: SkillOpt epoch 2 for AI operating economics

Add review-depth selection, evidence-to-disposition guidance, and scenario-led routing across adjacent skills.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix: SkillOpt epoch 3 for AI operating economics

Expose a minimum claim ledger and explicit closure conditions for every bounded disposition.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix: resolve SkillOpt review consistency findings

Align entry-point paths, canonical step routing, claim-ledger fields, and triage disposition wording.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix: resolve final SkillOpt disposition wording

Keep review-depth outputs inside the canonical disposition set and distinguish supported claims from permitted language.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix: complete SkillOpt routing correction

Route triage through the outcome-map step and identify the evidence-classification step explicitly.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix: complete AI economics review template

Add the minimum decision-record fields required by the optimized skill routing contract.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

---------

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 16:21:23 -04:00
Magnus HedemarkandGitHub 94b7231147 feat: add AI operating economics skill (#368)
* feat: add AI operating economics skill

Add an evidence-led methodology for evaluating AI workflow value, cost, worker effects, quality guardrails, and authority expansion. Includes research references, durable decision templates, and six eval cases. AI assistance: Jasper, on behalf of Magnus Hedemark.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

* fix: resolve AI economics review findings

Align section numbering, evidence-language examples, and intervention-mode terminology identified by the exact-head review.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>

---------

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 13:53:49 -04:00
Magnus HedemarkandGitHub 00e611ae88 fix(architecture): route distributed mechanisms to DDIA (#367)
Add progressive DDIA handoff and focused replication, partitioning, fencing, and isolation eval coverage.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 06:13:32 -04:00
Magnus HedemarkandGitHub f6dc2cea9f feat(diagrams): add communication quality gates (#364)
Add audience, narrative, hierarchy, representation, accessibility, uncertainty, review evidence, and eval coverage for C4 and Mermaid artifacts.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 05:32:35 -04:00
Magnus HedemarkandGitHub 05e6a038d2 feat(capacity): add tenant demand and unit cost (#363)
Add distribution, skew, headroom, fairness, cost allocation, representative evidence, templates, evals, and specialist routing.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 05:01:58 -04:00
Magnus HedemarkandGitHub 016be9c1e8 feat(security): deepen tenant boundary controls (#362)
Add plane separation, identity propagation, support access, resource isolation, lifecycle proof, exhaustion threats, evals, and specialist routing.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 04:32:29 -04:00
Magnus HedemarkandGitHub 79caa0bb25 feat(backend): add event and coexistence patterns (#361)
Add outbox/inbox implementation, idempotent message handling, migration coexistence seams, evals, and exact specialist routing.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 03:53:10 -04:00
Magnus HedemarkandGitHub 11381f89c3 feat: add multi-tenant SaaS architecture (#360)
Add tenant semantics, planes, tenancy models, lifecycle and commercial handoffs, operations, templates, evals, and specialist routing.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 03:13:16 -04:00
Magnus HedemarkandGitHub 8174e820e2 feat: add enterprise architecture methodology (#359)
Add capability and portfolio mapping, state transitions, operating models, decision rights, stakeholder information, templates, evals, and neighboring-owner routing.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 02:49:55 -04:00
Magnus HedemarkandGitHub 73a4250f74 feat: add software architecture methodology (#358)
Add system-level architecture design, tradeoff, distributed workflow, evolution, facilitation, template, eval, and adjacent-owner routing guidance.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 02:03:24 -04:00
Magnus HedemarkandGitHub cc70502f79 feat(radar): make architecture governance proportional (#357)
Replace board-centric defaults with consequence-driven governance modes, feedback loops, exceptions, and clear ownership boundaries.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 01:20:21 -04:00
Magnus HedemarkandGitHub a56360b9a2 feat(adr): deepen fitness-function evidence (#356)
Add a lifecycle method and reusable record for connecting architecture decisions to checks, evidence, review, exceptions, and retirement.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 00:51:46 -04:00
Magnus HedemarkandGitHub db2ad850be feat(architecture): deepen codebase analysis (#355)
Add evidence lenses for characteristics, coupling, decomposition, data authority, workflows, health reporting, and eval coverage.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-21 00:09:03 -04:00
Magnus HedemarkandGitHub cc0274f392 feat(api): add landscape governance and topology (#354)
Add portfolio, lifecycle, topology, policy-placement, assessment, and eval guidance while preserving contract ownership boundaries.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-20 23:44:27 -04:00
Magnus HedemarkandGitHub fe9b268db7 feat(migration): add service extraction guidance (#353)
Add evidence-first extraction patterns, assessment templates, modular-monolith retention criteria, and eval coverage.\n\nAI-assisted: Jasper orchestrated implementation and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-20 23:24:06 -04:00
Magnus HedemarkandGitHub 79629625fb docs(data-architect): complete README inventory (#352)
Document scripts and templates and add a concrete Quick Start command.\n\nAI-assisted: Jasper implemented and verified this late-review follow-up.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-20 22:55:37 -04:00
Magnus HedemarkandGitHub f73162d176 feat: add GxP AI governance coverage (#348)
* feat: add GxP AI governance coverage

* fix: complete GxP governance attribution and evaluation coverage

* fix: complete GxP provenance references

* fix: expose GxP routing and complete research provenance

* chore: regenerate marketplace metadata

* chore: regenerate marketplace metadata

* chore: regenerate llms skill catalog
2026-08-20 22:48:41 -04:00
Magnus HedemarkandGitHub 3d8ad446b9 feat(data-architect): add mesh and event product guidance (#350)
Add readiness, governance, recovery, pattern, workshop, and eval coverage for operational data architecture decisions.\n\nAI-assisted: Jasper orchestrated research, implementation, and verification with OpenCode.

Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-20 22:28:08 -04:00
Magnus HedemarkandGitHub 2c98cff6cc feat: enrich site reliability engineering skill from O'Reilly SRE books
Enrich SRE skill with source-grounded adoption, design, dependency, human-systems, documentation guidance, templates, and evals.
2026-08-20 22:07:39 -04:00
Magnus HedemarkandGitHub 639fdf6237 fix: optimize actuarial risk modeling navigation (#333) 2026-08-20 18:57:10 -04:00
Magnus HedemarkandGitHub c990f0531c feat(skill): add actuarial risk modeling methodology (#332)
* feat(skill): add actuarial risk modeling methodology

* fix(skill): refresh generated catalogs
2026-08-20 16:20:48 -04:00
Magnus HedemarkandGitHub ed68466e04 fix: optimize digital-twin through three SkillOpt epochs (#327)
Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-19 15:13:13 -04:00
Magnus HedemarkandGitHub fe71295226 feat: add digital-twin skill (#326)
Signed-off-by: Magnus Hedemark <magnus919@pm.me>
2026-08-19 13:30:25 -04:00
Magnus HedemarkandGitHub b57fe513e8 feat: add dedicated AEO skill
Merge dedicated AEO skill with implementation references, templates, scripts, evals, and SEO routing.
2026-08-18 20:45:14 -04:00
Magnus HedemarkandGitHub dde5fa1020 feat: add data-cleaning skill bundle (#324)
Merge authorized after exact-head validation and paired evaluation checks passed. The follow-up Droid review run on head df31b25 stalled in the model step and ended with an automation error; its actionable findings from the prior review were fixed and independently verified.
2026-08-17 22:00:57 -04:00
Magnus HedemarkandGitHub 44809386a5 feat(ascii-city-engine): deep enrichment — street furniture, signage, dense Raleigh (#322)
* feat(ascii-city-engine): deep enrichment — street furniture, signage, dense Raleigh

Enriches the merged v0.1 skill with a dense, real-data streetscape.

Schema (backward-compatible): props gain optional label + provenance; new
optional signs layer for street-name text; buildings gain name/address/use.
world.schema.json admits signs; all v0.1 packs still validate.

Validator: per-kind prop glyph map with unknown-kind flag; sign validation;
signs included in content-bounds; v0.1 guards (isinstance crash-guard,
O(n^2) DoS caps) intact.

Engine: spatially-indexed prop billboards (signals, trees, crossings, transit
stops, bollards, benches, hydrants) depth-tested at terrain(x,y);
perspective-projected street-name sign text as an overlay pass; road
surface-material and lit ground styling; crosswalk bands; wayfinding HUD
naming the current street and the building faced. Reads spawn + first tile
from manifest.json.

Raleigh sample regenerated dense (same authoritative bbox): 159 buildings
(64 named, addresses, uses), 899 surfaces (86 named, surface/lit/lanes),
298 props across 7 kinds, 29 real street-name signs. 520K, under 2 MB.

Docs + evals: contract/engine-architecture/gis-ingestion/raleigh-poc updated
for the new layers and acceptance checks; 2 new evals (no fabricated signage;
props anchored to terrain).

Verified: validator 1410 PASS / 0 FAIL; broken fixture + AttributeError repro
exit 1; 5000-vertex DoS rejected in 31 ms; node --check OK; HTTP smoke 200
on engine/manifest/tile; validate-skills.rb 154 green; eval-coverage passes;
blocklist clean; headless-Chrome render shows readable in-world 'North
Wilmington Street' sign, signals, crosswalks, and on-street HUD.

AI-assisted contribution (Hermes Agent, spec-driven-development pipeline).

* fix(ascii-city-engine): address droid-review findings on PR #322

1. [P1] facingBuilding(): wrap the heading delta to [-pi,pi] before taking
   abs, so the Facing: HUD stops reporting a behind-the-camera building after
   the player turns past ~180 degrees.
2. [P2] buildIndices(): rasterize surface polyline edges into grid cells so
   long straight road segments register for surface styling and the On:
   HUD street name, instead of only indexing endpoint vertices.
3. [P1] validator: guard the new props kinds comprehension and the props/
   signs loops in all_points() against null, so 'props: null' or 'signs: null'
   produce a structured FAIL instead of an uncaught TypeError traceback.
4. [P3][security] validator: enforce the previously-declared
   MAX_FEATURES_PER_TILE (buildings+surfaces+props+signs) to keep the O(n^2)
   geometry and duplicate-ID paths bounded in aggregate.
5. [P3] engine: paint marked crossings as a distinct ground band (=) instead
   of a floating billboard, matching the documented crosswalk rendering.
6. [P3] eval: align prop-null-terrain expected_output with the render-time
   skip behavior actually implemented.

Verified: dense pack 1411/0 exit 0; broken/crash/dos/null packs all exit 1
with clean FAIL reports (no tracebacks); JS node --check OK; validate-skills
154 green; blocklist clean.

* fix(ascii-city-engine): address droid-review round 2 on PR #322

1. [P1] Engine: skip crossing props in the billboard loop so crosswalks
   render only as the documented ground band (no more floating '=' above
   each of the 168 crossings — a regression from the prior fix).
2. [P3] Engine: nearestStreet() filters to kind==='road' so the HUD 'On:'
   line names the street, not a named plaza/sidewalk ('Market Plaza' etc).
3. [P2] Validator: require each sign's text to be a recorded road name
   (collected from surfaces), enforcing the documented never-invented
   signage contract. A fabricated 'Made Up Avenue' sign now FAILs.
4. [P2][security] Validator: short-circuit the tile loop when
   MAX_FEATURES_PER_TILE is exceeded, and replace O(n^2) duplicate-id
   .count() scans with single-pass Counters, bounding the quadratic paths.

Verified: dense pack 1411/0 exit 0; fabricated-sign repro flags only the
injected sign and exits 1; broken/crash/dos/null packs all exit 1 with no
tracebacks; JS node --check OK; validate-skills 154 green; blocklist clean.

* fix(ascii-city-engine): address droid-review round 3 on PR #322

1. [P2] Validator: emit the signs rule unconditionally so a null/non-list
   'signs' value FAILs instead of passing silently (was gated on a truthy
   list check).
2. [P2] Validator: validate sign text against a pack-wide road-name set
   gathered across all tiles, so a sign in one tile may name a road whose
   surface lives in another (the documented multi-tile case).
3. [P2] Schema: require non-empty id/kind/text (minLength 1) on props and
   signs so the schema and validator agree on empty-string rejection.
4. [P3] Engine: drop dead signGrid/IX.key (the sign overlay iterates
   world.signs directly); cap edge-rasterization steps so a degenerate
   resolution (0) or pathologically long edge cannot spin unboundedly.
5. [P3] Validator: unknown prop kinds now pass with a reported fallback-'?'
   note instead of hard-failing, matching the documented fallback glyph and
   the engine's behavior.

Verified: dense pack 1411/0 exit 0; signs:null FAILs; fabricated sign FAILs;
multi-tile sign-to-road reference PASSes; broken/crash/dos/null all exit 1;
JS node --check OK; validate-skills 154 green; blocklist clean.

* fix(ascii-city-engine): address droid-review round 4 on PR #322

1. [P2] Engine: render props as once-per-frame perspective-projected one-cell
   billboards in an overlay pass (like signs) instead of during the ray march,
   eliminating the multi-row vertical streak a close prop produced. Verified in
   a live browser: signals/trees/crosswalks now render as discrete single cells.
2. [P3][security] Engine: bound aggregate rasterization in buildIndices() —
   cap surfaces (5000) and cells per surface (40000) so a crafted pack cannot
   freeze the tab on load (the validator's caps are not applied client-side).
3. [P2][security] Engine: guard sign text (missing/non-string text now skips
   the sign instead of throwing in the rAF loop and freezing the view).
4. [P3] Validator: still collect building/surface IDs for oversized tiles so
   pack-wide uniqueness detection runs even when the per-feature geometry checks
   are short-circuited (duplicates in an over-cap tile are no longer hidden).

Verified: dense pack 1411/0 exit 0; live browser render shows discrete props
(no streaks); broken/crash/dos/null/nullsign/fabric all exit 1, valid
multi-tile pack exit 0; JS node --check OK; validate-skills 154 green;
blocklist clean.

* fix(ascii-city-engine): address droid-review round 5 on PR #322

1. [P2][security] Engine: guard terrain() against non-finite x/y and guard the
   prop/sign overlay passes against non-array, non-object entries, so a
   malformed pack (missing y, signs=42, null entries) degrades gracefully
   instead of throwing in the rAF loop and freezing the view. Verified in a
   live browser: a pack with signs=42 + a prop missing y renders with the
   frame loop alive and no console errors beyond the favicon 404.
2. [P3] Engine: per-surface 'seen' set now dedupes cells across edges (was
   per-edge), eliminating the repeated linear includes() scan that made the
   rasterizer quadratic in the worst case.
3. [P3] Engine: raise the per-edge step cap to 20000 since the per-surface
   cell cap bounds total work, so long edges are fully sampled at the 2-5 m
   resolutions raleigh-poc.md recommends (fixes road-styling drops).
4. [P3] Validator: lower MAX_FEATURES_PER_TILE to 50,000 (shipped pack is
   1,385), bounding the quadratic pair tests more tightly.
5. [P3] raleigh-poc: correct walkthrough step 3 — East Hargett sign is ~141 m
   behind the spawn, not ahead; only North Wilmington is ahead. HUD count
   guards signs/props as arrays.

Verified: dense pack 1411/0 exit 0; broken/crash/dos/null/nullsign/fabric all
exit 1, valid multi-tile pack exit 0; malformed-pack live render survives;
JS node --check OK; validate-skills 154 green; blocklist clean.

* fix(ascii-city-engine): address droid-review round 6 on PR #322

1. [P1] Engine: props/signs overlay passes now use the corrected perpendicular
   distance (d*cos(ray_angle-heading)) for row projection, distance scaling,
   and the depth test — matching the ray march — so FOV-edge objects project to
   the right row and no longer falsely occlude or poison later depth tests.
2. [P2][security] Engine: terrain() guards malformed terrain metadata (missing
   terrain/resolution, non-positive resolution, missing origin, null elevations),
   so a crafted pack degrades to a clean error instead of freezing the tab.
   Verified live: a resolution-0/null-elevations pack shows 'Cannot load...'
   with no page errors.
3. [P3] raleigh-poc: walkthrough step 3 corrected — W/S only translate, so a
   167-deg-off sign needs A/D rotation, not 'hold S'.
4. [P3][security] Validator: all_points() guards buildings/surfaces/props/signs
   against truthy non-iterables (e.g. props=42), matching the other null guards,
   so malformed packs report structured FAIL instead of an uncaught TypeError.

Verified: dense pack 1411/0 exit 0; crash/dos/null/nullsign/fabric/props42/
broken all exit 1 (no tracebacks); valid multi-tile exit 0; malformed-terrain
live render shows clean error, no freeze; JS node --check OK; validate-skills
154 green; blocklist clean.

* fix(ascii-city-engine): address droid-review round 7 on PR #322

1. [P2] Engine: spatial-index buildings (footprint bbox -> grid cells) so the
   render loop and collision test find nearby buildings in O(nearby) instead of
   scanning the whole O(buildings) list per ray sample. Browser-measured frame
   cost dropped ~62ms (16 FPS) to 12.5ms mean (~80 FPS) on the dense pack.
2. [P2][security] Engine: terrain() guards null/ragged elevation rows, so a
   pack with a null row degrades to a clean error instead of freezing the tab
   (live-verified: null-row pack shows 'Cannot load...', no page errors).
3. [P2][security] Engine: cap sign text at 80 chars in the overlay pass, so a
   pathological pack-supplied sign cannot drive an unbounded per-frame loop.
4. [P3] Validator: reference FALLBACK_GLYPH constant (was dead) in the
   unknown-kinds report message.
5. [P3] raleigh-poc: fix stale expected validator tail (was 30/25; actual is
   159/899, rules_passed=1411).

Verified: dense pack 1411/0 exit 0; crash/dos/null/nullsign/fabric/props42/
broken all exit 1, valid multi-tile exit 0; null-row pack shows clean error,
no freeze; ~80 FPS browser-measured on dense pack; JS node --check OK;
validate-skills 154 green; blocklist clean.

* fix(ascii-city-engine): address droid-review round 8 on PR #322

1. [P1][security] Engine: bound the building spatial-index rasterization with
   MAX_BUILDING_PTS (2000) and MAX_BUILDING_CELLS (40000) and require >=3 finite
   footprint points, so a ~100-byte crafted footprint cannot drive a ~1e10-
   iteration synchronous hang on load (the surface rasterizer's cap, applied
   to the building index I added in round 7).
2. [P2][security] Engine: facingBuilding() filters footprints to finite points
   before reducing, so a building with a null element in its footprint no
   longer throws in the rAF loop on frame 1.
3. [P2][security] Engine: collides() and pointNearPolyline() filter footprints/
   polylines to valid array points before edge tests, so null footprint points
   no longer throw once the player enters those cells.
4. [P3] Validator: correct the feature-cap comment to 'buildings + surfaces +
   props + signs combined' (signs were already counted).

Verified: dense pack 1411/0 exit 0; ~85 FPS browser-measured (perf fix intact);
badfoot pack (null-point + missing-footprint buildings) renders with zero page
errors and frame loop alive; crash/dos/null/nullsign/fabric/props42/broken all
exit 1, valid multi-tile exit 0; JS node --check OK; validate-skills 154 green;
blocklist clean.
2026-08-16 05:51:25 -04:00
Magnus HedemarkandGitHub b6a96eb22e feat: add ascii-city-engine skill (#321)
* feat: add ascii-city-engine skill

New skill teaching portable first-person colored-ASCII city engines and
small GIS-derived city packs:

- references/engine-architecture.md: terrain height function, ground-
  attached pedestrian physics (feet_z=terrain(x,y), step/slope limits,
  building-footprint collision with wall sliding), fisheye-corrected
  raycast-to-ASCII pipeline, glyph density ladder, deterministic color.
- references/city-provider-contract.md: manifest + world-tile semantics,
  single-height-per-column v1 limit, reserved surface-graph extension.
- references/gis-ingestion.md: USGS 3DEP/OSM/municipal source classes,
  meter-CRS reprojection, unit checks, 3.2 m/floor height fallback,
  provenance/confidence recording.
- references/raleigh-poc.md: numeric downtown bbox, named sources with
  URLs, acquire/convert/validate commands, 4 human acceptance checks.
- templates/: city-pack-manifest + world JSON Schemas.
- scripts/validate-city-pack.py: pure-stdlib offline validator (78 rules).
- assets/raleigh-downtown-sample/: committed coarse pack (30 real OSM
  buildings, 25 road/path surfaces, 78x64 10 m terrain) <= 64K.
- assets/ascii-city-engine.html: dependency-free Canvas 2D engine.
- evals/evals.json: 6 schema-valid cases incl. runtime-specificity and
  large-GIS-commit refusal boundaries.
- README.md catalog entry.

AI-assisted contribution (Hermes Agent, spec-driven-development pipeline).

* chore: regenerate claude marketplace for ascii-city-engine

* chore: regenerate codex plugin and llms.txt for ascii-city-engine

* fix(ascii-city-engine): address droid-review findings on PR #321

1. [P2] Engine scaffold now reads manifest.json for spawn + first tile
   instead of hardcoding (315,385) — restores pack interchangeability.
2. [P2] Validator all_points() guards isinstance(dict) so structurally
   invalid tiles report FAIL instead of crashing with AttributeError.
3. [P2] raleigh-poc acceptance walk: correct duration/elevation math
   (~25s/~100m to ~100.9m at (315,505); ~95s to north edge ~103.0m).
4. [P3] known-limitations: match committed data — 5/30 explicit OSM
   height (0.88), 25 floor-estimated (0.72), not ~26%/0.55/0.35.
5. [P3] bbox: document tangent-plane 632x779m vs normalized 630x770m
   working extent instead of asserting 630x770 as the conversion result.
6. [P3][security] cap polygon vertices (2000), elevation cells (4M),
   feature count to prevent O(n^2) CPU-exhaustion on crafted packs.

Verified: sample pack 79/79 PASS exit 0; broken fixture exit 1; droid
AttributeError repro now FAILs cleanly; 5000-vertex footprint rejected
in 58ms; node --check OK; validate-skills.rb 154 green; blocklist clean.
2026-08-15 21:13:11 -04:00
Magnus HedemarkandGitHub cc2752111b Merge pull request #320 from magnus919/ci/run-epub-tests
ci(validate): run epub skill tests with their dependencies
2026-08-14 23:53:47 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 84edaf7a0b fix(ci): keep epub test edit out to respect eval-coverage ratchet
Revert the epub/scripts/test_epub_skill.sh edit from 0dc4b6c so the epub
skill is not "modified" for the eval-coverage ratchet (epub has no
schema-valid eval manifest). The pinned-dependency wiring stays: the epub
suite still runs its 45 assertions in CI, with epub-edit/epub-convert
skipped on the Python 3.12 runner because epublib requires Python 3.13+.
The registry comment now documents that skip instead of claiming the suite
surfaces it.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 23:49:08 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 0dc4b6c5dc fix(ci): pin epub test deps and surface epublib skip
Pin the epub skill's test-only dependencies (EbookLib, beautifulsoup4) with
exact versions in requirements-epub-test.txt and install from that file in
CI, instead of unpinned package names. The file is test-only and notes that
EbookLib is AGPL; requirements-dev.txt is untouched.

Also surface the epublib skip in epub/scripts/test_epub_skill.sh: when
epublib is not importable (it requires Python 3.13+), epub-edit and
epub-convert now print an explicit SKIPPED line and count as SKIP in the
summary instead of silently passing.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 23:42:25 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> b24f8a8d98 ci(validate): run epub skill tests with their dependencies
Install the epub skill's documented test dependencies (EbookLib and
beautifulsoup4) on the runner just before the shell-test step, and move
epub/scripts/test_epub_skill.sh from the manual registry into the run
registry. EbookLib is AGPL-licensed, so the install step is named and
scoped as test-only and does not touch requirements-dev.txt.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 23:22:29 -04:00
Magnus HedemarkandGitHub 6c2a54846e Merge pull request #319 from magnus919/ci/skill-test-coverage-guardrails
ci: run skill shell tests and add coverage guardrail
2026-08-14 23:19:11 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 4255d4429f fix(ci): align skill test discovery with coverage guardrail
Discover skill-local test dirs from git ls-files so nested bundle sub-skill
scripts/ dirs are covered, and force python_files=test_*.py so pytest
collection matches the guardrail's covered model everywhere (skills with a
local pytest.ini would otherwise fall back to the default collection).
Also soften the docs' guardrail claims to describe the enforced naming
convention precisely instead of overclaiming.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 23:15:21 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 98eb5e4c4d docs: document skill test convention
Explain the skill script test contract in CONTRIBUTING.md and AGENTS.md:
Python tests must be named scripts/test_*.py so pytest auto-discovers them in
CI; shell tests are exceptional and must be registered in
scripts/check-skill-tests.py; check-skill-tests.py --check fails CI on any
unregistered skill test file.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 22:41:56 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 837a329531 ci(validate): run skill shell tests and add coverage guardrail
Add scripts/check-skill-tests.py as the single source of truth for
skill-local shell tests. --run executes the registered shell tests in CI;
--check (default) fails on any unregistered skill test file, stale registry
entry, or registry inconsistency, so new un-run shell tests cannot slip in.
Register the 9 deterministic shell suites as run entries and the 4 suites
that need network, credentials, or third-party libraries not installed by
CI as manual entries.

Wire both modes into validate.yml right after the skill-local pytest step
and run the new guardrail tests in the existing pytest invocations.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 22:41:53 -04:00
Magnus HedemarkandGitHub 222f431f02 Merge pull request #318 from magnus919/fix/ci-run-skill-script-tests
ci(validate): run skill-local script tests in CI
2026-08-14 22:22:45 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> b1d863ee00 ci(validate): recurse when discovering skill test files
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 22:18:37 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 156a01ede2 ci(validate): run skill-local script tests in CI
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 22:03:55 -04:00
Magnus HedemarkandGitHub 38f2ddad84 Merge pull request #317 from magnus919/feature/ai-governance
Add ai-governance methodology skill
2026-08-14 21:31:42 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> bb2578790f fix(ai-governance): reconcile AI Act timeline, exit-code contract, and UK institute naming
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 21:28:12 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 888872cdfd fix(ai-governance): rephrase passages to clear the 8-word n-gram copyright gate
Reword reference and template sentences in ai-governance that shared
8-word contiguous runs with the mission research notes and source books,
so the VAL-IP-001 n-gram check reports zero overlaps.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 21:00:09 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 96721d647f feat(ai-governance): assemble SKILL.md router, README, evals, and repo integration
Add the trigger/router SKILL.md (description, you-own/don't-own table, router
tables accounting for every bundled file, When-not-to-use, neighbor routing), the
human-facing README, the schema-valid evals manifest with six output-quality cases,
the root README catalog entry, the skill-triggers row, and regenerated llms.txt plus
the three marketplace/plugin artifacts.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 20:47:04 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> fffc38ed81 fix(ai-governance): make reference cross-links resolve for the router gate
References cited templates and research notes as backtick .md tokens that do
not resolve inside the repository, which the stale-reference scanner flags once
the skill ships SKILL.md. Convert template citations to resolvable markdown
links and de-backtick research-note citations (they live in the mission library).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 20:46:49 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> e750ffce06 feat(ai-governance): add use-case risk-tier classifier script
Add use-case-risk-tier.py, a stdlib-only CLI that classifies an AI use case
(data sensitivity, autonomy, exposure, decision impact) into a low/medium/high
governance tier and the controls that tier requires, with --json and --dry-run.
Ship test_use_case_risk_tier.py covering scoring, tier forcing, validation,
CLI exit codes, graceful failure, and deterministic/dry-run behavior.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 20:28:16 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 3060606a8a feat(ai-governance): add governance-maturity self-assessment scorer
Add the stdlib-only governance-maturity CLI (reads a JSON answers file of
governance dimensions scored 1-5, computes a maturity level and gap list,
supports --json and --dry-run, exits 0 on healthy input and 1 on critical
all-minimum gaps) with a pytest suite, plus a skill pytest.ini that overrides
the repo-wide coverage addopts for subprocess-based skill tests.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 20:24:31 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 912dad635b feat(ai-governance): add third-party due diligence and board report templates
Add fillable third-party-due-diligence.md and board-ai-governance-report.md
templates implementing the procurement, third-party, and board oversight
reference, each with purpose, guided fields, sections, and completion notes.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 20:20:32 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 3a870a1e92 feat(ai-governance): add model risk assessment and model card templates
Add NIST-aligned model-risk-assessment.md tiering worksheet and model-card.md
documentation template, each with title, purpose, guided fields, and a
completion section. Governing references already mention both slugs.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 20:19:11 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 452c061a7e feat(ai-governance): add governance charter and use-case intake templates
Add fillable governance-charter.md (council terms of reference) and
use-case-intake-form.md (intake/registry entry with risk classification)
templates, each with an H1 title, purpose statement, guided fields with
placeholders, and completion instructions, aligned with the operating-model
and risk/lifecycle references.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 20:17:30 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 8520ce1b77 feat(ai-governance): add reference source-index for provenance
Consolidate the synthesized-from footers of the 10 domain references into a
source-index.md that names all 11 reference files, maps each to its book short
names and research notes, lists the full 12-book bibliography, and states the
paraphrase/synthesis idea-level attribution invariant.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 20:15:43 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 315fe937c8 feat(ai-governance): add procurement, third-party, and board oversight reference
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 20:13:48 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 485c28e845 feat(ai-governance): add regulatory-landscape reference
Synthesizes the mission research note on the current AI regulatory
landscape (EU AI Act, GDPR, US federal/state, UK, China, sectoral rules,
enforcement, horizon scanning) into a dense jurisdiction-by-jurisdiction
reference. Book regulatory chapters are treated as historical context.
Flags the US federal/state position and the EU AI Act high-risk timing as
in-flux and to be verified at use time.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 20:08:38 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> f8b547594e feat(ai-governance): add llm-and-agent-security reference
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 20:03:03 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 9b63dc44b8 feat(ai-governance): add privacy-and-data-governance reference
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 19:57:59 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> ad6b87a462 feat(ai-governance): add transparency-explainability reference
Author dense reference on transparency and explainability (XAI methods,
explainability requirements, disclosure, human-AI interaction,
auditability) synthesized from Responsible AI in the Enterprise, Platform
and Model Design for Responsible AI, and Introduction to Responsible AI.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 19:54:41 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 37c0b00760 feat(ai-governance): add fairness-bias-accountability reference
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 19:51:38 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> a78adef385 feat(ai-governance): add ai-lifecycle-governance reference
Synthesizes stage gates, model inventory, lineage, drift detection, and
incident response across the AI lifecycle from the Platform and Model
Design, Designing Data Governance, and Data Governance Handbook sources
plus the technical-controls research note.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 19:48:03 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 777c0656d3 feat(ai-governance): add risk-management-and-frameworks reference
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 19:41:41 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 0d7c806e45 feat(ai-governance): add governance-operating-model reference
Teach the AI governance operating model: the six-step model, council and
steward roles, decision rights and RACI, federated vs centralized
structures, maturity, and culture. Synthesized from Designing Data
Governance from the Ground Up, the Data Governance Handbook, and the
org/board governance research note; original prose, no verbatim book
text.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 19:38:16 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 1e9aea7810 feat(ai-governance): add foundations-and-principles reference
Author the first ai-governance reference: what AI governance is, the six
core principles (fairness, accountability, transparency, privacy, safety,
human oversight), and the governance vs compliance vs risk distinction,
synthesized from the four primary books and current research.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 19:35:22 -04:00
Magnus HedemarkandGitHub 413bcb9c27 Merge pull request #316 from magnus919/flatten-bundles-directory
feat(flatten): flatten bundles/ directory into repo root
2026-08-14 17:51:10 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 1ff9f72e70 Merge remote-tracking branch 'origin/main' into flatten-bundles-directory
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 17:47:45 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> ed3d09fabd fix(test): correct duplicate-catalog name fixtures for case-sensitive fs
test_rejects_duplicate_catalog_names failed on case-sensitive CI
filesystems (Ubuntu ext4): the flat-layout fixture wrote both duplicate/
and Duplicate/ with frontmatter name: duplicate, so Duplicate/SKILL.md
tripped the name-match guard ('name must match directory name
"Duplicate"') before the duplicate-catalog check ran, hiding the
expected 'duplicate catalog name "duplicate"' error. Local macOS APFS
collapsed the two dirs and passed, concealing the defect.

Detect filesystem case-sensitivity with a Probe/probe probe. On
case-sensitive filesystems write duplicate/ (name: duplicate) and
Duplicate/ (name: Duplicate) so both pass the name-match guard and the
downcased-name collision fires the duplicate-catalog error. On
case-insensitive filesystems the dirs collapse into one, so write the
single dir with name: duplicate and assert the generator succeeds.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 17:44:11 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 409826a81f fix(docs): correct depth-parity comment in example bundle manifest
The comment claimed docs/examples/ sat at "the same depth as a real
<name>/manifest.yaml". Under the flat layout a real manifest sits one
level below the repo root (resolving repo-root paths with ../), while
this example lives two levels below root (../../). Reword the comment
to describe the actual relationship without changing any path values,
field names, or schema content.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 17:05:47 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> cbe27723cf fix(evals): drop bundles/ fixture path from eval-coverage test
Rename the nested-skill fixture paths in test_nested_change_maps_to_nearest_skill_owner
from bundles/example to example so no tracked file (other than the OKF upstream
sample file) references the removed bundles/ directory, satisfying the final
repo-wide sweep (VAL-REF-017).

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 16:55:35 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> b7aa174b84 fix(evals): re-point lifecycle corpus tooling at flat layout
Update the three hardcoded bundle manifest paths in run-corpus.sh and
validate-corpus-coverage.py from bundles/<name>/evals/evals.json to
<name>/evals/evals.json, refresh the coverage-index.json via --write-index,
and update the corpus prose (README, coverage-matrix, sources,
discovery-brief) to drop the bundles/ prefix.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 16:54:34 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 3480b7ff5a fix(prose): refresh top-level skill path references for flat layout
Re-point promise-theory reference links to ../../workflow-architect/SKILL.md
(one level deeper than SKILL.md), drop the bundles/ prefix from the
pace-plan evidence-ledger path, and refresh the stale eval-coverage.py
comment to describe only the flat <root>/<skill-name>/SKILL.md shape.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 16:50:06 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 65fcae6cda docs(flatten): update repo docs for the flat layout
Rewrite README.md Installation prose and references/skill-triggers.md to
drop the bundles/ depth and --full-depth guidance, relabel the architecture
diagram bundle node, and correct bundle-manifest-design.md to place manifests
at <skill>/manifest.yaml with the 8-umbrella count. Fix the example manifest
and schema descriptions, plus the production-excellence AGENTS.md depth note.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 16:48:49 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 0096aca50b feat(evals): add eval manifests for the 10 sub-skills
Author schema-valid evals/evals.json manifests (>=5 cases each) for the
tailscale sub-skills headscale-backup, headscale-deploy, headscale-derp,
headscale-node-lifecycle, headscale-routing, tailnet-policy, tailscale-client
and the workflow-architect sub-skills bundle-builder, interviewer, observer,
raising schema-valid coverage from 96/152 (63.2%) to 106/152 (69.7%). Remove
all 14 bundles/ entries from scripts/grandfathered-skills.txt now that the
8 umbrellas and 10 sub-skills all carry valid eval manifests.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 16:23:11 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 0a7c6b9a1f fix(skills): rework moved-skill descriptions to pass quality gate
Rework the description frontmatter of 4 moved skills (tailscale, and
workflow-architect sub-skills bundle-builder, interviewer, observer) so each
starts with a recognized imperative verb, and add "## When not to use" body
sections to all 13 moved skills surfaced by the flatten move (research-and-vault,
tailscale + its 7 sub-skills, workflow-architect + its 3 sub-skills) so every
one defines a negative boundary. Trigger vocabulary is preserved and every
description stays under 1024 chars. Regenerate llms.txt and
.claude-plugin/marketplace.json, which embed the tailscale description.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 16:13:32 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> df713361c4 fix(flatten): point catalog validation and links at flat layout
Update validate-skills.rb expected_catalog_paths to the flat */SKILL.md
glob (drop the bundles/ term), repoint the 8 README catalog headings to
<name>/SKILL.md, and fix the promise-theory and semantic-spacetime
workflow-architect links to ../workflow-architect/SKILL.md.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 16:07:01 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> a315b77bd8 feat(flatten): rewrite moved-file paths for flat layout
Re-point relative references inside the six non-tailscale/workflow-architect
bundle dirs now that they live one level shallower at the repo root:
- bundle-root SKILL.md/manifest.yaml/README.md: ../../<target> -> ../<target>,
  cross-bundle ../../bundles/<x> -> ../<x>
- forward-deployed-engineering references/: ../../../<target> -> ../../<target>
- product-lifecycle references cross-bundle ../../bundles/neckbeard -> ../../neckbeard
- product-lifecycle references/discovery-brief.md prose headings drop bundles/ prefix
- neckbeard eval shell commands bundles/neckbeard/eval -> neckbeard/eval
- production-excellence AGENTS.md depth note updated
- manifest header comments point at ../schemas/bundle-manifest-v1.schema.json
- regenerate docs/lifecycle-capability-matrix.{md,json}

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 15:59:56 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 42447b23eb feat(flatten): repoint lifecycle capability matrix tooling to flat layout
Update gen-lifecycle-matrix.rb and validate-lifecycle-matrix.rb to drop all
hardcoded bundles/ path references after the directory flatten:

- CANONICAL_BUNDLES now selects canonical bundles via */manifest.yaml (the
  8 bundle dirs) instead of */SKILL.md (which would match every top-level
  skill); keeps the 8-bundle invariant required by the validation contract.
- source strings, manifest paths, fallback frontmatter, and base dirs use
  <name>/... at the repo root; the top-level JSON key stays "bundles".
- validate-lifecycle-matrix.rb re-anchors NESTED_HELPER_PATTERN to
  %r{(?:^|/)skills/} so nested helpers (tailscale/skills/*,
  workflow-architect/skills/*) are still detected in the catalogs, and
  canonical_bundles matches the generator's */manifest.yaml glob.
- align the two matrix tests in test-validate-bundles.rb: canonical bundles
  are manifest-having dirs (a manifest-less top-level skill is not a row),
  and the missing-row rejection targets the demo manifest bundle.
- regenerate docs/lifecycle-capability-matrix.{md,json}.

gen check mode: "is current (8 bundles)"; validate:
"Validated lifecycle capability matrix (8 bundle(s)): complete, traceable, and current."
test-validate-bundles.rb: 14 runs, 307 assertions, 0 failures.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 15:53:43 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> 7b6f26f077 feat(flatten): repoint catalog generators to flat skill glob
Drop the Dir.glob("#{ROOT}/bundles/*/SKILL.md") term from gen-llms-txt.rb,
gen-claude-marketplace.rb, and gen-codex-plugin.rb (the first glob */SKILL.md
now covers the 8 former bundle umbrellas) and refresh the header comments.
Regenerate llms.txt and .codex-plugin/plugin.json (./bundles/<name> ->
./<name>); .claude-plugin/marketplace.json is byte-identical. Update
test-gen-llms-txt.rb fixtures from bundles/zulu etc. to top-level zulu/ with
assertions [zulu](zulu/SKILL.md), and make the duplicate-guard test robust to
case-insensitive filesystems where case-variant dir names collapse.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 15:47:05 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> b623635f54 feat(flatten): repoint validate-bundles glob and rebuild manifest test fixtures
Change bundle-manifest discovery from bundles/*/manifest.yaml to */manifest.yaml
and rebuild the tmpdir fixtures in test-validate-bundles.rb at the tmpdir root
so manifests live at <skill>/manifest.yaml and path fields use the flattened
relative depth. Refresh the validator's header comment.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 15:29:59 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com> c0c7690724 feat(flatten): move bundle dirs to repo root
Move the 8 directories under bundles/ to the repo root via git mv and
remove the now-empty bundles/ directory. Replace the "bundles" entry in
pyproject.toml [tool.deptry] extend_exclude with the 8 moved dir names so
the moved trees stay excluded from Python dependency analysis.

Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-14 15:26:27 -04:00
Magnus HedemarkandGitHub ec44df752e Merge pull request #283 from magnus919/dependabot/pip/mypy-gte-2.3.0
chore(deps-dev): update mypy requirement from >=1.0 to >=2.3.0
2026-08-13 22:32:57 -04:00
Magnus HedemarkandGitHub a579e62f7e Merge branch 'main' into dependabot/pip/mypy-gte-2.3.0 2026-08-13 22:12:56 -04:00
Magnus HedemarkandGitHub 5ccd4b1f3d Merge pull request #282 from magnus919/dependabot/pip/loguru-gte-0.7.3
chore(deps-dev): update loguru requirement from >=0.7 to >=0.7.3
2026-08-13 22:12:41 -04:00
Magnus HedemarkandGitHub fda6415920 Merge branch 'main' into dependabot/pip/loguru-gte-0.7.3 2026-08-13 22:10:15 -04:00