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>
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>
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>
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>
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>
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>
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>
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.
* 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.
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
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>
Add the M4 integration cross-links: a single reverse link in
promise-theory/references/foundations.md section 3.12 pointing to the
semantic-spacetime skill (the only promise-theory change), and one
FAILURE-MODE-INDEX.md row for semantic drift / meaning disagreement
following the file's concrete-trigger + real-skill-path rule. Refresh
stale milestone forward-references in semantic-spacetime/references/
foundations.md now that the M2 references and M3 tooling exist. Full
validate.yml-equivalent suite passes locally: 152 canonical skills, 96
eval manifests schema-valid, eval-coverage ratchet green (63.2%),
check-artifacts + jscpd + ruff/mypy/radon/deptry/bandit green, and the
fake-adapter eval smoke runs 6 trials with 0 failures.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-13 00:34:13 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
model lint now rejects anything outside the sst-model-v1 schema with exit 1
and a named violation: unknown top-level sections (e.g. 'regions:') and
unknown fields inside agents/promises/nodes/edges/acceptances/trajectories/
observations (e.g. 'bogus-field: 42' in a node). Violations name the unknown
key and its location, flow through the --json errors list, and never produce
a traceback. The template's RULES block documents the strictness, the
restricted-YAML subset boundary (anchors/aliases, block scalars, and
multi-document streams rejected exit 1; JSON accepted as an equivalent
representation), and the trajectory node-id reference rule (no edge-
connectivity check in v1). Adds a git-tracked malformed fixture
(tests/fixtures/invalid-model.yaml) and unit tests pinning both rejection
directions, plus unknown-field coverage in agent and edge entries.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-13 00:20:07 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Add scripts/semantic-spacetime.py, a stdlib-only Python 3.10+ CLI for
sst-model-v1 models: model lint (schema validation with coverage summary),
model map (gamma(3,4) text/mermaid/json rendering), model distance (weighted
hop distance, weight |link| + 1 per hop), model trajectory (simple-path
enumeration with cycle notes), and model drift (snapshot diff). Pins the
promise-contract.py conventions: exit codes 0/1/2, --json single-object
purity on dispatched paths, --dry-run no-op guard, never a traceback, module
import with no side effects.
Add the stdlib unittest suite (50 black-box subprocess cases), trigger
probes with the committed Load By Need routing and anti-trigger refusal
tables, and the tracked sample-model fixture materialized from the template's
delimited example. Update SKILL.md and README Quick Start to the real
--help command surface.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-12 23:49:54 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Add the four application references completing the knowledge bundle:
applications-infrastructure.md (CFEngine mechanism set, convergence
semantics, descendant ecosystem, promise-keeping-as-data gap, SLOs,
record-of-time machinery, citable lessons), agent-coordination.md
(Burgess agent papers, SSTorytime/MCP-SST, drift and temporal-blindness
literature, MCP/A2A substrate, five [EXTRAPOLATION] synthesis patterns),
patterns.md (ten named patterns with when-to-use and anti-patterns), and
diagnosis-and-debugging.md (bounded three-pass procedure). Every claim is
provenance-marked; promise-theory content is linked, not restated.
SKILL.md Load By Need grows to 7 rows; gotchas 4/5 are grounded in
applications-infrastructure.md per VAL-ROUTE-019; README What You Get
lists the new references.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-12 23:09:26 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Add the semantic-spacetime skill skeleton: a thin SKILL.md router with
triggers/anti-triggers, Load By Need, Quick Start, Related Skills, gotchas,
and exit conditions; a human-facing README; MIT license; deep
provenance-marked theory references (foundations, glossary, bibliography);
the versioned sst-model-v1 template pair; a 6-case schema-v1 eval manifest;
the root README catalog entry; regenerated marketplace and llms artifacts;
and the skill-triggers row.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Adds references/vetting-third-party-skills.md with a dependency-style
vetting checklist (provenance, SKILL.md body, scripts, references),
safe first-run practice, and reporting guidance, citing the Snyk
ToxicSkills audit as the primary source for ecosystem risk statistics.
SKILL.md gains the match-prescriptiveness-to-fragility decision rule,
the run-vs-reference intent rule for bundled scripts, and an
Adopting Third-Party Skills section. README and eval manifest updated.
Closes#311
Quick Start now documents the --json and --dry-run flags with their
exact semantics (single JSON object on stdout; read-only no-write
guard) and points to `python3 scripts/promise-contract.py --help` for
the full flag list, so a no-prior-knowledge user can drive the CLI
end-to-end (VAL-USE-013). No other content changes.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-12 00:12:47 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Add the promise-theory skill to the repository catalog: root README entry,
regenerated llms.txt and marketplace/plugin packaging, and a
references/skill-triggers.md row.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-11 23:41:52 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Add promise-contract.py, a stdlib-only Python 3.10+ CLI that lints
promise-manifest v1 contracts (restricted-YAML or JSON) against the pinned
schema and renders a promise-graph summary. lint exits 0 on valid + full
coverage, 1 on lint errors/coverage gaps (accumulated, no fail-fast), and 2
on usage/IO errors; --json preserves the {valid, errors, warnings, coverage,
bindings} shape even on parse errors; --dry-run is a no-op guard. Robustness
handles empty/whitespace files, non-UTF-8 bytes, CRLF/BOM, JSON type errors,
and deep nesting without Python tracebacks.
Add tests/test_promise_contract.py covering valid contracts (YAML + JSON),
coverage gaps, schema violations, malformed input, --json, --dry-run, render,
and the robustness cases (empty, dup ids, bindings, enums, expires, encoding,
usage errors). 36 tests pass via unittest discover.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-11 23:32:21 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Add the three fillable templates (promise manifest YAML, agent contract,
promise review) and the human-facing README with the five required
sections. The manifest template is a lint-clean, fully covered example of
the pinned v1 schema with per-field comments; all intra-template id
references (accepts, expectations.about) resolve cross-agent. The contract
template carries the seven mandated sections with schema-aligned severity
and type vocabulary; the review template carries the five retrospective
sections with the three diagnosis categories.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Complete the seven-reference set for promise-theory. diagnosis-and-debugging.md
maps the Cemri et al. multi-agent failure taxonomy onto promise-theory breach
categories (specification issues ↔ broken promise bodies; inter-agent conflicts
↔ failed acceptance/incompatible co-languages; task verification problems ↔
missing assessment), adds withdrawal failure as a fourth promise-theoretic
class, documents a four-step diagnostic procedure (walk the promise graph →
check bindings → check evaluation loop → check withdrawal semantics) with a
worked example, and states the theory's limitations and open problems (no
coordination-quality benchmark, guarantees don't compose across handoffs, LLM
promises lack causal teeth, stochasticity, ambiguity. glossary.md defines all
27 architecture §4.2 terms as heading-/bold-led entries with citations plus a
related-terms section. Both files stay under 60k chars, resolve all backtick
*.md references and markdown links, and carry consistent EXTRAPOLATION /
[UNVERIFIED] provenance markers.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
EOF
)
2026-08-11 23:19:09 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
Adds the three coordination references per architecture 4.2/6/7:
- agent-coordination.md: the core thesis with the fixed 11-concept mapping
table (concept -> concrete agent-coordination practice), the hybrid
human+agent boundary (humans as acceptors/evaluators, calibrated
subordination, causal vs moral responsibility, HITL escalation,
three-languages problem, swarms vs teams), the multi-agent lineage, and
the agent-council routing statement; cites Burgess arXiv:2604.10505 and
states the scarcity of direct literature.
- patterns.md: all seven canonical patterns with worked examples, the M12
ladder, the Ye & Tan contract tuple and lifecycle with degradation
semantics, the named ESCALATE-2 trigger, and the workflow-architect
routing via the bundles path.
- trust-and-verification.md: the two-component trust model, belief/evidence,
P_succ, verification rates as attention budgets incl. Dunbar budgets,
gameable assessment, semantic-promise measurement guidance, "confine,
don't convince", the versioned promise ledger, and routing to
agent-evals-and-observability and artifact-pyramids.
All files under the 60k-char reference cap with [UNVERIFIED]/EXTRAPOLATION
provenance markers per architecture 4.2.
Co-authored-by: factory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>
2026-08-11 23:12:37 -04:00
Magnus Hedemarkandfactory-droid[bot] <138933559+factory-droid[bot]@users.noreply.github.com>