Releases: projectious-work/processkit
v0.24.0 — model routing and context archiving
A minor release focused on model-routing depth, context lifecycle
management, and operator diagnostics. It adds richer model/provider
metadata, local semantic routing support, a read-safe context archiving
skill, context-consumption reporting, and team/model assignment
infrastructure. No breaking changes are intended for existing consumers.
Added
- Added model-class assignment and richer model/provider characteristics:
provider, model, version, effort, architecture, license, deployment,
latency/speed, context length, token accounting, access, rate limits,
and supported runtime parameters. - Added
get_model_for_class()and class-based routing metadata to the
model recommender so callers can resolve fast, balanced, deep, and
specialized model classes consistently. - Added the
context-archivingskill and MCP server for planning and
creating archive tarballs, extracting archived payloads, and keeping
archived entities queryable through the index. - Added archive-aware index metadata via
storage_location, including
archived LogEntry event-query support. - Added task-router v0.2 scoring with local n-gram semantic matching,
scoring basis details, and low-confidence LLM-escalation metadata. - Added context-consumption checkpoint reports and team identity /
model-assignment bindings for role-based routing. - Added optional sqlite-vec semantic search and FTS5-backed index search.
- Added a library-expert skill template plus skill-builder and
skill-reviewer guidance for version-scoped library expertise.
Changed
- Improved processkit routing and MCP ergonomics across task-router,
skill-finder, model-recommender, and related docs. - Refined harness diagnostics and pk-doctor drift reporting, including
server-header drift coverage. - Updated model schemas in both
context/andsrc/context/to carry
the broader model-characteristics surface.
Fixed
- Fixed artifact metadata updates so callers can avoid restamping
freshness-sensitivemetadata.updatedvalues. - Restored the docs-site build after the v0.23.1 release line.
Notes
- v0.24.0 is a minor release because it introduces new
backwards-compatible capabilities. The context-archiving MCP server is
implemented, but harness registration remains gated on installer sync
support for new per-skill MCP config entries. - Pre-release validation on the release branch retains the known optional
release-audit warnings for unused entity directories (actors/,
scopes/,gates/) and the known pk-doctor preauth warning gated by
aibox#55.
v0.23.1 — release-audit cleanup (0 ERRORs)
A focused content+code patch resolving the 106 ERRORs surfaced by the
first-run release-audit on v0.23.0. Hybrid validator + content fixes
per DEC-20260426_1859-MightyRobin (BACK-FierceOwl): three documented
validator relaxations close 96 false-positives, and ten real content
findings get backfilled. Net: 106 ERROR → 0 ERROR; 3 WARN unchanged
(actors / scopes / gates entity-dirs are deliberately unused — flagged
for v0.24.0).
Changed
- change(release-audit): excludelist aibox CLI migration prose docs.
entity_fileswalker now skips*-to-*.mdandINDEX.mdunder
context/migrations/. Closes 16 A1 false-positives — these are aibox
CLI prose, not Migration entities. Real Migration entities under
pending/andapplied/continue to be validated. - change(release-audit): model the team-member directory layout.
entity_fileswalker now understands the team-manager skill's
alt schema: registersPersonaas a known kind, special-cases the
team-member.mdfilename stem to map ontoTEAMMEMBER-{slug}, and
walksrelations/subdirs as Persona-related sub-files. Closes 11
A2 false-positives. - change(release-audit): make
metadata.processkit.layeroptional
for non-processkit-category skills.
Layer is a processkit-DAG concept; library-style skills
(category != "processkit") participate in no compositional layer
graph. Strict layer enforcement preserved for the processkit DAG
where it matters. Closes 69 C false-positives — across engineering
(39), devops (11), data-ai (11), design (5), documents (3).
Added
- add(release-audit): 24 new pytest cases.
test_release_audit.py
gainsTestMigrationProseSkipped(4 cases),TestTeamMemberLayout
(3 cases), andTestLayerConditional(2 cases) covering the three
validator changes above. Plus+203lines total of fixture and
helper plumbing.
Fixed
- fix(skills): backfill
metadata.processkit.layeron 7
processkit-category SKILL.md files. Each value computed from the
skill's declareduses[]deps:model-recommender: layer 2skill-builder: layer 4skill-finder: layer 4skill-gate: layer 4skill-reviewer: layer 4task-router: layer 4team-creator: layer 4
- fix(team-creator): author missing
## Full referencesection.
+213 lines reference content covering all team-creator commands,
flags, and recipes. - fix(team-manager): author missing
## Overviewand
## Full referencesections. +316 lines covering the team-member
directory layout, persona files, relations, and consistency checks.
Notes
- v0.23.1 is a patch release — additive validator allowances and
documentation backfills only, no breaking changes. Consumers on
v0.23.0 can adopt with no migration steps. - pk-release-audit on this release: 0 ERROR / 3 WARN / 999 INFO
(down from 106 ERROR / 3 WARN / 903 INFO on v0.23.0). The 3
remaining WARNs areentity.missing-dirforactors/,scopes/,
andgates/— the project doesn't use those entity kinds yet. - Incidentals rolled into the same release per FierceOwl's transition
note: pk-doctordrift.pyparser fix follow-up to processkit#13,
drift-script provenance allowlist updates, and a refreshed aibox CLI
migration prose for v0.20.0 → v0.21.1. DEC-20260426_1627-CuriousButterwas corrupted at write-time
(XML-style fields embedded inside thedecisionstring plus
trailing tool-call markup) and supersedes-replaced by
DEC-20260426_1859-MightyRobin.
v0.23.0 — RoyalFern filters + 4 new validators/tools + 3 scaffolding fixes
A focused batch release: governance filter implementation that gives
the v0.22.1 RoyalFern schema fields runtime teeth, plus four scaffolding
bug-fixes (CalmArch / RapidDaisy / VastLark) and four new validators &
tools (TidyGrove / NobleBrook / AmberCliff). Eight WorkItems in total,
all detect-or-fix improvements with no breaking changes.
Implementation followed two waves: wave one (CalmArch + RapidDaisy +
VastLark + SolidWolf) shipped sequentially; wave two (TidyGrove +
NobleBrook + AmberCliff + BraveMeadow) ran as four parallel
sonnet-tier subagents, one per WI, against disjoint target dirs.
Added
- feat(model-recommender): query_models() RoyalFern filters (SolidWolf).
BACK-20260426_1214— query_models() gains 9 governance / data-privacy
filter kwargs sourced from the RoyalFern fields landed in v0.22.1:
phi_hipaa_eligible,pii_eligible,gdpr_eligible,
training_on_customer_data(enum match),data_retention_days_max
(numeric ceiling; accepts the literal"zero", rejects"unknown"),
jurisdiction_country_in(HQ membership),legal_regime_in(any-match
onapplicable_legal_regimes),data_residency_in(any-match on
data_residency_regions), andmax_latency_p50_ms. Missing-field
semantics: a model lacking the relevant field is REJECTED — conservative
governance default._profile_blocksurfaces the new fields on every
result so callers can verify what filter they got hits on. The four
query_models() examples in the model-recommender SKILL.md (HIPAA,
jurisdiction, training, retention) now return non-empty result sets
against the live 34-model roster (16/20/10/15 hits respectively). - feat(release-audit): new skill (TidyGrove).
BACK-20260409_1830—context/skills/processkit/release-audit/
ships a detect-only validator that runs four passes before a release
tag: entity-file frontmatter compliance (apiVersion / kind / id-vs-
filename), SKILL.md structural compliance (required frontmatter
fields + four required body sections), MCP-server tool annotation
presence, and skill cross-reference resolution. Single Markdown
report, exit 0 / 1, commandpk-release-audit. First live run
surfaces 105 pre-existing ERRORs (legacy aibox migration prose,
team-member sub-files using an alt schema, non-processkit skills
missing thelayerfield) — flagged for separate triage and not
blocking this release. - feat(pk-doctor):
skill_dagcheck (NobleBrook).
BACK-20260409_1738— new pk-doctor check walks every SKILL.md,
builds the dependency graph from eachmetadata.processkit.uses[],
and validates: missing-references (every used skill exists), cycles
(iterative DFS with 3-colour marking), and layer constraints (a
skill at layer N may only reference skills at layer ≤ N). On the
live tree the first run found 0 cycles, 0 missing refs, and 5 layer
violations — all five resolved in this release as a content-only
layer bump (see Fixed below). - feat(skill-finder): user-facing
catalogMCP tool (AmberCliff).
BACK-20260410_1840— newcatalog()tool on
processkit-skill-finder. Signature:
catalog(category, tag, keyword, columns, sort_by, output)with
output ∈ {"markdown", "json", "yaml"}and column projection on
any frontmatter field. Defaults to a Markdown table of every skill
sorted by name. Reuses_all_skills()— no new SQLite plumbing.
SKILL.md gains a "Catalog queries" section with trigger phrases
("list skills", "show me all skills in X", "skills as JSON") and
five example invocations.
Changed
- change(skill-gate): prefix-based PreToolUse matcher (VastLark).
BACK-20260425_1235—check_route_task_called.pyswitches from an
explicit allowlist to a prefix-based matcher. Any tool whose name
starts withcreate_,transition_,link_,record_,open_,
update_,apply_,reject_,add_,end_,import_,
reactivate_,deactivate_,release_,reserve_,supersede_,
start_,evaluate_, orskip_is now gate-locked, plus an
explicit allowlist forlog_event(verb+noun shape). Closes the
auto-renew gap that surfaced in the 2026-04-25 session when only
create_bindingtraffic ran across a midnight boundary and the
marker expired despite continuous compliant writes. 40 new test
cases intest_hooks.py. - change(workitem-management + all entity-writing MCPs): YAML
literal-block-scalar serialization (CalmArch).
BACK-20260425_1755—context/skills/_lib/processkit/frontmatter.py
adopts a customSafeDumpersubclass with astrrepresenter that
emits|block-scalar style for any string containing a newline,
normalizing trailing whitespace to a single\n(canonical clip-
chomp shape).parse()re-attaches the trailing\nthe regex
consumed at the\n---boundary. Markdown bodies with pipe-tables,
fenced code blocks, and backslashes now round-trip safely instead
of failing PyYAML re-parse. The fix lives in the shared lib so
every entity-writing MCP (workitem-management, decision-record,
event-log, …) benefits. 8 new tests cover the QuickBison repro
shape. - change(model-recommender):
_entity_to_legacy()propagates RoyalFern fields.
Pass-through forvendor_model_id,knowledge_cutoff,
latency_p50_ms,jurisdiction, anddata_privacyfrom
Model.versions[]into the legacy-shape entry thatquery_models()
iterates over. Required to make the SolidWolf filters above work
end-to-end against the real model roster. - change(skill-finder): SKILL.md "Catalog queries" section.
Documents the newcatalog()tool, trigger phrases, and example
invocations.
Fixed
- fix(event-log): log_event MCP now validates required
actorfield
(RapidDaisy).
BACK-20260425_1755—log_event()calls
schema.validate_spec("LogEntry", spec)before write. Calls
missing or with emptyactorreturn{"error": "..."}and write
no file. Previously the schema-required field was silently omitted,
producing LogEntry files that pk-doctor'sschema_filenamecheck
flagged as ERRORs after the fact (and required a hand-fix). 3 new
tests cover missing-actor, valid-actor, empty-actor cases. Docstring- module preamble updated to mark
actoras required.
- module preamble updated to mark
- fix(skills): layer-value bumps to satisfy
uses[]declarations.
Surfaced by the new NobleBrook skill_dag check on its first live
run. Five layer violations resolved by promoting the affected skills
to a layer ≥ their highest declared dependency:engineering/changelog: layer 2 → 3 (usesrelease-semverat 3).processkit/status-briefing: layer 2 → 4 (usesagent-managementat 4).processkit/status-update-writer: layer 2 → 4 (usesagent-managementat 4).product/onboarding-guide: layer 2 → 4 (usesagent-managementat 4).
Behavior unchanged; only the frontmattermetadata.processkit.layer
values change.
Verified (no changes needed)
- chore(owner-profiling): reference files complete (BraveMeadow).
BACK-20260410_1049— verified
owner-profiling/references/observable-signals.md(105 lines, 37
signals × 6 categories) andinterview-protocol.md(128 lines)
are present, complete, spec-compliant against
NOTE-20260410_1046-StoutSwan, and mirror-clean. No file changes.
Notes
- v0.23.0 is a minor release — additive features and pure bug
fixes, no breaking changes. Consumers on v0.22.1 can adopt with no
migration steps. - The release-audit skill's first live run reports 105 ERRORs of
pre-existing tree issues; these are NOT blockers for v0.23.0 and
will be triaged in a separate v0.23.x content-cleanup pass. - Two cross-project bugs were filed upstream during the prep window
(no processkit-side fix): aibox#56 (CleverRiver — same-version
migrations) and aibox#57 (FierceWren — content-diff overwrites
locally-added entity content). Workaround in place: rungit status
after everyaibox sync. - pk-doctor green at release time: 0 ERROR / 2 WARN / 11 INFO. The
two WARNs are the unchangedcontext/.processkit-provenance.toml
drift (known v0.22.0 stamping bug, acknowledged in aibox v0.20.0
release notes and tolerated). One additional INFO comes from the
new skill_dag check.
v0.22.1 — RoyalFern Model schema (jurisdiction + data_privacy + 3 more)
A focused point release shipping the RoyalFern Model schema enhancement
(DEC-20260425_2256): five additive optional fields on
Model.spec_schema.versions[] — jurisdiction, data_privacy,
knowledge_cutoff, vendor_model_id, and latency_p50_ms — backfilled
across all 34 model entities and documented under the Governance
dimension in the model-recommender skill. No breaking changes; existing
callers are unaffected because every new field is optional.
The query_models() MCP tool does not yet implement filtering on these
fields — that work is tracked as BACK-20260426_1214-SolidWolf and
targeted for v0.23.0. Until that lands, the new fields are read via
get_profile() / direct file inspection.
Added
- feat(schema): RoyalFern Model schema fields.
context/schemas/model.yamlgains five optional fields on
spec_schema.versions[]:jurisdiction— vendor HQ country (ISO-3166-1 alpha-2),
applicable_legal_regimes(slugs: EU-GDPR, US-CLOUD-Act,
US-HIPAA, CN-DSL, CN-PIPL, UK-DPA, CA-PIPEDA), and
data_residency_regions(e.g.["us-east","eu-west"]). Lossless
replacement for ad-hocgovernance_warningfree-text callouts.data_privacy— vendor data-handling posture:dpa_available
(boolean or DPA URL),data_retention_days(integer or
zero/unknown),training_on_customer_data(never/opt-in/
opt-out/always/unknown),pii_eligible,phi_hipaa_eligible,
gdpr_eligible, andsub_processors_url.knowledge_cutoff— vendor-published training-data cutoff date.vendor_model_id— exact provider API model identifier
(e.g.claude-opus-4-7-20251031), preferred dated/pinned form.latency_p50_ms— approximate p50 first-token latency in
milliseconds; quantitative companion todimensions.speed.
All fields are optional and additive; pre-RoyalFern Model entities
remain valid without modification.
Changed
- chore(models): backfill RoyalFern fields across all 34 model entities.
EveryMODEL-*.mdundercontext/models/(Anthropic, OpenAI, Google,
xAI, Meta, Mistral, DeepSeek, Cohere, Microsoft, Alibaba, MiniMax)
now carries the new fields where vendor-published values exist;
unknown/ omitted where they don't. Backfill done by two parallel
shard subagents to bound context cost; both passes verified against
the schema. - docs(model-recommender): Governance dimension expanded.
context/skills/processkit/model-recommender/SKILL.mdadds a
structured-fields block under the Governance dimension and four
examplequery_models()filter usages
(phi_hipaa_eligible=true,
jurisdiction.vendor_hq_country in ["US","EU"],
data_privacy.training_on_customer_data="never",
data_privacy.data_retention_days=0). Note: the SKILL.md docs are
the spec; the correspondingquery_models()filter implementation
ships in v0.23.0 (tracked as BACK-20260426_1214-SolidWolf).
Notes
- v0.22.1 is a patch release — five additive optional schema
fields with no behavioural changes to any existing tool. Consumers
on v0.22.0 can adopt with no migration steps. - Two upstream aibox bugs surfaced during this session and were
filed for the aibox project: aibox#56 (CleverRiver — same-version
migrations) and aibox#57 (FierceWren — content-diff overwrites
locally-added entity content). Neither has any processkit-side
fix in this release; both are tracked as cross-project WorkItems
(BACK-20260425_1711-CleverRiver, BACK-20260426_1205-FierceWren). - pk-doctor green at release time: 0 ERROR / 2 WARN (both expected
drift WARNs forcontext/.processkit-provenance.toml— known
v0.22.0 stamping bug acknowledged in aibox v0.20.0 release notes
and tolerated by the host).
v0.22.0
[v0.22.0] — 2026-04-25
Two new pk-doctor checks (migration_integrity, server_header_drift)
and the processkit-side half of preauth-spec shipping (WildGrove
Phase A) — plus a host CLI bump to aibox 0.19.2 with mcp_config_hash
recorded in the lock file. Closes the v0.21.0-deferred RapidSwan
pk-doctor check, lands the schema-malformed-migration detection that
motivated CleverRiver, and exports an 18-pattern preauth bundle for
derived projects (consumed by aibox#55).
A small one-shot cleanup pass also clears 3 pre-existing pk-doctor
schema ERRORs (1 WorkItem with mangled YAML quoting, 2 LogEntries
missing actor); the producer-side MCP fixes are tracked as
RapidDaisy and CalmArch for a future release.
Added
- feat(pk-doctor):
migration_integritycheck (CleverRiver). New
check flags two malformed-migration patterns:same-version-with-content
(a Migration whosefrom_version == to_versionbut whose
affected_groups/affected_filesare non-empty) and
affected-files-empty(table rows present in the body but the
affected_filesarray empty). Both fire as WARN, cite CleverRiver,
and recommendreject_migrationon the offending file. Surfaced the
malformedMIG-20260425T164303that motivated the WI. CleverRiver
itself stays open as a cross-project tracker for the upstream
aibox-sync diff-generator fix. - feat(pk-doctor):
server_header_driftcheck (RapidSwan). New
WARN-level check that hashes the PEP 723 inline metadata block
(# /// script…# ///) of every MCPserver.pyand compares
against a manifest baseline. On drift, lists the affected skill
slugs and recommends restarting the harness souvre-resolves the
pinned venv.context/.processkit-mcp-manifest.jsonis extended
with a per-skillper_server_headerfield;aggregate_sha256
semantics are unchanged (still computed overmcp-config.json
files only — aibox#54 contract preserved). Per
DEC-20260424_0127-QuickPine(SharpBrook split: BraveBird shipped
the schema-reload half in v0.21.0; RapidSwan ships the dep-drift
half here). Closes
BACK-20260424_0128-RapidSwan-pk-doctor-server-header. - feat(skill-gate): preauth spec asset (WildGrove Phase A).
context/skills/processkit/skill-gate/assets/preauth.jsonships an
18-pattern bundle of server-wildcard permission entries and 18
matchingenabledMcpjsonServersentries that derived projects merge
into their harness settings to pre-authorise every processkit MCP
server. Phase A is processkit-side only — aibox#55 picks up Phase
B (the merge logic onaibox sync). - feat(pk-doctor):
preauth_appliedcheck (WildGrove Phase A).
WARNs in derived-project context when the preauth spec exists in
the processkit tree but the corresponding entries are missing from
the harness settings file, with a "runaibox synconce aibox#55
ships" hint. No-op in the processkit dogfood repo.
Changed
- chore(aibox): host CLI 0.18.7 → 0.19.2 + record
mcp_config_hash
in lock file. Bumped the harness CLI;aibox.locknow carries an
mcp_config_hashfield recording the sha256 of the merged
.mcp.jsonat sync time, giving pk-doctor and aibox-sync a stable
reference for drift detection independent of per-skill
manifest hashes.
Fixed
- chore(repair): clear 3 pre-existing pk-doctor schema ERRORs.
One-shot direct edit on a WorkItem whose YAML quoting was mangled
by a fragile MCP serializer, plus two LogEntries missing the
requiredactorfield (written by a brokenlog_eventMCP path
that didn't populate the field). No tooling changes here — the
producer-side MCP fixes are tracked as RapidDaisy
(log_event missing actor validation) and CalmArch
(workitem MCP description quoting) for a future release. - chore(migrations): reject
MIG-20260425T164303. Malformed
migration (rejected viareject_migrationper the
migration_integrityfinding above). Filed CleverRiver as the
upstream-side aibox-sync diff defect that produced it.
External
projectious-work/aibox#55— aibox-side preauth merge (WildGrove
Phase B). The processkit-side spec stays in-tree;preauth_applied
WARNs in derived projects until the matchingaibox synclogic
ships.
v0.21.0 — retro batch + pk-doctor portability fixes
Five fixes spanning the v0.19.2 retro action items and two
correctness bugs in pk-doctor that surfaced when the owner ran
/pk-doctor inside an aibox-derived project and got a falsely-clean
report. Both pk-doctor bugs were silent-zero failures: the checks
silently no-op'd in derived projects and hid every entity-hygiene
problem they were supposed to catch.
The two heavier retro items (SharpBrook MCP schema hot-reload,
SnappyBird append-only LogEntry repair) were worked through design
discussions (DISC-DaringBird, DISC-WiseLily) and split or narrowed
per DEC-QuickPine and DEC-BrightHawk.
Added
- feat(_lib + 4 servers):
reload_schemasMCP tool. Each of
the schema-active servers (workitem-management, decision-record,
event-log, artifact-management) gains a thin tool that calls a
shared helper in_lib/processkit/schema.py::reload_caches(),
clearing the in-processload_schemaand
state_machine.loadlru_cachees so a disk-level schema or
state-machine edit becomes visible without a server restart.
Returns{ok, cleared: {schemas, state_machines}}. PEP 723
dep-header edits are NOT addressed (theuv-resolved venv is
pinned at process start — tracked separately by
BACK-RapidSwanfor v0.22.0+). Closes
BACK-20260424_0128-BraveBird-reload-schemas-mcp-toolper
DEC-20260424_0127-QuickPine. - feat(model-recommender): 20 specialist + expert seed bindings.
The v0.19.0 roster declared a 5-level seniority ladder
(junior → specialist → expert → senior → principal), but the
default-bindings pack seeded only 3 levels. As a result,
resolve_model(<role>, "specialist"|"expert")returned
no viable modelacross all 10 seeded roles — 20 missing
combinations. KeenFern adds seeds inheriting from the nearest
covered neighbour:specialist→ junior's (model, effort band),
expert→ senior's (model, effort band). MANIFEST.yaml grew from
30 → 50 seeds. New regression test
test_default_bindings_coverage.pyasserts every seeded role
covers all 5 ladder levels and fires loudly on any future gap.
ClosesBACK-20260424_0134-KeenFern-fill-model-assignment-seniority. - docs(AGENTS.md): "Sub-agent delegation" section. Codifies
the read-only / mutating split for harnessAgent-tool sub-agents
(delegate read-only; keep mutating writes on the main session).
ClosesBACK-20260424_0038-ToughAnt-ephemeral-sub-agent-defaults. - docs(AGENTS.md): "LogEntry repair" Skill-guards entry.
Documents the narrow hand-edit escape hatch for schema-invalid
LogEntries and points topk-doctor --fix=schema_filenameas
the preferred path. Part of MightyFjord.
Changed
- feat(skill-gate): compliance-ack TTL is now an idle timeout.
_any_valid_marker()rewrites the matching marker's
acknowledged_attonowon every successful gate check.
Sessions actively making compliant writes never expire mid-flow
(the v0.19.2 midnight-span pain pattern); idle sessions
(>_ACK_LIFETIME_HOURS, default 12 h) still must re-acknowledge.
Touch failures are non-fatal. Closes
BACK-20260424_0038-SwiftLynx-compliance-contract-acknowledgement-ttl.
Fixed
- fix(pk-doctor):
schema_filenameschemas-dir fallback (HappyReef).
schema_filename.pyresolved the schemas dir as
<repo_root>/src/context/schemas/only — a path that exists
exclusively in the processkit dogfood repo. In every derived
project (aibox-installed) schemas live at<repo_root>/context/ schemas/, so the check silently walked 0 entity files and
reported 0 ERROR / 0 WARN regardless of how many malformed
entities were on disk. The new_resolve_schemas_dir()tries
the dogfood path first, then falls back tocontext/schemas/,
and surfaces a single WARN when neither exists. Verified
against an aibox checkout: the check now walks 186 entity files
and reports the real findings (filename-date mismatches on
_0000placeholder filenames, missing-actorERRORs, etc.).
ClosesBACK-20260425_1041-HappyReef-pk-doctor-schema-filename. - fix(pk-doctor):
migrationslayout fallback (DeepMoss).
Companion to HappyReef. Themigrationscheck looked only in
context/migrations/pending/(processkit dogfood convention).
Derived projects (aibox) keep pending migrations at the top
level ofcontext/migrations/and only move applied ones into
applied/. The new_candidate_pending_paths()probes
pending/first; if absent, walkscontext/migrations/*.md
minusapplied/,INDEX.md, and aibox-CLI upgrade-doc
filenames (<YYYYMMDD>_<HHMM>_<from>-to-<to>.md)._list_pending
also filters bykind: Migrationso non-Migration markdown
alongside migrations is ignored. Closes
BACK-20260425_1041-DeepMoss-pk-doctor-migrations-detect. - fix(pk-doctor):
--fix=schema_filenamefor the CalmAnt-class
pattern (MightyFjord). Newrun_fixon
schema_filename.pypatches LogEntries missing the required
actorfield by insertingactor: system, validates
post-patch, and rolls back on failure. Behind--fix=schema_filename --yes, never default. Closes
BACK-20260424_0128-MightyFjord-pk-doctor-fix-schemaper
DEC-20260424_0128-BrightHawk. - fix(skill-gate): remediation text uses on-disk contract version.
_remediation_msg()parses the leading<!-- pk-compliance vN -->
marker rather than hard-codingv1. Part of SwiftLynx. - fix(retrospective):
/pk-retro --auto-workitemsno longer fails
withModuleNotFoundError: No module named 'mcp'. Added
mcp[cli]>=1.0andjsonschema>=4.0topk_retro.py's PEP 723
header souv run --script pk_retro.pyresolves the in-process
MCP loader's transitive imports automatically. Closes
BACK-20260424_0038-WildLake-pk-retro-auto-workitems. - fix(skills): resolve cross-category
retrospectiveskill basename
collision.product/retrospectiveis renamed to
product/sprint-retrospective; the processkit-category
retrospective(release-scope,/pk-retro) keeps the bare name.
Closes #11.
Deferred
BACK-20260424_0128-RapidSwan-pk-doctor-server-header— pk-doctor
server_header_driftcheck (PEP 723 dep drift detection,
WARN-only). Targeted v0.22.0+.BACK-20260424_0037-SharpBrook-mcp-servers-cache-schemas
(cancelled; superseded by BraveBird + RapidSwan per
DEC-20260424_0127-QuickPine).BACK-20260424_0038-SnappyBird-data-repair-path-for
(cancelled; replaced by the narrow MightyFjord run_fix per
DEC-20260424_0128-BrightHawk; general data-fix migration kind
not built — revisit only if >2 more recurrences in a calendar
quarter).
v0.20.0 — retro follow-up: WildLake + ToughAnt + SwiftLynx + #11
Retro follow-up batch: fixes the three lightest action items from the
v0.19.2 retrospective (WildLake, ToughAnt, SwiftLynx). The two heavier
retro items — SharpBrook (MCP schema hot-reload) and SnappyBird
(data-repair path for append-only LogEntries) — are deferred to
v0.21.0 pending the design discussions opened as DISC-DaringBird and
DISC-WiseLily. See DEC-20260424_0101-SolidBadger-split-v0-20-0.
Added
- docs(AGENTS.md): "Sub-agent delegation" section. Pairs with the
existing "Skill guards" list and codifies the read-only / mutating
split for harnessAgent-tool sub-agents: delegate Read, search
Bash, and MCPquery_*/get_*/search_*/list_*; keep
Write, Edit, newmkdir, MCPcreate_*/transition_*/
record_*/link_*/open_*/log_event, and git mutations
on the main session. Closes
BACK-20260424_0038-ToughAnt-ephemeral-sub-agent-defaults.
Changed
- feat(skill-gate): compliance-ack TTL is now an idle timeout.
_any_valid_marker()incheck_route_task_called.pynow rewrites
the matching marker'sacknowledged_attonowon every
successful gate check. A session that is actively making
compliant writes no longer expires mid-flow (the v0.19.2
midnight-span pain pattern); a session that goes idle for longer
than_ACK_LIFETIME_HOURS(12h) still must re-acknowledge. Touch
failures are non-fatal. Closes
BACK-20260424_0038-SwiftLynx-compliance-contract-acknowledgement-ttl.
Fixed
- fix(skill-gate): remediation text uses the on-disk contract
version._remediation_msg()parses the leading
<!-- pk-compliance vN -->marker in
assets/compliance-contract.mdrather than hard-codingv1. The
v0.19.2 hard-code told callers to acknowledgev1even though the
on-disk contract was alreadyv2. Part of SwiftLynx. - fix(retrospective):
/pk-retro --auto-workitemsno longer fails
withModuleNotFoundError: No module named 'mcp'.pk_retro.py
declared onlypyyamlin its PEP 723 header, but its in-process
MCP loader importsserver.pymodules from artifact-management,
event-log, and workitem-management — all of which require
mcp[cli]andjsonschema. Added both to the PEP 723 header so
uv run --script pk_retro.pyresolves them automatically. Closes
BACK-20260424_0038-WildLake-pk-retro-auto-workitems. - fix(skills): resolve cross-category
retrospectiveskill
basename collision.product/retrospectiveis renamed to
product/sprint-retrospective(directory,name:, andid: SKILL-sprint-retrospective); the processkit-category
retrospective(release scope,/pk-retro) keeps the bare name.
Closes #11. The missingpk-doctor/commands/directory
(#10) and the duplicatepk-resume.mdcommand
(#12) were already resolved in v0.19.2 (90c980f and 87e185e
respectively) and are closed here for bookkeeping.
Deferred to v0.21.0
BACK-20260424_0037-SharpBrook-mcp-servers-cache-schemas— MCP
schema hot-reload /reload_schemastool. Design discussion:
DISC-20260424_0101-DaringBird-how-should-mcp-servers.BACK-20260424_0038-SnappyBird-data-repair-path-for— data-repair
path for malformed append-only LogEntries. Design discussion:
DISC-20260424_0101-WiseLily-how-do-we-allow.
v0.19.2 — release-hygiene + derived-project-install bulletproofing
Release-hygiene and derived-project-install bulletproofing. Closes
four v0.19.2 WorkItems (SteadyCedar, BraveDove, ToughMeadow,
HappyFinch) and ships the processkit-side half of TrueQuail; the
aibox-side reconcile is tracked at
projectious-work/aibox#54.
Added
- feat(pk-doctor):
commands_consistencycheck. Walks every
context/skills/processkit/*/SKILL.mdand ERRORs when a declared
commands[].namehas no matchingcommands/<name>.mdfile (WARNs
on the inverse — stray files not declared in metadata). Prevents
recurrence of the v0.19.1 slip where pk-doctor shipped without its
owncommands/pk-doctor.md. Closes
BACK-20260423_1103-ToughMeadow-pk-doctor-skill-missing. - feat(pk-doctor):
mcp_config_driftcheck. Reads
context/.processkit-mcp-manifest.json, recomputes per-skill
mcp-config.jsonsha256es, and reports manifest staleness (WARN)
or — in a derived-project context (aibox.lock+.mcp.jsonat
repo root) — missing processkit servers in.mcp.json's
mcpServersmap (ERROR with a "runaibox sync" hint). Surfaces
the exact failure mode that motivated TrueQuail. - feat(release-semver):
scripts/generate-mcp-manifest.py. Writes
context/.processkit-mcp-manifest.json+ src/ mirror with a sha256
per-skill-config and an aggregate hash. Wired into
scripts/build-release-tarball.shso every release tarball ships a
fresh manifest. Stable contract for downstream installers (aibox)
to detect per-skill-config drift independent of the processkit
version delta — see
DEC-20260423_2049-VastLake-truequail-split-processkit-shipsand
projectious-work/aibox#54. Closes the processkit-side of
BACK-20260423_0829-TrueQuail-aibox-installer-reconcile-mcp. - feat(pk-doctor): ship
commands/pk-doctor.md. v0.19.1 declared
the slash command in SKILL.md metadata but forgot the file, so
/pk-doctorwas never registered in derived projects. This release
ships the file in both trees and addscommands_consistencyabove
as the prevention mechanism. - docs(AGENTS.md): "MCP config manifest" contract section.
Documents the manifest shape + path so aibox (and any other
processkit installer) can implement against a stable interface.
Changed
- chore(skills): reconcile SKILL.md
commands:metadata to/pk-
namespace. 14 skills had stale<skill>-<verb>names declared in
metadata while actually shipping/pk-<verb>.mdfiles. This
release renames the metadata to match shipped filenames (and for
team-creator, promotes thecommands:block out ofprovides:to
metadata.processkit.commands:so the new
commands_consistencycheck can see it). Drops three entries for
commands that were declared but never shipped
(model-recommender-profile,owner-profiling-refine,
skill-reviewer-bulk-gotchas). No behavioural changes to any
command. Closes
BACK-20260423_2055-HappyFinch-skill-md-commands-metadata.
Fixed
- fix(model-recommender): add missing
pyyaml>=6.0to MCP server's
PEP 723 header. Theresolve_modelcall failed with
ModuleNotFoundError: No module named 'yaml'when the harness
invokeduv run server.py(no--script). Smoke-tested live
returning an 8-layer routing trace for
ROLE-product-manager@senior. Closes
BACK-20260423_0829-SteadyCedar-model-recommender-mcp-server. - fix(schemas): widen identity-class ID pattern to
^(ACTOR|TEAMMEMBER)-[a-zA-Z0-9_-]+$across five schemas. The
v0.19.0 TeamMember rollout leftworkitem.assignee,
decisionrecord.deciders[],discussion.participants[],
artifact.owner, andmetric.ownerstill requiringACTOR-*
only, so MCP writes carrying aTEAMMEMBER-*subject failed
jsonschema validation. Chose alternation over a clean flip to
avoid retroactively invalidating ~90 residualACTOR-*references
in 44 entity files. Smoke-tested live post-harness-restart with
both acreate_workitem(assignee="TEAMMEMBER-cora")and a
record_decision(deciders=["TEAMMEMBER-cora"]). Closes
BACK-20260422_1643-BraveDove-schema-drift-workitem-assignee. - fix(log): add missing required
actorfield to
LOG-20260422_1643-CalmAnt-workitem-created. Pre-TeamMember MCP
server wrote a LogEntry without populatingactor, so
pk-doctor --category=schema_filenamereported a schema ERROR.
actor: systemaccurately reflects the unattributed machine-origin
of the event. One-off direct edit; no MCP tool exists to patch
append-only LogEntries.
External
projectious-work/aibox#54— aibox-side reconcile-on-manifest-drift
tracking issue.BACK-20260423_0829-TrueQuailstays open in the
processkit backlog until that PR lands.
v0.19.1 — local-only release bulletproofing (skill flow + pk-doctor release_integrity)
Local-only release bulletproofing — no CI workflows. Addresses the
v0.19.0 post-mortem finding that a tag push does not create a GitHub
Release. Supersedes DEC-20260422_0926-MerryArch (CI workflow
approach, rejected on vendor-lock + cost grounds) with
DEC-20260422_1348-SnowyWolf (skill flow + doctor detection).
Added
- feat(pk-doctor): 6th check category
release_integrity— walks every localv*git tag, probes GitHub viagh release viewfor a matching Release, and WARNs on any tag without one. INFO whenghis unavailable or the tag set is empty. Opt-out viaPK_DOCTOR_SKIP_RELEASE_INTEGRITY=1; tag-scan cap viaPK_DOCTOR_RELEASE_INTEGRITY_MAX(default 50). Each WARN carries a ready-to-pastegh release create <TAG>command with CHANGELOG extraction inlined. SeeDEC-20260422_1348-SnowyWolf-local-only-release-bulletproofing.
Changed
- chore(release-semver): collapse /pk-release into a single bulletproof flow.
SKILL.md(both trees) rewritten with a 9-step recipe that prepares, publishes, and verifies in one turn — the release is not considered complete untilgh release view vX.Y.Zsucceeds (step 8)./pk-publishretained as a recovery alias for historical tags that are missing a Release. New Gotcha: "git push --tagsis not a GitHub Release." ClosesBACK-20260422_0925-MightyOtter-v0-19-1-release.
Fixed
- fix(release flow): v0.19.0 tag was pushed without a corresponding GitHub Release — the prepare phase of release-semver completed but the publish phase was skipped. v0.19.0 Release was created manually; v0.19.1 ships the prevention (collapsed flow) and detection (
release_integritycheck) mechanisms.
v0.19.0 — TeamMember model + 51-role catalog + Model artifacts + binding routing
[v0.19.0] — 2026-04-22
Added (v0.19.0 architecture refactor)
-
feat(team-manager): new skill replacing
actor-profile. Persistent
participants are now TeamMembers (humans, named AI personas,
services), each living as a directory tree:
context/team-members/<slug>/withteam-member.md(entity),persona.md
(loaded as persona prompt),card.json(A2A v0.3 Agent Card), and six
memory tiers (knowledge/,journal/,skills/,relations/,
lessons/,private/). Ad-hoc worker invocations are not
persisted — they are ephemeral(role, seniority)dispatches. Skill
ships 17 MCP tools (lifecycle, name pool, memory tree, export/import,
consistency), a curated 59-name international name pool, and 10
consistency check categories. Replaces actor-profile (clean break,
no backward compat). SeeDEC-20260422_0233-SpryTulip. -
feat(team-member memory): file-based tiered memory. Six tiers
(working, episodic, semantic, procedural, relational, lessons) all
stored as Markdown with YAML frontmatter (tier,source,
sensitivity,confidence,importance,created,last_reinforced,
scope). Default consolidation cadence: per-task + daily journal +
weekly importance-triggered promotion (Park-style). Each team-member
has aprivate/subdirectory for developer-local notes
(gitignored via.gitignore.exampleshipped at repo root). -
feat(team-member export/import):
export_team_memberproduces a
versioned tarball excludingjournal/,relations/, and
private/by default; sensitivity-tagged files (pii,confidential)
are redacted.import_team_membervalidates the A2A card signature
field and creates the entity tree on import. -
feat(role catalog): expanded from 8 to 51 curated roles under
context/roles/. Function-grouped (engineering-software, platform-infra,
data-ml, security, architecture, design-ux, marketing, sales-customer,
finance, legal-compliance, executive, etc.). Seniority no longer
baked into slugs — pure ordinal attribute with ladder
junior → specialist → expert → senior → principal.
Bindings (not role files) decide what each rung maps to in
(model, effort). SeeDEC-20260422_0234-BraveFalcon. -
feat(model artifacts): models become first-class entities under
context/models/, one file per(provider, family)with
versions[] nested. 34 model artifacts replace the monolithic
model_scores.jsonregistry (which becomes a compiled cache).
Each model carriesequivalent_tierin the provider-neutral
T-shirt capacity ladder (xs / s / m / l / xl / xxl, extensible
in both directions). Effort enum normalised to
[none, low, medium, high, extra-high, max](aliasesextra-high → xhigh
at the Anthropic adapter boundary). SeeDEC-20260422_0234-LoyalComet. -
feat(bindings):
model-assignmentbinding type + 8-layer resolver.
model-recommender.resolve_model(role, seniority?, team_member?, scope?, task_hints?)
returns ranked(model, version, effort)candidates via the precedence
ladder: task-pin → team-member preference → project veto → capability
filter → role+seniority → role default → project bias → shim fallback.
Tie-breakers: project-preferred provider → cost → recency → reliability.
Effort clamping, version pinning, stale-binding skip, in-module result
caching, explain-mode trace. New/pk-explain-routingslash command
for debugging. Default binding pack at
context/skills/processkit/model-recommender/default-bindings/MANIFEST.yaml
ships 30 starter bindings (10 roles × 3 seniorities) materialised into
context/bindings/. -
feat(pk-doctor): 5th check category
team_consistency. Wraps
team-manager.check_all()and surfaces the 10 team-consistency check
codes in pk-doctor's standard report (schema drift, tier-missing,
dangling refs, name collision, name-pool compliance, orphan files,
sensitivity placement, private-dir gitignore, memory file headers,
card staleness). -
chore(.gitignore.example): bundle of all proposed processkit
ignores (cache/state,context/**/private/, model cache, harness
configs, OS/IDE/Python noise) shipped at repo root for adoption by
new processkit projects.
Removed
- actor-profile skill superseded by team-manager. 8 role-class
actors removed (ACTOR-developer,ACTOR-assistant,ACTOR-pm-claude,
ACTOR-{sr,jr}-{architect,researcher,developer}); identity-class
ACTOR-20260421_0144-AmberDawn-legacy-historical-backfillremoved
(not meaningful);ACTOR-20260421_0144-ThriftyOtter-ownermigrated
toTEAMMEMBER-thrifty-otter. 7 legacy role files
(ROLE-{developer,project-manager,senior-architect,senior-researcher, junior-architect,junior-developer,junior-researcher}) removed,
superseded by entries in the curated 51-role catalog. 8 legacy
role-assignment bindings removed.
Fixed
- fix(mcp): systemic auto-log actor fix — every entity-mutating MCP tool (create_, transition_, link_, update_, apply_, reject_, start_, end_, open_, record_, supersede_, deactivate_) now passes actor= to log helpers, producing schema-valid LogEntries. Covers the bug pattern previously fixed for create_actor in WarmGrove. Includes backfill of 6 pre-fix-emission LogEntries from this session and drift-allowlist entry for template-only scripts/ subdirs.
- fix(actor-profile): create_actor MCP tool now emits actor.created LogEntry with spec.actor = new actor id (self-attribution); previously the emitted LogEntry was schema-invalid (missing required field). Closes BACK-20260421_0156.
Changed
- chore(mcp): skill-consultation prompt added to every entity-mutating MCP tool description across all processkit servers (provider-neutral replacement for pre-tool-use hooks). Closes BACK-20260411_0802-SolidCrow.
- chore(AGENTS): slim root AGENTS.md to <60 lines of core content; domain-specific instructions moved into their owning skills; explicit if/then skill guards added. Closes BACK-20260411_0802-EagerSpruce.
- chore(grooming): rename 4 process files and 1 artifact to match canonical metadata.id prefixes (PROC-/ART-). pk-doctor WARN residual eliminated (5 → 0). Closes pk-doctor Phase 2 filename-rename intent.
Added
-
Renamed skill: morning-briefing → status-briefing (provider-neutral; time-of-day agnostic). Content migration emitted for downstream projects.
-
New skill: retrospective — /pk-retro generates post-release blameless retrospectives (4 signals: release_summary, timeline, workitems, drift; dual-emit Artifact+LogEntry; --auto-workitems for proposed follow-ups; --verbose for full narrative including Appendix A raw signal dumps). See BACK-20260420_1340-LoyalFrog-add-pk-retro-skill.
-
feat(pk-doctor): new health-check aggregator skill + /pk-doctor slash command (Phase 1). Detect-only by default; 4 checks: schema+filename validation against src/context/schemas/, sharding (logs YYYY/MM, migrations state-bucket), stale pending migrations, src/context drift. --fix/--fix-all opt-in; fixes route through existing MCP write tools (no hand-edits). Each run emits a doctor.report LogEntry via event-log MCP. See DEC-20260420_1631-WiseGarnet and BACK-20260420_1631-ProudGlade.
-
feat(migration-management): new MCP server exposing 5 tools
(fixes #9).
list_migrations,get_migration,start_migration,
apply_migration(with implicit-start when called from pending),
andreject_migration. Each write-side tool stamps the appropriate
timestamp (started_at/applied_at/rejected_at), moves the
Migration file betweenpending/,in-progress/, andapplied/
subdirectories, refreshescontext/migrations/INDEX.md(preserving
the Applied-table Notes column and the## CLI Migrationstail
section), and writes amigration.*event via the side-effect log
helper. Rejected migrations park underapplied/and are listed in
a dedicated## RejectedINDEX.md section. Adds
spec.started_atto the Migration schema (optional,
backward-compatible). See
DEC-20260420_1342-WarmClover(shape) and
DEC-20260420_1353-ProudReef(5 refinements).