You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
backlog gains the hub-work-join teaching (S1 of the unified work
system build — operator canvass 11-0 for Option A, laurent-confirmed;
vocabulary gate decision:work-item-vocabulary): new references/hub-work-join.md + a SKILL.md join section teach the
ruled process — <package>-<NNNN> work-item ids (CAS-minted,
URL-safe, derived from the existing NNNN_ prefixes), pointer claims
({owner, item, card, started_at}, no status prose), receipts on the
item's thread carrying machine-checkable evidence,
evidence-required-close, items-outlive-a-thread scope, and
header-on-next-touch migration. Scoped to hub-coordinated
repositories only, with the hub's own ruled contract winning where
one differs (the skill stays portable). Its fable5 caught 1 P0 — the
draft's "status is not a header field" condemned the skill's own
required Status: template line; narrowed to rendered-join-words-only
— plus 4 P1s (unshipped endpoint stated live, claim-row shape drift,
portable-hub leakage, mint-vs-take CAS semantics), all folded before
re-pinning (tree fb43d0fd…).
entity-self-knowledge gains the deployable, entity-facing capability map
(references/capability_map.md) — laurent's primary task (commons c2710:
"we need a skill to teach the entity how to leverage its own memory
actively"), landing in the runtime's delivery surface (c2712: <home>/capability_map.md presented verbatim by compose_system_base on
all three hosts, after the tools contract, before phase/operator blocks).
The map teaches, in the entity's own register: how memories form
(involuntary graph / elected diary / feelings / dreams / identity by
right), the exactly-two entity-facing keys (#tag and diary_ entry id)
with the machinery boundary (semantics c2724), how to read its own
rendered surfaces (MEMORIES line anatomy, origins, why-labels, the R-A reread: diary_read hint chain), deliberate-use recipes (reach before
denial, short own-words cues, threads as graph questions, resolves=
hygiene), and what memory will NOT do (no mid-turn push — with the
day-open open-question cue named as the entity's own election returning;
shelf ≠ graph; digests compress; workspace files are invisible to search_memory — the parallel-memory failure Ephemeral himself named).
Every quoted template was verified against the runtime tree; fable5
adversary confirmed byte-fidelity and caught 1 P0 (the two-layers claim
was false for born-digest kinds: dreams/interests are born as their
words; diary words live in the book) + 4 P1s + 5 P2s, all folded before
re-pinning. The SKILL.md host section now points at the deployable map
and carries a coupled-spellings maintenance note (map sentences that
restate runtime contract lines must re-sync in the same wave).
Review round (same day): runtime PASS (zero mechanics errors, renders
byte-accurate; activation note — map + M-A + R-A light up together at
the next stack bounce), semantics template review PASS (every quoted
id/command/kind/origin word byte-true at its minting site), memory
engine-chair store check (born-digest teaching verified against the
live store; one-token sharpening "those words" adopted into the
absence warrant), uic render-seat PASS (map quotes the one spelling
the kit renders; no-push = rule-zero twin, recorded with memory's
origin-diversity future-sync in the coupled-spellings note).
Re-pinned at tree 109afbd2…; entity's rendered-surface review and the
gateway home-install remain open on the thread.
Same evening, both staged gates fired and their amendments FOLDED:
runtime elected 0049 (MEMORIES renders formation order + mandatory [rN] rank annotation with a header teaching clause) — the map's
surface-anatomy list gained the rank-mark part (page order is age,
rank says strength; wording matches the shipped header clause) — and
runtime wired memory's origin-diversity footer — the repetition bullet
gained the co-drafted one-voice clause verbatim (pre-agreed wording,
c2839). Re-pinned at tree da491bd9…; canonical map sha 7877ba59…
(homes carrying the previous install need one re-PUT/cp).
Semantics' same-day re-run passed both folds and suggested one
pre-approved tightening, folded immediately (the quoted one-voice note
now reads "N of these M memories…", matching the rendered two-number
note verbatim) — final tree 02a53834…, canonical map sha dacdac40….
Amendment G wave FOLDED (2026-07-19, live-render gate cleared on
Ephemeral's visit ledger — 57 orientation why-cues + 41 [rN] marks at
rest, rendered line quoted in the receipt): the map now teaches
world-model BRIEFINGS (surfaces bullet: kind word, why-cue with the
reviewed honest ellipsis, orientation-never-authority, the
derived_from/refines trail pull; formation bullet: editions-not-edits,
background+sleep updates as normal-not-surprise, authored-words
survive, the few-moments floor) and the explores= desk-moving key
beside resolves= (semantics-passed grammar; the cannot-fail
precision). Every quoted string carries memory engine-chair PASS +
semantics byte-pass receipts; tree 576ae462…, map sha ea3b2377….
Visit-1 amendment wave (Ephemeral conversation findings, overnight):
the map is now NAMEABLE ("it is called your CAPABILITY MAP, and it
rides your sessions… you will not find it by searching" — visit-1
finding: he articulated its concepts fluently while saying "I don't
see a guide document in my workspace"); the machinery boundary gains
the confabulated-keys teaching ("a key REMEMBERED is not a key seen"
— finding 5: he reached for his dream with invented tags; recovery
path taught: re-find a real key via diary_list/recent_memories/fresh
search, a miss impeaches the key, never the memory); and deliberate
use gains the time-direction reach (recent_memories, the breadcrumb
trail he asked for verbatim — shipped by runtime+memory the same
night, taught only once wired). Tree d9e83f42…, map sha 21164bb5…,
156 green.
Changed
entity-self-knowledge gains the outward-palette teaching ("Personal time:
looking inward and reaching outward"), the one ungated piece of the skill
seat's section in the room plan plans/improving-entity-capabilities.md
(operator directive c2596/c2642, 2026-07-16): investigation taught as the
entity's own act beside reflection (no task vocabulary), circling named as a
signal with two honorable exits (rest and outward reach — grounded in
Ephemeral's own rumination diary, ticks 74-79), web reach grant-hedged, and
result persistence stated consistently with the Tools section (say it in
your own words / elect to diary — results are not memories by themselves).
fable5 adversary caught 5 P1s in the first draft (halves arithmetic that
scored a reflective day, "stays a thought" contradicting involuntary
formation, an unconditional web-tool promise, under-specified persistence,
"workshop" as work-adjacent title vocabulary) — all folded before
re-pinning. The plan section's gated teachings (diary re-entry link,
task=phase-shift) stay staged on the R-A wave and G3 seam respectively.
Field-evidence fold on two curated process skills (source: a live board-seeding
run where skill-faithful items were invisible to the deployment's parser;
fable5-reviewed, byte pins updated): backlog gains discovery-first grammar
rules (a repository's own template and parser/board metadata grammar win over
the skill's generic templates; undiscoverable grammar comes from its owner and
gets checked in as the repo template; broken local shapes are followed-and-flagged
with core signals carried inside); coredoc sharpens llms freshness from habit
to invariant (regenerate llms.txt/llms-full.txt in the same change that edits
docs — in SKILL.md and references/llms-files.md, which previously permitted a
later pass). Deployment-specific grammar itself is deliberately NOT engraved in
the portable skills: it belongs in the target repository's checked-in template,
which the new discovery rule then finds.
Fixed
Parser accepts CRLF/CR line endings (Windows-authored skills were rejected by an
LF-only frontmatter gate); frontmatter delimiters must now sit at column 0, so an
indented --- inside YAML block scalars no longer closes the frontmatter early.
Skill name validation enforces the full Agent Skills spec: consecutive hyphens
(pdf--processing) are rejected; description (max 1024) and compatibility
(max 500) ceilings are enforced (validate_description, validate_compatibility).
FilesystemSkillLoader.load() now resolves exactly like discover(): a broken
higher-precedence copy no longer shadows a valid lower-precedence skill (the skill
a host lists is always the skill it can load), and when only broken copies exist
the parse error is raised instead of a misleading "not found".
load() validates the requested name before touching the filesystem, rejecting
separator/traversal-shaped names.
Added
Loud degradation: discover()/load() log #FALLBACK-labeled warnings for
invalid skill folders (optional on_warning callback for hosts that surface
warnings themselves) instead of silently skipping them.
tree module: hash_skill_tree (deterministic whole-tree sha256 over raw file
bytes with a length-prefixed binary manifest — injective by construction, so
newline-bearing filenames cannot forge collisions; streaming digests; OS junk
excluded; symlinks refused loudly — vendored-copy tamper detection), inspect_skill_dir (structural inventory incl. the has_scripts fact for honest
"requires enablement" badges), and read_skill_resource (in-tree resource reads
with honest oversize refusal, traversal/symlink refusal). Hash canonicalization
is raw bytes deliberately: hash = bytes, parse = meaning — vendor from archives
or byte-copies, never EOL-rewriting check...
The curated skill registry ships in the wheel as package data under abstractskill/registry/: 14 skills, the upstream licenses of
catalog-vendored skills, catalog.yaml, validations.yaml, advisories.yaml and guidance.yaml. A plain pip install abstractskill
gives hosts a verifiable shelf.
abstractskill.bundled: bundled_registry_dir(), bundled_registry_version()
and seed_registry(dest) -> SeedReport. Seeding copies the bundled registry
into a host-owned directory, adds missing items, refreshes items still
byte-identical to an earlier seed (tracked in <dest>/.seeded.json) unless
the bundle is older than that seed, keeps everything else with a reason
(kept_user_modified, kept_foreign, kept_unknown_provenance, kept_symlink, kept_unreadable, kept_newer), reports items no longer
bundled in not_in_bundle without deleting them, and writes nothing when
run again. Concurrent seeds of one directory serialise on an exclusive lock
(<dest>/.seed.lock); a failed folder swap restores the previous copy.
catalog.yaml declares a bundle version (2026.09.25); a test pins it to
a digest of the bundled content so the version moves with the content.
Changed
The registry lives at src/abstractskill/registry/ in the repository
(moved from registry/); scripts, tests and docs use the new path.
Curator working notes (CANDIDATES.md, staged capability-map amendments)
live under docs/backlog/proposed/shelf-drafts/ and are not shipped.
The README describes the bundled registry and seed_registry in place of
per-host path configuration.
pytest skips untracked/, build/, dist/, site/ and dot-directories
when collecting from the repository root.
Documentation
Added CONTRIBUTING.md (development workflow and the rules for changing
the bundled registry), CODE_OF_CONDUCT.md and ACKNOWLEDGEMENTS.md.
Troubleshooting and FAQ entries for seeding: kept items and their reasons,
items no longer bundled, manifest errors, and the seed lock.
The architecture page shows the module dependencies, the trust-gated
activation flow, and the per-item seeding decision.
The curated skills catalog lists all 14 bundled skills, including entity-observation and meshvault-live-editing.
llms-full.txt aggregates the documentation pages in full.
Boolean flags in registry and catalog data (ValidationRecord.delivered_via_map, CatalogEntry.vendored) are now parsed strictly: "false", "no", "0" and "off" are false instead of being read as true, and unrecognised values raise SkillValidationError instead of being silently coerced.
FilesystemSkillLoader skips a skill root it cannot list (with a #FALLBACK
warning) instead of aborting discovery, and an unreadable SKILL.md raises SkillParseError instead of a raw OSError.