All notable changes to processkit are documented here. Versions follow Semantic Versioning.
v0.27.1 is a patch release that clears derived-project health
warnings discovered during pk-resume, resolves outstanding
doctor/release hygiene issues, and keeps gateway-mode MCP configuration
quiet.
- Fixed
pk-doctorsensitive_databriefing examples so the checker no longer reportssensitive-data.url-credentialagainst its own non-secret guidance text. Closes #64. - Fixed
pk-doctorsensitive_datafalse positives for documented placeholders, processkit timestamp/link examples, lexical-token helper code, and TeamMember PII that explicitly opts into committed identity fields. Closes #65. - Added
sqlite-vecto thepk-doctorMCP wrapper dependencies so the wrapper runtime matches the doctor subprocess and no longer reports missing semantic-index support. Closes #66. - Fixed
preauth_appliedso managed gateway-mode projects treatmcp__processkit-gateway__*as covering proxied per-skill processkit tools for both Claude and Codex. Closes #67. - Confirmed AGENTS.md hygiene preserves project-local
pk-commandsvalues while validating the command schema. Closes #68. - Resolved pending/applied migration hygiene by applying the active migration, archiving old CLI migration briefings, and archiving applied Migration entities through processkit-owned archive paths. Closes #69.
- Reclassified absent supply-chain policy as informational advisory until a project opts into enforcement. Closes #70.
uv run context/skills/processkit/pk-doctor/scripts/doctor.py --no-loguv run context/skills/processkit/pk-doctor/scripts/test_doctor.pyuv run context/skills/processkit/release-audit/scripts/release_audit.py --jsonuv run scripts/smoke-test-servers.py
v0.27.0 is a minor release that expands repository and runtime cleanup planning for derived projects and fixes the supply-chain command projection drift reported after v0.26.18.
- Extended
runtime-prunewith provider-neutral cleanup scopes forrepo-artifacts,tool-caches,action-artifacts,release-assets, andpackage-registry. - Added provider-adapted external cleanup runbooks for GitHub, GitLab,
Codeberg, Forgejo, Gitea, and generic/unknown forges. Each runbook
now reports
required_env,inventory_command,dry_run_command,apply_command, andspace_estimateso a derived-project agent can advise before deletion and run the approved command when it has sufficient credentials. - Added regression coverage for local artifact/cache allowlists, provider-neutral remote scopes, and GitHub/GitLab runbook adaptation.
- Documented
runtime-pruneas the canonical cleanup/space-recovery skill for local generated artifacts, tool caches, container cleanup planning, CI/action artifacts, release assets, and package/container registry versions. - Remote cleanup remains outside MCP direct execution:
plan_pruneproduces concrete dry-run/apply commands, whileapply_prunereturns host-action evidence for provider-owned scopes.
- Fixed
/pk-supply-chaincommand metadata so its commandargument-hintmatchesmetadata.processkit.commands[].argsin bothcontext/andsrc/context/. - Removed a stale tracked Codex command projection that caused
commands_consistency.agent-only-commanddrift.
python3 -m py_compile src/context/skills/processkit/runtime-prune/mcp/server.py src/context/skills/processkit/runtime-prune/scripts/test_runtime_prune.pyuv run --with pytest --with mcp pytest -q src/context/skills/processkit/runtime-prune/scripts/test_runtime_prune.pyuv run scripts/smoke-test-servers.pybash scripts/check-src-context-drift.sh --release-deliverableuv run context/skills/processkit/release-audit/scripts/release_audit.py --tree=src-context --repo-root .
v0.26.18 is a patch release that closes MCP repair-surface gaps for derived projects and hardens process-instance creation.
- Added
workitem-management.update_workitemfor scoped WorkItem repairs, includingprocess_definition_artifact. - Added
binding-management.update_bindingfor scoped Binding repairs, including contract-bearingconditionsupdates. - Added
gate-management.update_gatefor guarded Gate definition repairs, withforce=Truereserved for explicit emergency updates after evaluation history exists. - Added focused regression tests for WorkItem process instances, Binding repairs, Gate repairs, and eval-gate partial-write behavior.
- Fixed
create_process_instanceso it persistsprocess_definition_artifactimmediately and no longer treats short titles or step titles as invalid slug summaries. - Fixed
get_workitemto include fullspecplus process-instance and process-step fields in its response. - Fixed
codify_evalso Gate validation happens before writing the eval-spec Artifact, avoiding stranded partial creations. - Added pk-doctor repair guidance for v2 contract findings that can now be fixed through MCP tools instead of hand-editing entity files.
python3 -m py_compile context/skills/processkit/binding-management/mcp/server.py context/skills/processkit/gate-management/mcp/server.py context/skills/processkit/eval-gate-authoring/mcp/server.py context/skills/processkit/workitem-management/mcp/server.py context/skills/processkit/pk-doctor/scripts/checks/v2_contracts.pyuv run --with mcp --with pyyaml --with jsonschema context/skills/processkit/binding-management/scripts/test_binding_management.pyuv run --with mcp --with pyyaml --with jsonschema context/skills/processkit/gate-management/scripts/test_gate_management.pyuv run --with mcp --with pyyaml --with jsonschema context/skills/processkit/eval-gate-authoring/scripts/test_eval_gate_authoring.pyuv run --with mcp --with pyyaml --with jsonschema context/skills/processkit/workitem-management/scripts/test_workitem_management.pyuv run context/skills/processkit/pk-doctor/scripts/test_doctor.pyuv run context/skills/processkit/pk-doctor/scripts/doctor.py --category=v2_contracts --jsonuv run scripts/smoke-test-servers.pyuv run context/skills/processkit/release-audit/scripts/release_audit.py --tree=both --repo-root .bash scripts/check-src-context-drift.sh --release-deliverable
v0.26.17 is a patch release that adds the supply-chain audit surface and tightens privacy/security advisory checks for derived projects.
- Added
supply-chain-auditwith/pk-supply-chain, aprocesskit-supply-chain-auditMCP server, offline npm lockfile inventory, license policy classification, JSON reporting, and CycloneDX-like SBOM export. - Added opt-in supply-chain Phase 2 probes for local
npm auditandnpm outdatedorchestration, plus Phase 3 supplier-quality advisory signals derived from local dependency metadata. - Added pk-doctor
supply_chaincoverage for manifest/lockfile inventory, missing project supply-chain policy, license risk, vulnerability signals, outdated signals, and supplier-quality advisories. - Added pk-doctor
sensitive_datacoverage with deterministic secret/PII patterns plus agent-facing deterministic and probabilistic briefing examples.
- Added release-process guidance requiring root
LICENSEcoverage in release tarballs, GitHub release assets, and the shipped release process template. - Added a README license notice stating the maintainers' intent that the MIT License applies retroactively to historical repository commits, tags, and release artifacts unless a file states otherwise.
python3 -m py_compile context/skills/processkit/supply-chain-audit/scripts/supply_chain_audit.py context/skills/processkit/supply-chain-audit/mcp/server.py src/context/skills/processkit/supply-chain-audit/scripts/supply_chain_audit.py src/context/skills/processkit/supply-chain-audit/mcp/server.pyuv run context/skills/processkit/supply-chain-audit/scripts/test_supply_chain_audit.pyuv run context/skills/processkit/pk-doctor/scripts/test_doctor.pyuv run context/skills/processkit/pk-doctor/scripts/doctor.py --category=supply_chain --jsonuv run context/skills/processkit/release-audit/scripts/release_audit.py --tree=both --repo-root .bash scripts/check-src-context-drift.sh --release-deliverable
v0.26.16 is a patch release that hardens TeamMember privacy defaults so derived projects do not commit ambient human identity data by default.
- Human TeamMember creation and update now store repo-visible identity as
alias-only metadata by default: the committed display name is the slug,
and
email/handleare dropped unless the caller explicitly passesallow_committed_pii=true. - The human TeamMember template now uses a generic
human-useralias, disables memory and export by default, and omits personal contact placeholders. - Team-manager guidance now states that humans must not be auto-created from ambient host, git, or harness identity.
- Added a
team.privacy.committed_piiconsistency warning, surfaced through pk-doctor'steam_consistencycategory, for legacy human TeamMembers that still contain repo-visible personal identity fields without explicit opt-in.
python3 -m py_compile context/skills/processkit/team-manager/mcp/server.py context/skills/processkit/team-manager/scripts/consistency.py context/skills/processkit/pk-doctor/scripts/checks/team_consistency.pyuv run --with pyyaml --with jsonschema --with pytest --with mcp pytest context/skills/processkit/team-manager/scripts/test_team_manager.py -quv run --with pyyaml --with jsonschema --with pytest --with mcp pytest src/context/skills/processkit/team-manager/scripts/test_team_manager.py -quv run context/skills/processkit/pk-doctor/scripts/doctor.py --category=team_consistencybash scripts/check-src-context-drift.sh --release-deliverable
v0.26.15 is a patch release that resolves the latest downstream pk-doctor policy issues without adding installer-specific coupling.
- Classified legacy runtime Migration IDs (
MIG-RUNTIME-*andMIG-RUNTIME-DRIFT-*) as historical runtime-producer filenames so pk-doctor reports them as INFO/non-actionable instead of persistent mixed filename-policy WARNs. Closes #62. - Kept Binding filename policy strict while making mixed Binding
filename warnings more actionable: timestamped
role-slot-fillBindings are called out explicitly, and the advice now requires a data-fix Migration that renames files, updatesmetadata.id, and rewrites entity plus LogEntry references. Closes #60. - Confirmed the MCP manifest responsibility boundary remains in processkit release packaging; installer preservation is tracked separately outside processkit. Closes #61.
uv run context/skills/processkit/pk-doctor/scripts/test_doctor.pyuv run context/skills/processkit/pk-doctor/scripts/doctor.py --category=entity_storage_hygiene --jsonuv run context/skills/processkit/pk-doctor/scripts/doctor.py --category=context_hygiene --jsonpython3 -m py_compile context/skills/processkit/pk-doctor/scripts/checks/entity_storage_hygiene.py context/skills/processkit/pk-doctor/scripts/checks/context_hygiene.py src/context/skills/processkit/pk-doctor/scripts/checks/entity_storage_hygiene.py src/context/skills/processkit/pk-doctor/scripts/checks/context_hygiene.pybash scripts/check-src-context-drift.sh --release-deliverable
v0.26.14 is a patch release that closes the TeamMember runtime dispatch gap and hardens derived-project reconciliation paths reported by pk-doctor.
- Added first-class TeamMember runtime launch/status tools:
launch_team_member,launch_workitem_assignee,get_team_member_runtime,list_team_member_runtimes, andstop_team_member_runtime. Runtime records persist separately from TeamMember and WorkItem state atcontext/team/runtime-sessions.jsonand include harness, provider/model/effort, write scope, MCP/context write policy, runtime state, and an opaque runtime handle. Closes #59. - Added harness dispatch payloads for TeamMember launches. Claude
payloads refresh/use
.claude/agents/<slug>.mdand returnsubagent_type; Codex, Aider, and OpenCode receive explicit outer-harness dispatch requests with resolved TeamMember identity and scoped write policy.
- Added canonical pk-doctor reconciliation for schema-invalid or
filename-drifted append-only LogEntries by emitting append-only
logentry.correctedrecords instead of requiring direct mutation. - Added canonical pk-doctor reconciliation for root-level CLI migration briefing files that are not Migration entities, moving uncompleted briefings out of the Migration entity lifecycle tree while keeping completed briefings as historical notes.
uv run --with pyyaml --with jsonschema --with pytest --with mcp pytest context/skills/processkit/team-manager/scripts/test_team_manager.py -quv run --with mcp --with pyyaml --with jsonschema --with httpx --with sqlite-vec --with pytest pytest context/skills/processkit/processkit-gateway/scripts -qpython3 -m py_compile context/skills/processkit/team-manager/mcp/server.py src/context/skills/processkit/team-manager/mcp/server.pyPYTHONDONTWRITEBYTECODE=1 uv run context/skills/processkit/pk-doctor/scripts/doctor.py --jsonuv run context/skills/processkit/release-audit/scripts/release_audit.py --tree=bothbash scripts/check-src-context-drift.sh --release-deliverableUV_CACHE_DIR=/tmp/uv-cache PYTHONDONTWRITEBYTECODE=1 uv run scripts/smoke-test-servers.py
v0.26.13 is a patch release that hardens recent fixes with regression coverage and keeps processkit guidance separated from aibox host orchestration.
- Kept aibox host orchestration out of processkit skills, commands, and
MCP output so derived projects receive pk-doctor guidance inside the
container without being told to run
aibox doctor.
- Added pk-doctor regression coverage for
v1_entity_drift,runtime_health, and historicalid_vocabularyactionability. - Added a
processkit-diff.shregression test for migrationaffected_filesentries with new, changed, and removed upstream files. Covers #48.
uv run context/skills/processkit/pk-doctor/scripts/test_doctor.pyuv run src/context/skills/processkit/pk-doctor/scripts/test_doctor.pyuv run --with pytest pytest scripts/test_processkit_diff.py -qbash -n scripts/processkit-diff.shgit diff --check
v0.26.12 is a patch release that adds guarded repository reconciliation as a first-class processkit skill and exposes it through direct MCP plus gateway mode.
- Added
repo-managementwith/pk-repo-reconcileand aprocesskit-repo-managementMCP server for guarded repository reconciliation across local git state, issues, change requests, commits, and pushes. The provider model detects GitHub, GitLab, Gitea, Forgejo/Codeberg, Bitbucket Cloud, Azure DevOps, and SourceHut, with GitHub remote issue/PR mutation backed bygh. - Added a
runtime_healthpk-doctor category for container-local aibox runtime probes: lnav availability, sqlite-vec import/load health, Codex bubblewrap/user-namespace smoke checks, PID 1 hygiene, cgroup and process pressure, PowerKit image/status-plugin files, and runtime-home write probes. Closes #54.
- Made
/pk-doctorremediation-first in the skill and command guidance: agents now resolve ERROR, WARN, and actionable INFO findings by default, while info-only/dry-run/report-only modes require an explicit user request. - Made
/pk-resumeresolve active pending/in-progress migrations before writing the briefing by default, with confirmation reserved for destructive, ambiguous, policy-sensitive, or conflicting migrations.
v0.26.11 is a patch release that clears the remaining derived-project pk-doctor false positives and makes runtime-prune usable for low-risk in-container cleanup without requiring the aibox CLI.
- Accepted gateway MCP mode in pk-doctor preauth checks. Codex and
Claude configurations that intentionally expose only the
processkit-gatewayproxy now satisfy the per-skill processkit MCP preauth surface. Closes #52. - Derived MCP drift checks from the shippable skill tree. pk-doctor
MCP-config and server-header drift checks now scan both dogfood
context/and shippedsrc/context/skill trees, using consumer-facing paths for comparison so source-only shipped skills do not report false drift. - Allowed runtime-prune to clean low-risk allowlist targets directly.
runtime-homeandbuild-cacheapply paths now remove only explicit processkit-owned cache/build targets after confirmation, while containers, companion state, and agent worktrees still delegate toaibox prune. Closes #53. - Matched the current aibox prune CLI shape. Delegated runtime-prune
commands now use
aibox prune <scope> --dry-run|--yesinstead of stale repeatable--scopeand--jsonarguments.
pk-doctor: 0 errors, 0 warnings, 0 actionable infospk-release-audit --tree=bothuv run scripts/smoke-test-servers.pyuv run context/skills/processkit/pk-doctor/scripts/test_doctor.pyuv run src/context/skills/processkit/pk-doctor/scripts/test_doctor.pyuv run --with pytest --with 'mcp[cli]>=1.0' pytest -q src/context/skills/processkit/runtime-prune/scripts/test_runtime_prune.py
v0.26.10 is a patch release that clears false-actionable pk-doctor findings after the v0.26.9 preauth fix and hardens ID token reservation.
- Downgraded historical lexical-token collisions to non-actionable info. Existing timestamp/word-pair shorthand collisions now report as historical context instead of open migration work, while new ID generation continues to avoid reusing reserved lexical tokens. Closes #51.
- Reserved lexical tokens across all ID generation paths.
id-management.generate_id()and the shared processkit ID helper now reserve every lexical token already present in the target kind, so pair, intent, and generic ID generation all avoid ambiguous reuse. - Stopped rejected migrations from keeping archive hygiene
actionable. The pk-doctor applied-migration archive check now counts
only
state = appliedmigration records, so rejected records can stay available as explicit policy dispositions.
pk-doctor: 0 errors, 0 warnings, 0 actionable infospk-release-audit --tree=bothuv run scripts/smoke-test-servers.py- Focused pytest coverage for ID vocabulary and ID generation
v0.26.9 is a patch release that fixes the runtime-prune MCP preauthorization metadata shipped to downstream projects.
- Added runtime-prune to shipped preauth metadata. The release
src/contextpreauth spec now includesprocesskit-runtime-prunein Claude server preauthorization and both Claude/Codex MCP permission patterns. Closes #50. - Included source-only shipped MCP configs in the release manifest.
scripts/generate-mcp-manifest.pynow scans both dogfoodcontextand shippedsrc/contextskill trees, while keeping manifest paths in consumer-facingcontext/...form. - Stamped the MCP manifest with the release version.
scripts/build-release-tarball.shpasses the target release tag into the manifest generator so packaged manifests do not inherit a stale dogfoodaibox.lockversion.
scripts/check-src-context-drift.sh --release-deliverableuv run scripts/generate-mcp-manifest.pyuv run scripts/smoke-test-servers.pynpm --prefix docs-site run buildpk-release-auditonsrc-context
v0.26.5 is a patch release that restores strict schema and storage migration policy after the temporary v0.26.4 compatibility path.
- Strict schema vocabulary enforcement. pk-doctor no longer treats
legacy_known_*allowlists as accepted terminal vocabulary. Legacy WorkItem types, LogEntry event types, and other closed-vocabulary drift now require a data-fix Migration or an explicit schema migration. Closes #47. - Canonical TeamMember role IDs.
TeamMember.default_roleagain validates against canonicalROLE-<kebab-slug>IDs so migrated timestamp/word-pair role IDs surface as migration work. - Strict storage and actionability guidance. pk-doctor now reports
mixed root/sharded layouts, placeholder IDs, mixed filename policies,
and Binding filename drift as migration work. It no longer reports
accepted_policy_exceptionas a terminal machine-readable resolution. - Updated processkit instructions. Event-log, migration-management, pk-doctor, skill-gate, decision-record, and cross-reference guidance now point agents toward declared schema vocabulary and explicit migrations rather than permanent grandfathering.
uv run context/skills/processkit/pk-doctor/scripts/test_doctor.pyuv run src/context/skills/processkit/pk-doctor/scripts/test_doctor.pyuv run scripts/smoke-test-servers.pyuv run --script context/skills/processkit/release-audit/scripts/release_audit.py --tree=src-contextbash scripts/check-src-context-drift.sh --release-deliverable
v0.26.4 is a patch release that restores schema compatibility for existing aibox dogfood contexts after the v0.26.3 integration regression.
- Accepted declared legacy schema vocabularies in pk-doctor.
schema_vocabularynow treatslegacy_known_types,legacy_known_kinds, andlegacy_known_event_typesas valid historical values, while keeping the current closed vocabulary checks intact for unknown values. - Grandfathered known historical WorkItem and LogEntry values. The
shipped schemas now accept legacy
featureWorkItems and historical dogfood event types such asrelease.shipped,schema.migrated, andmigration.verified. Closes #46. - Relaxed
TeamMember.default_roleschema compatibility. Migrated role IDs with legacy datetime/word-pair shapes now validate against the shipped TeamMember schema.
uv run context/skills/processkit/pk-doctor/scripts/test_doctor.pyuv run src/context/skills/processkit/pk-doctor/scripts/test_doctor.pyuv run scripts/smoke-test-servers.pyuv run --script context/skills/processkit/release-audit/scripts/release_audit.py --tree=src-contextbash scripts/check-src-context-drift.sh --release-deliverableuv run context/skills/processkit/pk-doctor/scripts/doctor.py
v0.26.3 is a patch release that adds provider-neutral runtime pruning support for aibox-managed projects.
- Added the
runtime-pruneprocesskit skill and MCP server. Agents can now callanalyze_disk_usage,plan_prune, andapply_pruneto inspect runtime cache/worktree/container cleanup scopes, produce a dry-run plan, and delegate explicitly confirmed cleanup toaibox prune. Closes #45.
uv run --with mcp --with pyyaml --with pytest pytest src/context/skills/processkit/runtime-prune/scripts src/context/skills/processkit/skill-finder/scripts -quv run --with mcp --with pyyaml --with jsonschema --with httpx --with sqlite-vec --with pytest pytest src/context/skills/processkit/processkit-gateway/scripts src/context/skills/processkit/aggregate-mcp/scripts -quv run scripts/smoke-test-servers.pybash scripts/check-src-context-drift.sh --release-deliverable
v0.26.2 is a patch release that fixes the remaining GitHub issue queue for migration listing, doctor actionability, and session-start maintenance prompts.
- Added pk-doctor actionability metadata. Each doctor finding now
includes
action_required,action_kind,default_agent_action,requires_user_confirmation, andacceptable_resolution, with aggregateaction_totalssurfaced alongside severity totals. This prevents actionable INFO findings from disappearing behind a clean0 WARNgate. Closes #43. - Added pk-resume action-queue guidance. Status briefings now treat severity and actionability as separate queues, require dispositions for actionable doctor findings, and require explicit apply/reject/ inspect/defer decisions for pending or in-progress migrations. Closes #44.
- Imported the expanded skill catalog from the current aibox sync. The dogfood tree now includes the generated data-ai, design, devops, documents, engineering, and product skill families plus corresponding command adapters.
- Fixed lazy gateway serialization for empty structured list
results. Catalog-backed gateway tools now preserve FastMCP
structured output and return a text fallback when the unstructured
content list would otherwise be empty. This keeps
list_migrations(state="pending")valid when no Migration entities exist or when non-entity Markdown briefings sit inpending/. Closes #42. - Resolved and archived generated migration records. The invalid processkit/runtime migrations from the aibox sync were rejected with integrity reasons, the runtime drift migration was applied by preserving local edits, and all three terminal migration entities were archived via context-archiving.
python3 -m py_compile context/skills/_lib/processkit/gateway/lazy.py context/skills/_lib/processkit/gateway/registry.py src/context/skills/_lib/processkit/gateway/lazy.py src/context/skills/_lib/processkit/gateway/registry.pyuv run --with mcp --with pyyaml --with jsonschema --with httpx --with sqlite-vec --with pytest pytest context/skills/processkit/processkit-gateway/scripts/test_gateway.py context/skills/processkit/migration-management/scripts/test_migration_management.py -quv run --with mcp --with pyyaml --with jsonschema --with httpx --with sqlite-vec --with pytest pytest src/context/skills/processkit/processkit-gateway/scripts/test_gateway.py src/context/skills/processkit/migration-management/scripts/test_migration_management.py -qpython3 -m py_compile context/skills/processkit/pk-doctor/scripts/doctor.py context/skills/processkit/pk-doctor/scripts/checks/common.py context/skills/processkit/pk-doctor/mcp/server.py src/context/skills/processkit/pk-doctor/scripts/doctor.py src/context/skills/processkit/pk-doctor/scripts/checks/common.py src/context/skills/processkit/pk-doctor/mcp/server.pyuv run context/skills/processkit/pk-doctor/scripts/test_pk_doctor_json.pyuv run context/skills/processkit/pk-doctor/scripts/test_doctor.pyuv run src/context/skills/processkit/pk-doctor/scripts/test_pk_doctor_json.pyuv run src/context/skills/processkit/pk-doctor/scripts/test_doctor.pyuv run scripts/smoke-test-servers.py
v0.26.1 is a patch release focused on keeping status/reporting workflows small, making release health checks directly available through the gateway, and closing the local storage hygiene issues tracked in GitHub #39-#41.
- Added bounded result windows for database-backed MCP queries. Entity, search, event, error, TeamMember, RoleSlot, and ID-listing queries now clamp oversized limits; unfiltered event queries return a smaller default window and truncate long summaries to avoid noisy, token-heavy responses.
- Added active-only default migration listing.
list_migrations()now returns pending and in-progress migrations by default; historical applied/rejected migrations are available through explicit state filters. - Added
entity_storage_hygieneto pk-doctor. The new check audits local context storage policy, unmanaged host artifacts, legacy roots, lifecycle buckets, filename policy drift, placeholder timestamps, and documented TeamMember privacy/local-state exceptions. - Added the pk-doctor MCP config and gateway catalog exposure.
run_pk_doctoris now surfaced as a direct read-only MCP tool, andrun_pk_release_audit,list_entities, andget_entity_by_pathare present in the generated gateway catalog. - Expanded positive two-word ID naming pools. The default adjective and noun pools now provide 14,400 base combinations per kind before a collision suffix is needed.
pk-resume, standups, and status updates now check GitHub state. In GitHub-backed repositories they include open issues and PRs whenghis available, andpk-resumeincludes pk-doctor totals as part of the session-start health check.- Team command adapters were refreshed from the current source
skills.
.agents/skillsand.claude/skillsnow match the updated team-creator command bodies. - Local release workspace hygiene was tightened. Old diagnostics and
root-level
.gitignore.examplescaffolding were removed from the repository, and applied migration history was archived through the context archive workflow.
- Closed GitHub issues #39, #40, and #41. pk-doctor now separates local entity storage hygiene from template freshness and reports actionable storage drift without flagging documented flat or grandfathered layouts.
- Resolved pending local migrations. The hidden root-level
v0.25.8 -> v0.26.0Migration was applied through MCP and then archived with the rest of the applied migration history.
uv run context/skills/processkit/pk-doctor/scripts/test_doctor.pyuv run context/skills/processkit/pk-doctor/scripts/doctor.pygh issue list --state open --limit 20 --json number,title,url
v0.26.0 is a minor release that lands the GH-issue cluster (#17–#23, #31), the team-creator v2 epic (#20, decomposed into 5 sub-WorkItems), and lazy-import support for the aggregate MCP gateway.
RoleSlotprimitive (PR #27). New first-class entity kind that decouples the role/seniority axis from the identity axis. Adds five MCP tools (create_role_slot,get_role_slot,list_role_slots,fill_role_slot,close_role_slot) and a resolver hook onteam-manager.- Catalog-driven
pk-team-create(PR #28). Charter now readsarchetype-catalog-mapping.yamland writes RoleSlots instead of archetype Roles + Actors + role-assignment Bindings (Phase A cutover). Includesapply_migration_2139.pyidempotent backfill for existing projects. - Consultant TeamMember type + engagement window (PR #29).
team-member.yamlv1.1.0 → v1.2.0 addsconsultantenum,engaged_for,engagement_window, andauto_deactivate_on_scope_close;scope-managementauto-deactivates consultants on Scope archive. - Budget projection + drift detection in charter DECs (PR #30).
Chartering
DecisionRecordblocks include a budget projection;query_budget_driftsurfaces variance from snapshotted unit cost. recommended_team_member_slugandrecommended_model_classonroute_task(PR #24). PM-coordination domain groups resolved initially; engineering-role coverage extended to all 14 domain groups (branchfeat/wildpanda-p2-engineering-roles).v1_entity_penaltyre-rank infind_skill/ task-router (PR #24). Default 0.3 multiplicative penalty down-weights v1 entities when a v2 successor exists. Applied toquery_entities,get_entity,search_entities, and now alsosemantic_search_entities+hybrid_search_entities(branchfeat/warmoak-semantic-hybrid-v1-penalty).v1_entity_driftandteam_member_exportschecks in pk-doctor (PR #24). Surface stale v1 frontmatter outside append-only buckets, and missing.claude/agents/<slug>.mdexports for active members (withexportable=falseopt-out for human owners).- Slim per-turn compliance hook + harness knobs documentation
(PR #24). UserPromptSubmit emits a 14-line slim block; SessionStart
emits the full contract. New
docs/harness-claude-code.md. - Lazy-import mode for
aggregate-mcp(branchfeat/gh31-aggregate-mcp-lazy, gh#31). Opt-in viaPROCESSKIT_MCP_LAZY=1orPROCESSKIT_MCP_MODE=lazy_catalog; defers per-skill module imports until first tool call. 1.58× cold-start speedup (median 422ms → 268ms). ReusesGatewayRegistryinfrastructure shipped via BACK-ThriftyWren.
- Compliance contract rewritten with positive-imperative balance
(PR #24).
compliance-contract.mdnow 50 lines, 6 sections, 10 positive : 4 negative imperatives. Includes a sub-agent-dispatch clause (route_taskbefore anyAgent/Taskcall) and BEGIN/END HOOK markers for slim hook injection. pk-team-createno longer writes archetype Roles, Actors, or role-assignment Bindings (PR #28). Behavioral cutover — derived projects on v0.26.0+ should not see these entity kinds emitted at charter time. Existing projects can backfill via Migration20260509_2139_0.25.8-to-0.26.0.pk-doctorSKILL.md documents all 16 check modules (PR #24). Previously only 4 were documented; the other 12 (including the newv1_entity_driftandteam_member_exports) now appear with severity,--fixpaths, and exception notes.- Migration schema relaxed:
spec.requiredreduced from[source, from_version, to_version, state]to[source, state].from_version/to_versionremain enforced forsource-upgrademigrations byaibox syncat generation time; the relaxation unblocks validation ofschema-extensionmigrations likeaibox-lockbackfills which document an internal schema bump. release-auditexemptsmigrations/applied/andmigrations/rejected/from v1 apiVersion errors, matching thev1_entity_driftexception in pk-doctor. Rewriting historical applied migrations would falsify the audit trail.pk-doctorteam_member_exportscheck honorsexportable=false. Human owners (and other non-exportable members) are no longer flagged as missing a.claude/agents/<slug>.mdexport.pk-doctorpreauth_appliedcheck is gateway-mode aware. Whenprocesskit-gatewayis the only enabled MCP server (per_processkit_managed_keys.enabled_servers), per-skill servers are proxied through the gateway and no longer reported as missing fromenabledMcpjsonServers.
20260509_2139_0.25.8-to-0.26.0.md— Phase A additive cutover for the team-creator v2 entity model.apply_migration_2139.pyidempotent backfill; rollback feasible.
- Archived 9 applied migrations into
context/archives/2026/05/ARCHIVE-20260510_074047-migration-applied.tar.gz(8 runtime + 1 lock + 1 source-upgrade), per thecontext_hygienearchive recommendation. Originals retained inside the archive tarball with manifest + sha256.
v0.25.8 is a patch release that adds Xiaomi MiMo to model routing and teaches processkit release diffs how to emit downstream cleanup hints for renamed or removed skills.
- Added Xiaomi MiMo-7B-RL-0530 to the model roster. The
model-recommender now ships a
model-specartifact, quick-reference row, detailed profile, and MCP score projection for Xiaomi's open-weight MiMo reasoning checkpoint. - Added cleanup hints to
processkit-diff.sh. JSON and TOML output now includecleanup_hintsfor removed upstream-managed skill files, renamed skill directories, replacement paths, removed command names, and generated command adapters that downstream installers should remove.
- Migration reference docs now describe installer cleanup semantics.
The migration reference documents how sync tools should interpret
cleanup_hints, includingremove_skill_directoryandreplacement_path. - Dogfood runtime migration state is current. The local pending runtime-home migration was applied and the processkit index now reports zero pending migrations.
- Fixed
processkit-diff.shunder non-GNU awk. Provenance parsing no longer depends on GNU awk'smatch(..., array)extension, so the diff script works undermawk. - Closed GitHub issue #16. Removed and renamed skill cleanup metadata is now machine-readable for downstream sync implementations.
bash -n scripts/processkit-diff.shuv run --with pyyaml --with pytest --with mcp pytest context/skills/processkit/model-recommender/scripts/test_query_models_filters.py context/skills/processkit/model-recommender/scripts/test_resolver.py context/skills/processkit/model-recommender/scripts/test_default_bindings_coverage.pynpm --prefix docs-site run builduv run scripts/smoke-test-servers.pyuv run context/skills/processkit/pk-doctor/scripts/doctor.py
v0.25.7 is a patch release that improves processkit routing, semantic index observability, and model planning for Codex-heavy agent workflows.
- Added command-aware task routing.
task-router.route_tasknow scorespk-*command projections as first-class candidates, accepts optionalintent_signals, returns command routes for high-signal workflows such aspk-release-audit, and surfaces multi-route candidates for compound requests. - Added runtime-capacity planning guidance.
model-recommendernow exposesplan_runtime_capacity(...)and adds capacity guidance toresolve_model(...)when callers provide subscription/quota observations. - Added GPT-5.3-Codex-Spark to model routing. Spark is now modeled
as an OpenAI Codex subscription candidate and ranked in the
code-fastmodel profile for bounded low-latency agent work.
- sqlite-vec handling is now observable and non-destructive by default. The index reports sqlite-vec load diagnostics and vector row counts, while preserving existing vector tables unless explicit repair is requested.
- MCP configs for the gateway and index server now launch as PEP 723
scripts. This makes their declared
sqlite-vecdependency active in the MCP runtime. - Provider-equivalent fast Codex routing now prefers Spark over
o4-minifor Haiku-class OpenAI fallbacks.
uv run --with pyyaml --with pytest --with mcp pytest context/skills/processkit/task-router/scripts/test_task_router.py -vuv run --with pyyaml --with pytest --with mcp --with jsonschema pytest context/skills/processkit/processkit-gateway/scripts/test_gateway.py -vuv run --with pyyaml --with pytest pytest context/skills/processkit/model-recommender/scripts/test_resolver.py -vuv run scripts/smoke-test-servers.pyuv run context/skills/processkit/pk-doctor/scripts/doctor.py --no-loguv run --script context/skills/processkit/release-audit/scripts/release_audit.py --tree=both
v0.25.6 is a patch release that makes processkit command exposure
provider-neutral and closes the remaining dogfood v2 backlog audit gap.
Slash-capable harnesses continue to receive pk-* command projections,
while non-slash harnesses receive matching natural-language skill
adapters.
- Added provider-neutral command projection for
pk-explain-routing. The model-recommender command now has a canonical command file, Claude slash projection, Codex skill shim, and MCP metadata entry.
- Processkit command metadata now treats
pk-*as mandatory.pk-doctorvalidates canonical command files, Claude projections, Codex skill projections, argument hints, and projection-only command drift across all processkit skills. - Renamed team-creator commands into the reserved namespace.
The former
team-create,team-rebalance, andteam-reviewcommand files are now projected aspk-team-create,pk-team-rebalance, andpk-team-review. - Dogfood backlog entities were restamped to the v2 API contract.
The live
context/tree no longer carries legacy v1 backlog entities that made full release-audit output noisy outside the shippedsrc/context/boundary.
pk-doctorreported0 ERROR / 0 WARN / 19 INFO.pk-release-audit --tree=contextreported0 ERROR.pk-release-audit --tree=src-contextreported0 ERROR / 0 WARN.uv run scripts/smoke-test-servers.pypassed across the MCP smoke suite.uv run context/skills/processkit/pk-doctor/scripts/test_doctor.pypassed.npm --prefix docs-site run buildpassed.
v0.25.5 is a patch release that makes active TeamMember interlocutor sessions honest about the difference between processkit identity and the already-running harness model. It adds runtime binding reporting, conservative Claude adapter model emission, and explicit subagent MCP lifecycle guardrails.
- Added active interlocutor runtime binding reporting.
team-manager.get_interlocutor_runtime_bindingreturns the configured TeamMember, the resolved model-recommender candidate after provider gates, harness capability mode, observed runtime fields supplied by the caller, and informational mismatch status. - Added opt-in resolved Claude adapter model policy.
export_claude_subagent(..., model_policy="resolved")emits a Claude model and effort only when processkit routing resolves to an Anthropic candidate; the default remainsmodel: inherit.
- Session identity setup now records capability-negotiated binding
policy.
set_active_interlocutorkeeps TeamMember identity and memory growth stable while making runtime control an explicit harness capability rather than an implicit promise. - Status and agent-management guidance now surface model/runtime mismatch and subagent MCP instability. Session start should display resolved runtime vs observed harness runtime when available, and MCP writes stay in the primary session until subagent server lifecycle is proven stable.
56 passedfor team-manager coverage incontext/.56 passedfor team-manager coverage insrc/context/.uv run scripts/smoke-test-servers.pypassed across the MCP smoke suite.pk-doctor --no-logreported0 ERROR; the only warning was the existingarchive.applied-migrationsadvisory.
v0.25.4 is a patch release that fixes the gateway stdio proxy startup path used by daemon-first MCP clients. A stdio-only harness can now point at a localhost streamable HTTP gateway URL and let processkit start the matching daemon when no listener is present.
- Gateway stdio proxy now owns local daemon startup by default.
stdio-proxy --url http://127.0.0.1:PORT/mcpstarts the matchingserve --transport streamable-httpdaemon when the port is not already listening. - Added an explicit external-supervisor escape hatch.
stdio-proxy --no-start-daemonkeeps the previous behavior for harnesses or service managers that already own daemon lifecycle.
- Fixed MCP client startup timeouts for daemon-backed gateway configs.
A generated config that invokes
processkit-gatewaythroughstdio-proxyno longer fails solely because the HTTP daemon has not already been launched. - Fixed failed daemon auto-start cleanup. If the spawned local daemon never becomes ready, the proxy now terminates that child process before reporting the startup failure.
30 passedfor gateway proxy and CLI coverage insrc/context/.30 passedfor gateway proxy and CLI coverage incontext/.uv run scripts/smoke-test-servers.pypassed across the MCP smoke suite.pk-doctor --category=mcp_gateway --no-logpassed with0 ERROR / 0 WARNfor both source and shipped paths.
v0.25.3 is a patch release that makes role and team-member model
routing portable across harnesses. Concrete provider/model descriptions
remain timestamped Artifact(kind=model-spec) deliverables, while
roles, actors, team members, and default assignments now bind to
provider-neutral Artifact(kind=model-profile) artifacts.
- Added provider-neutral model-profile artifacts. processkit now
ships nine
Artifact(kind=model-profile)deliverables covering general, coding, research, writing, and governed routing profiles. Model-profile filenames deliberately avoid provider and model names; their content carries ranked candidateArtifact(kind=model-spec)references. - Added model-profile schema support. Artifact schemas now recognize
model-profile, binding schemas allow model-assignment targets to be eitherModelProfileorModelSpecartifacts, and role schemas exposedefault_model_profilewhile keeping legacydefault_modelcompatibility. - Added a model-profile migration helper.
migrate_model_profiles.pycreates the shipped profile artifacts and rewrites role/team-member model-assignment bindings from concrete model specs to profile targets. - Added runtime provider access gates to the resolver. The resolver
now expands model profiles into concrete model candidates only after
applying runtime access constraints from user config,
aibox.tomlmodel providers, and native harnesses such as Codex, Claude, Gemini, Aider, Continue, Cursor, OpenCode, and Hermes. - Added
available_providersto model-recommender configuration. MCP callers can declare which providers are callable in the current environment without hard-coding a provider into role or team-member bindings. - Added pk-doctor checks for routing portability.
pk-doctornow flags provider/model names in model-profile filenames, missing profile candidate model specs, and Role/TeamMember bindings that directly pin a ModelSpec withoutconditions.direct_model_pin: true.
- Role and team-member bindings now target model profiles. Shipped default bindings, including Cora's default, no longer point directly to OpenAI, Anthropic, Google, or other concrete model artifacts.
- Concrete model specs remain provider/model named. The release keeps
the v0.25.2 decision that
ModelSpecartifacts map directly to provider/model families and therefore may include provider/model names in their filenames. - Default binding documentation now describes two layers. Role/team-member defaults bind to profile artifacts; model profiles list provider-specific model-spec candidates; project overrides may still use direct ModelSpec pins when intentional.
- The release deliverable boundary accepts model-profile artifacts.
scripts/check-src-context-drift.sh --release-deliverablenow permits timestampedModelProfileartifacts insrc/context/artifacts/. - Team and model-recommender docs now define harness portability. The docs make aibox responsible for surfacing runtime provider access, while processkit owns provider-neutral defaults and local fallback checks.
- Removed dogfood-specific provider bias/veto bindings from the deliverable. The old processkit-local Codex/OpenAI preference and Anthropic veto bindings no longer ship to derived projects.
- Fixed Cora and role defaults under non-Codex harnesses. Changing
aibox.tomlfrom Codex to Claude, Gemini, OpenCode, Hermes, or another supported harness no longer leaves role/team-member defaults bound to a provider the harness cannot call. - Fixed pk-doctor's blind spot around direct model pins. The doctor now distinguishes portable Role/TeamMember profile bindings from explicit direct model pins.
- Fixed resolver explanations for profile-expanded candidates.
Resolved candidates now carry
profile_idandprofile_rank, making it visible which neutral profile produced the concrete model choice.
pk-doctor --no-logpassed with0 ERROR / 0 WARN.scripts/check-src-context-drift.sh --release-deliverablepassed.release_audit.py --tree=src-contextpassed with0 ERROR / 0 WARN.35 passedfor resolver and default-binding coverage tests.21 passedfor model-recommender MCP filter tests.20 passedfor model migration tests.26 passedfor release-audit tests.uv run scripts/smoke-test-servers.pypassed across the MCP smoke suite.
v0.25.2 is a patch release that settles the v0.25 model-spec
projection and release-deliverable hygiene. It keeps model descriptions
as Artifact(kind=model-spec) entities, but aligns their IDs and
filenames with the timestamped Artifact convention used elsewhere in
processkit.
- Added timestamped model-spec artifacts to the shipped deliverable.
Model descriptions now ship under
ART-YYYYMMDD_HHMM-ModelSpec-<provider>-<family>.mdin bothcontext/artifacts/andsrc/context/artifacts/. - Added pk-doctor context-hygiene checks for model-spec naming.
pk-doctornow flags non-timestamped model-spec artifact IDs/files and model-assignment bindings that still target oldART-model-*artifact IDs. - Added
.gitignore.exampleto the release deliverable. The example gitignore guidance now ships undersrc/.gitignore.exampleinstead of existing only in the repository root.
- Model-assignment bindings now target timestamped model-spec
Artifacts. Shipped role/team/default model bindings now point at
Artifact(kind=model-spec)IDs instead of hidden JSON records or the short-livedART-model-*projection. - The model-recommender generator emits the canonical timestamped
model-spec IDs. Re-running
migrate_models.pyno longer recreates non-timestamped model artifact filenames. - The release boundary accepts only timestamped model-spec artifacts in
src/context/artifacts/. The drift guard now rejects other artifact shapes from the consumer deliverable. - Applied/rejected migration history is archived out of the live context. The dogfood context keeps archive manifests while removing migrated state from the active migration directory.
- Fixed pk-doctor blind spots around artifact hygiene. HTML sidecar
artifacts, suspicious
_0000artifact timestamps, and legacy model-spec artifact names are now surfaced bypk-doctor. - Fixed resolver compatibility after the model-spec rename. Current
bindings use timestamped artifact IDs, while legacy
MODEL-*andART-model-*inputs remain accepted for derived projects during migration. - Fixed context-archiving manifest serialization for datetime values. Archive creation can now serialize generated manifests that include datetime-like metadata.
pk-doctor --no-logpassed with0 ERROR / 0 WARN.scripts/check-src-context-drift.sh --release-deliverablepassed.release_audit.py --tree=src-contextpassed with0 ERROR / 0 WARN.20 passedfor model migration tests.29 passedfor resolver tests.uv run scripts/smoke-test-servers.pypassed across the MCP smoke suite.
v0.25.1 is a patch release for the model-recommender after the v0.25.0 gateway and v2 deliverable release. It updates the shipped model market roster, makes model lifecycle explicit, and adds fine-grained task suitability routing while preserving the existing R/E/S/B/L/G scoring contract.
- Added lifecycle metadata for model roster entries. Models now carry
active,legacy,deprecated,retired, orunverifiedstatus so processkit can distinguish “still offered but no longer top-ranked” from “not callable anymore.” This prevents older but useful provider models from disappearing from the roster merely because a newer model has taken the top recommendation slot. - Added 42 fine-grained task suitability classes. The roster now
scores models for concrete work types such as
architecture,debugging,code_review,summarization,rag,ocr,voice,bulk_generation,privacy_sensitive, andself_hosted_enterprise. These classes sit on top of the stable Reasoning, Engineering, Speed, Breadth, Reliability, and Governance dimensions. - Added task-class-aware MCP querying.
query_models()now acceptstask_class,min_task_suitability,require_task_suitability,lifecycle, andinclude_retired, allowing callers to ask for models that are suitable for a specific task without losing the existing dimension filters. - Added
list_task_classes()to model-recommender MCP. Callers can inspect the live task taxonomy and its dimension profile instead of hard-coding task-class names. - Added current-market model entries across major providers. The roster now includes new or refreshed entries for OpenAI GPT-5.5, GPT-5.2, GPT-5.2-Codex, Anthropic Claude Opus 4.7, Google Gemini 3 preview models, Mistral Medium 3.5 / Small 4 / Devstral 2, DeepSeek V4, Moonshot Kimi K2.6, Z.AI GLM-5/5.1, xAI Grok 4.20 and Grok 4.1 Fast, Meta Llama 4 Scout/Maverick, Qwen3 Coder, Cohere Command A, Amazon Nova 2 Lite, and NVIDIA Nemotron 3 Super.
- Model routing now separates availability from ranking. A model that
remains available through a provider API can stay in the roster as
legacyordeprecated; routing can still select it for cost, compatibility, privacy, or task-fit reasons. - Resolver tie-breaking now understands task classes.
resolve_modelacceptstask_hints.task_class,task_hints.task_classes,task_hints.min_task_suitability, andtask_hints.require_task_suitability. Suitability only reorders otherwise comparable candidates after binding layer/rank/provider precedence, so project and team model bindings remain authoritative. - Model migration helpers preserve lifecycle and task-suitability
metadata. The legacy
migrate_models.pypath maps lifecycle into version status and carries source URLs, model classes, and task suitability into generated model artifacts for compatibility. - The model-recommender documentation now documents lifecycle and task suitability explicitly. Workflow C clarifies that refreshes are additive and should not delete still-offered models; Workflow B now classifies tasks before applying the six-axis score.
- Corrected the previous roster-refresh assumption that “demote” meant remove. The shipped behavior now keeps offered models and lowers routing priority only through lifecycle/task-fit metadata.
- Corrected stale pricing/context metadata for several existing roster entries. Notable updates include GPT-5.5 API pricing/context, GPT-5/GPT-5 Pro legacy pricing, o3 pricing/context, Gemini 2.5 Flash pricing, and Kimi K2.6 API pricing.
- This remains a patch release because processkit is still pre-1.0 and
the change is additive for consumers: existing model IDs, the six
dimension filters,
model_classes, and user configuration continue to work. unverifiedentries remain visible only under the same conservative assumptions as_estimatedrecords; production routing can exclude them withinclude_estimated=False.- Provider pricing and model availability change quickly. The roster carries source URLs and should be refreshed again before making budget-critical decisions.
44 passedfor model-recommender query, migration, and default-binding tests.29 passedfor resolver tests.python3 -m py_compilepassed for model-recommender server, resolver, and migration helper.scripts/check-src-context-drift.sh --release-deliverablepassed.uv run scripts/smoke-test-servers.pypassed across the MCP smoke suite.
v0.25.0 is a breaking pre-1.0 minor release. It completes the
SmoothTiger/SmoothRiver v2 deliverable boundary, adds the new
provider-neutral processkit-gateway MCP entry point, removes legacy
first-class primitives from the shipped src/context/ surface, and
turns the release checks into executable gates. The release remains below
1.0 because processkit is still evolving its public compatibility
contract; consumers should read the breaking-change notes before
upgrading.
src/context/is now the release deliverable boundary. The shipped tree is validated as a consumer-facing package, not as a mirror of this repository's live dogfoodcontext/. Runtime project memory, generated logs, local decisions, and migration history remain in the consuming project'scontext/; only the versioned processkit primitives, skills, schemas, state machines, and release metadata ship fromsrc/context/.Metric,Model,Process,Schedule, andStateMachineare no longer shipped as first-class v2 entity primitives. Their schemas, shipped entity directories, and primitive asset schemas were removed fromsrc/context/. Existing projects may still keep those files as migration-source or project-local memory, but new processkit releases do not promise these directories or schemas as part of the v2 package contract.- Model assignments are no longer typed as
Modelentity bindings. Shipped model-assignment Binding files now reference model-recommender roster/profile identifiers directly and no longer carrytarget_kind: Model. Consumers that validated these bindings against the old first-classModelprimitive must update that logic. - Task-router process overrides are legacy-v1 compatibility data.
The
process_overridefield is retained for older derived projects, but the server now identifies it aslegacy-v1metadata. New v2 routing should rely on skill and tool routing rather than first-classProcessentities. - The release gate now rejects dogfood-only content in
src/context/.scripts/check-src-context-drift.sh --release-deliverablefails if the shipped tree contains local project memory, demoted primitive schemas, demoted entity directories, ortarget_kindreferences to removed primitives. This can break downstream packaging flows that assumedcontext/andsrc/context/were interchangeable.
- Added
processkit-gateway, a provider-neutral MCP gateway. The new gateway speaks standard MCP on the harness side and processkit's skill/entity/tool layer on the implementation side. It does not call Anthropic, OpenAI, or other provider APIs; harness-specific behavior remains limited to installer/config adapters. - Added gateway runtime helpers under
context/skills/_lib/processkit/gateway/. The library covers tool catalog loading, module loading, registry construction, session and permission helpers, transport helpers, daemon runtime wiring, lazy registration, and stdio proxy support. - Added gateway transports and modes. The gateway can run as direct
stdio (
serve --transport stdio), as a localhost streamable HTTP daemon (serve --transport streamable-http --host 127.0.0.1 --port 8000 --path /mcp), or throughstdio-proxy --url ...for harnesses that only support command-launched MCP servers. - Added lazy catalog support for lower idle memory. The gateway can
generate and consume
mcp/tool-catalog.jsonso it can list tool metadata without importing every backing MCP server at startup. Hot modules are loaded on first use and remain available through the gateway runtime. - Added gateway health and discovery tools.
list_gateway_toolsandgateway_healthexpose the gateway's registered source servers, imported tools, duplicate-name handling, and runtime mode for harness diagnostics. - Added gateway verification coverage. New tests cover direct
gateway registration, daemon runtime behavior, stdio proxy behavior,
and aggregate/gateway compatibility.
scripts/measure-mcp-gateway.pymeasures process count and tool coverage across granular, aggregate, gateway, and daemon-proxy modes. - Added v2 workflow and projection MCP surfaces. The release includes hook-inbox note-management helpers, process-instance and SEP handoff helpers, schedule and budget binding helpers, agent-card projection, eval-gate authoring, security policy projections, and v2 contract doctor checks.
- Added release-audit target selection. The release-audit script now
supports
--tree=context,--tree=src-context, and--tree=bothso local dogfood context and shipped release content can be audited under the right expectations. - Captured aibox follow-up responsibilities as internal processkit context. The handover covers installing the pinned release, supervising the gateway daemon, generating harness MCP config, exposing user-facing daemon/reset knobs, preserving provider neutrality, and implementing the optional harder reset path.
- Release packaging now enforces the deliverable boundary.
scripts/build-release-tarball.shruns the release-boundary guard and thesrc-contextrelease audit before building a tarball. A release artifact is no longer just a copy operation; it must pass the shipped package contract first. - pk-doctor drift checks now wrap the release-boundary guard. The
drift category reports whether
src/contextis a valid release deliverable, making the same invariant available during normal project health checks. - MCP manifest generation and drift checks were tightened. The MCP config manifest remains the installer-facing signal that aibox should re-merge generated harness MCP config even when the processkit version number has not changed.
aggregate-mcpremains as a compatibility bridge. It was updated to coexist withprocesskit-gatewayand keep unique tool names stable while qualifying duplicate helper names as<skill_slug>__<tool_name>.- Docs now describe the 25-server MCP surface. The MCP server
overview documents per-skill servers,
aggregate-mcp, the new gateway, direct stdio, streamable HTTP daemon mode, and stdio proxy mode. - Harness guidance now covers Claude Code, Codex, OpenCode, Hermes, Aider, and other MCP-capable clients. The guidance keeps processkit usable without aibox while documenting the integration points aibox can automate in managed devcontainers.
- v2 contract docs now explain demoted primitives and migration expectations. The docs make clear which old primitives are migration-source only and which v2 primitives remain durable shipped entities.
- SKILL documentation was brought up to the release-audit contract.
agent-card,eval-gate-authoring,security-projections,processkit-gateway, and release-audit-facing docs now include the required sections and clearer operational guidance. - The docs site now has a root route and modern Docusaurus markdown
hook configuration. This removes the
/processkit/navbar broken link warning and the deprecatedsiteConfig.onBrokenMarkdownLinkswarning during docs builds.
- Removed shipped
src/context/models/andsrc/context/processes/. These remain valid as project-local migration-source memory in a live consuming context, but they are no longer part of the released processkit v2 package. - Removed shipped demoted primitive schemas from
src/context/schemas/:metric.yaml,model.yaml,process.yaml,schedule.yaml, andstatemachine.yaml. - Removed shipped demoted primitive asset schemas from metrics-management, process-management, schedule-management, and state-machine-management.
- Removed
target_kind: Modelfrom shipped model-assignment Binding files. - Removed the docs primitive page for
Metricas a first-class shipped primitive.
- The normal upgrade path is still the existing migration flow. aibox should continue to generate and apply migrations as it does today.
- The proposed harder reset path is optional and belongs in aibox as an
explicit user-selected mode of
aibox applyoraibox reset. That flow should export project memory, bootstrap a freshcontext/tree from the new processkit release, re-import preserved entities with updated references/schema fields, and write an auditable migration record. - aibox should not re-create removed
Model,Process,Metric,Schedule, orStateMachinerelease schemas during sync. Existing local project files of those kinds should be treated as preserved migration-source memory or project-local content. - Harnesses can still use per-skill MCP servers directly. aibox is not a runtime dependency of processkit; it is the recommended installer, supervisor, and harness-config manager for managed devcontainers.
- Release-audit tests passed for both dogfood and shipped trees:
26 passed. - Gateway and aggregate MCP tests passed:
30 passed. scripts/check-src-context-drift.sh --release-deliverablepassed.release_audit.py --tree=src-contextpassed with0 ERROR / 0 WARN / 485 INFO.pk-doctor --category=drift --no-logpassed with0 ERROR / 0 WARN / 1 INFO.uv run scripts/smoke-test-servers.pypassed across the MCP server smoke suite.scripts/measure-mcp-gateway.py --format text --include-metadatareported the expected one-process gateway and daemon-proxy modes with130tools across23source servers.
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 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.
- 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 artifact metadata updates so callers can avoid restamping
freshness-sensitive
metadata.updatedvalues. - Restored the docs-site build after the v0.23.1 release line.
- 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.
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).
- change(release-audit): excludelist aibox CLI migration prose docs.
entity_fileswalker now skips*-to-*.mdandINDEX.mdundercontext/migrations/. Closes 16 A1 false-positives — these are aibox CLI prose, not Migration entities. Real Migration entities underpending/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 theteam-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).
- add(release-audit): 24 new pytest cases.
test_release_audit.pygainsTestMigrationProseSkipped(4 cases),TestTeamMemberLayout(3 cases), andTestLayerConditional(2 cases) covering the three validator changes above. Plus+203lines total of fixture and helper plumbing.
- 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.
- 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 are
entity.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-doctor
drift.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 byDEC-20260426_1859-MightyRobin.
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.
- 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 ondata_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 onprocesskit-skill-finder. Signature:catalog(category, tag, keyword, columns, sort_by, output)withoutput ∈ {"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.
- 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 onlycreate_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.pyadopts 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_privacyfromModel.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 new
catalog()tool, trigger phrases, and example invocations.
- fix(event-log): log_event MCP now validates required
actorfield (RapidDaisy).BACK-20260425_1755—log_event()callsschema.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.layervalues change.
- chore(owner-profiling): reference files complete (BraveMeadow).
BACK-20260410_1049— verifiedowner-profiling/references/observable-signals.md(105 lines, 37 signals × 6 categories) andinterview-protocol.md(128 lines) are present, complete, spec-compliant againstNOTE-20260410_1046-StoutSwan, and mirror-clean. No file changes.
- 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: run
git statusafter everyaibox sync. - pk-doctor green at release time: 0 ERROR / 2 WARN / 11 INFO. The
two WARNs are the unchanged
context/.processkit-provenance.tomldrift (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.
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.
- feat(schema): RoyalFern Model schema fields.
context/schemas/model.yamlgains five optional fields onspec_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), anddata_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 orzero/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.
- chore(models): backfill RoyalFern fields across all 34 model entities.
Every
MODEL-*.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).
- 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 for
context/.processkit-provenance.toml— known v0.22.0 stamping bug acknowledged in aibox v0.20.0 release notes and tolerated by the host).
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.
- feat(pk-doctor):
migration_integritycheck (CleverRiver). New check flags two malformed-migration patterns:same-version-with-content(a Migration whosefrom_version == to_versionbut whoseaffected_groups/affected_filesare non-empty) andaffected-files-empty(table rows present in the body but theaffected_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_sha256semantics are unchanged (still computed overmcp-config.jsonfiles only — aibox#54 contract preserved). PerDEC-20260424_0127-QuickPine(SharpBrook split: BraveBird shipped the schema-reload half in v0.21.0; RapidSwan ships the dep-drift half here). ClosesBACK-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.
- chore(aibox): host CLI 0.18.7 → 0.19.2 + record
mcp_config_hashin lock file. Bumped the harness CLI;aibox.locknow carries anmcp_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.
- 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
required
actorfield (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 themigration_integrityfinding above). Filed CleverRiver as the upstream-side aibox-sync diff defect that produced it.
projectious-work/aibox#55— aibox-side preauth merge (WildGrove Phase B). The processkit-side spec stays in-tree;preauth_appliedWARNs in derived projects until the matchingaibox synclogic ships.
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.
- 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_schemaandstate_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 byBACK-RapidSwanfor v0.22.0+). ClosesBACK-20260424_0128-BraveBird-reload-schemas-mcp-toolperDEC-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")returnedno 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 testtest_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 harness
Agent-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 to
pk-doctor --fix=schema_filenameas the preferred path. Part of MightyFjord.
- feat(skill-gate): compliance-ack TTL is now an idle timeout.
_any_valid_marker()rewrites the matching marker'sacknowledged_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. ClosesBACK-20260424_0038-SwiftLynx-compliance-contract-acknowledgement-ttl.
- 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 incontext/migrations/pending/(processkit dogfood convention). Derived projects (aibox) keep pending migrations at the top level ofcontext/migrations/and only move applied ones intoapplied/. The new_candidate_pending_paths()probespending/first; if absent, walkscontext/migrations/*.mdminusapplied/,INDEX.md, and aibox-CLI upgrade-doc filenames (<YYYYMMDD>_<HHMM>_<from>-to-<to>.md)._list_pendingalso filters bykind: Migrationso non-Migration markdown alongside migrations is ignored. ClosesBACK-20260425_1041-DeepMoss-pk-doctor-migrations-detect. - fix(pk-doctor):
--fix=schema_filenamefor the CalmAnt-class pattern (MightyFjord). Newrun_fixonschema_filename.pypatches LogEntries missing the requiredactorfield by insertingactor: system, validates post-patch, and rolls back on failure. Behind--fix=schema_filename --yes, never default. ClosesBACK-20260424_0128-MightyFjord-pk-doctor-fix-schemaperDEC-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'. Addedmcp[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. ClosesBACK-20260424_0038-WildLake-pk-retro-auto-workitems. - fix(skills): resolve cross-category
retrospectiveskill basename collision.product/retrospectiveis renamed toproduct/sprint-retrospective; the processkit-categoryretrospective(release-scope,/pk-retro) keeps the bare name. Closes #11.
BACK-20260424_0128-RapidSwan-pk-doctor-server-header— pk-doctorserver_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 perDEC-20260424_0127-QuickPine).BACK-20260424_0038-SnappyBird-data-repair-path-for(cancelled; replaced by the narrow MightyFjord run_fix perDEC-20260424_0128-BrightHawk; general data-fix migration kind not built — revisit only if >2 more recurrences in a calendar quarter).
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.
- docs(AGENTS.md): "Sub-agent delegation" section. Pairs with the
existing "Skill guards" list and codifies the read-only / mutating
split for harness
Agent-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. ClosesBACK-20260424_0038-ToughAnt-ephemeral-sub-agent-defaults.
- 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. ClosesBACK-20260424_0038-SwiftLynx-compliance-contract-acknowledgement-ttl.
- fix(skill-gate): remediation text uses the on-disk contract
version.
_remediation_msg()parses the leading<!-- pk-compliance vN -->marker inassets/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.pydeclared onlypyyamlin its PEP 723 header, but its in-process MCP loader importsserver.pymodules from artifact-management, event-log, and workitem-management — all of which requiremcp[cli]andjsonschema. Added both to the PEP 723 header souv run --script pk_retro.pyresolves them automatically. ClosesBACK-20260424_0038-WildLake-pk-retro-auto-workitems. - fix(skills): resolve cross-category
retrospectiveskill basename collision.product/retrospectiveis renamed toproduct/sprint-retrospective(directory,name:, andid: SKILL-sprint-retrospective); the processkit-categoryretrospective(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.
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.
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.
- feat(pk-doctor):
commands_consistencycheck. Walks everycontext/skills/processkit/*/SKILL.mdand ERRORs when a declaredcommands[].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. ClosesBACK-20260423_1103-ToughMeadow-pk-doctor-skill-missing. - feat(pk-doctor):
mcp_config_driftcheck. Readscontext/.processkit-mcp-manifest.json, recomputes per-skillmcp-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'smcpServersmap (ERROR with a "runaibox sync" hint). Surfaces the exact failure mode that motivated TrueQuail. - feat(release-semver):
scripts/generate-mcp-manifest.py. Writescontext/.processkit-mcp-manifest.json+ src/ mirror with a sha256 per-skill-config and an aggregate hash. Wired intoscripts/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 — seeDEC-20260423_2049-VastLake-truequail-split-processkit-shipsandprojectious-work/aibox#54. Closes the processkit-side ofBACK-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.
- 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:tometadata.processkit.commands:so the newcommands_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. ClosesBACK-20260423_2055-HappyFinch-skill-md-commands-metadata.
- fix(model-recommender): add missing
pyyaml>=6.0to MCP server's PEP 723 header. Theresolve_modelcall failed withModuleNotFoundError: No module named 'yaml'when the harness invokeduv run server.py(no--script). Smoke-tested live returning an 8-layer routing trace forROLE-product-manager@senior. ClosesBACK-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 arecord_decision(deciders=["TEAMMEMBER-cora"]). ClosesBACK-20260422_1643-BraveDove-schema-drift-workitem-assignee. - fix(log): add missing required
actorfield toLOG-20260422_1643-CalmAnt-workitem-created. Pre-TeamMember MCP server wrote a LogEntry without populatingactor, sopk-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.
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.
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).
- 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.
- 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.
- 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.
-
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/, andprivate/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 ladderjunior → 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 monolithicmodel_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 → xhighat 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 atcontext/skills/processkit/model-recommender/default-bindings/MANIFEST.yamlships 30 starter bindings (10 roles × 3 seniorities) materialised intocontext/bindings/. -
feat(pk-doctor): 5th check category
team_consistency. Wrapsteam-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.
- 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-classACTOR-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.
- 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.
- 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.
-
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. Addsspec.started_atto the Migration schema (optional, backward-compatible). SeeDEC-20260420_1342-WarmClover(shape) andDEC-20260420_1353-ProudReef(5 refinements).
- Stale
mcp-config.jsonpaths block MCP server startup in derived projects (#8). 12 of the 16 per-skillmcp-config.jsonfiles undercontext/skills/processkit/<skill>/mcp/shipped ascriptpath that omitted theprocesskit/category segment introduced in v0.17.0's nested layout (context/skills/<skill>/mcp/server.pyinstead ofcontext/skills/processkit/<skill>/mcp/server.py). Harnesses merged the broken path verbatim and then failed to launch the affected MCP servers on startup, forcing agents back to bash/python workarounds forcontext/writes. Latent since v0.17.0; masked until v0.18.6 of aibox because earlier aibox walker bugs prevented.mcp.jsonfrom being written at all. Mechanical fix — prependprocesskit/to the script arg for:actor-profile,binding-management,decision-record,discussion-management,event-log,gate-management,id-management,index-management,model-recommender,role-management,scope-management,workitem-management. Mirrored intosrc/context/. AGENTS.mdSession start block points atpk-resume(was stalemorning-briefing-generate, renamed in v0.17.0).
skip_decision_record(reason, session_id?)MCP tool onskill-gate— acknowledges the v2 contract's decision-language window without writing a record, when the agent concludes no decision needs recording (e.g. the user withdrew a proposal). Writes asession-<id>.decision-skipmarker next to the existing.ack/.decision-observedmarkers (24 h TTL, empty reason rejected).check_decision_captured.pyhonours skip markers in block mode.compliance-contract.mdasset bumped to v2. Adds the clause: "When the last five user messages contain explicit decision language (approved / decided / ship it / let's go / ok / yes / confirmed), either callrecord_decisionin the same turn or callskip_decision_record(reason=...)to acknowledge the skip." Resolves the v1 asset vs v2AGENTS.mdinconsistency called out in the v0.18.1 known-issues block. Existing session markers (which embed the old contract hash) automatically invalidate; callers re-ack on next hook invocation.scripts/check-src-context-drift.sh— release-time drift guard. Runsdiff -rq context/ src/context/with an allowlist for dogfood-only directories (actors/,artifacts/,bindings/,decisions/,discussions/,logs/,migrations/,notes/,roles/,team/,workitems/, rootINDEX.md), runtime paths (.cache/,.state/,__pycache__/,.gitkeep), andtemplates/. Wired intoscripts/build-release-tarball.shas a pre-build step; non-zero exit fails the release before the tarball is built. Structural guard against the v0.15.0–v0.18.0 drift class.- Session-start skill-check checklist (SnappyTrout).
AGENTS.mdandsession-handover/SKILL.mdnow name six task classes (research ingestion, artifact creation, discussion management, decision recording, backlog item creation, quality audits) that must be preceded by asearch_entities(kind=skill, ...)/find_skill(...)/list_skills(...)call. Extends, does not duplicate, the compliance-contract 1 % rule. /pk-standupand/pk-statusdifferentiated./pk-standupis now the brief daily standup (done / doing / next / blockers);/pk-statusis the fuller status snapshot. Both invokestandup-context, different argument framing. Prior identical bodies were a v0.17.0 authoring glitch.
BACK-20260410_1049-SnappyTrout— session-start skill-check (shipped here).BACK-20260411_0802-LivelyTulip— skill-finder MCP server (find_skill,list_skillsalready ship; verified byscripts/smoke-test-servers.py).
- Release tarball now actually contains v0.15.0–v0.18.0 content
(#7). The
build script (
scripts/build-release-tarball.sh) packages fromsrc/context/, but content added since v0.14.0 had been landing only in the dogfoodedcontext/tree. v0.18.0 and earlier tarballs were therefore missing features announced in their own CHANGELOG entries. v0.18.1 is a pure-sync release: no behavioural changes beyond bringingsrc/context/up to parity with what was already running in the dogfood. skill-gate/scripts/emit_compliance_contract.pynow emitshookEventNamein thehookSpecificOutputenvelope, as required by Claude Code 2.1+. Readshook_event_namefrom stdin (sent by every Claude Code hook invocation) and echoes it back ashookEventName. Falls back to"UserPromptSubmit"if stdin is empty or malformed. The Codex / plain-stdout path is unchanged. Resolves theUserPromptSubmit hook error: invalid hookSpecificOutputthat was blocking every prompt in Claude Code 2.1+ consumer projects.check_route_task_called.py— marker-lookup decoupled fromsession_id(scans.state/skill-gate/for any valid marker with matching contract_hash + 12h TTL) so Claude Code sessions whose id shifts mid-session no longer lock out of MCP tools.test_hooks.py— adds coverage for SessionStart / UserPromptSubmit event-name echo, stale marker (> 12h), and hash-mismatch cases.
team-creatorskill (SKILL.md + commands + references) — entire directory tree. Claimed in v0.15.0 CHANGELOG, previously only in the dogfood tree.- All 26
/pk-*slash-command files across 13 skills — the rename from<skill>-<verb>.mdtopk-<verb>.mdhappened in v0.17.0 and was extended in v0.18.0, but legacy names lingered insrc/context/. - Skill-gate Rail 5 scripts and fixtures:
check_decision_captured.py,decision_markers.py,decision_sweeper.py,record_decision_observer.py, plus transcript and sessionend fixtures. discussion-management/commands/,id-management/config/,index-management/config/directories.- Three
owner-profilingassets (OWNER-20260409_2054-*). actor.yaml/role.yamlschema updates for CapabilityProfileRouting (Role.model_profiles,Actor.model_profile_override).- Updated
AGENTS.mdtemplate: compliance contract v2 marker + decision- language clause + Session start block.
AGENTS.mdtemplate carriespk-compliance v2marker and the decision-language clause, but theskill-gate/assets/compliance- contract.mdasset (printed by the hook) is still v1. Clauses remain a strict superset in v2; a follow-up release will reconcile both to v2 and ship theskip_decision_recordMCP tool referenced by the clause. Tracked in the dogfood backlog.
- CapabilityProfileRouting — three-layer model-selection architecture
(DEC-20260417_1800). Replaces the single
preferences.modelstring pin per Actor with:- Layer A — Model catalog (what exists): curated model registry
inside
model-recommenderskill, refreshed via/pk-model-refresh. - Layer B — Project/owner preferences (what this project can use):
subscription tier, API keys, cost bias, preferred ordering, owned by
model-recommenderskill'sset_config/get_configMCP tools (/pk-model-setup). - Layer C — Role standard sets (what this role needs): each
Rolenow carries a rankedmodel_profilesarray (provider + family + default_version + default_effort + rationale, primary + fallbacks).Actorgains optionalmodel_profile_overridefor rare per-actor deviations. - All 8 permanent team roles populated with ranked profiles covering
Anthropic / OpenAI / Google / xAI / DeepSeek fallbacks. PM routing
algorithm wired in
context/team/roster.md.
- Layer A — Model catalog (what exists): curated model registry
inside
- 13 additional
/pk-*slash-command promotions (total 26 /pk-* commands, 0 legacy processkit commands):/pk-work,/pk-dec,/pk-dec-find,/pk-route,/pk-model-setup,/pk-model-refresh,/pk-groom,/pk-note-promote,/pk-note-review,/pk-owner-bootstrap,/pk-observe,/pk-skill-new,/pk-skill-audit. - Actor schema: optional
model_profile_overridefield — identical shape to a singlemodel_profilesentry, used only when a specific actor deviates from its role's primary. - Role schema: required-on-new-roles
model_profilesarray withrank,provider,family,default_version,default_effort(enum: minimal / low / medium / high / xhigh / none),rationale.
- Skill-gate PreToolUse hook decoupled from
session_id— the hook used to key marker-file matching on the harness-provided session id, but the processkit MCP server wrote markers under its own pid, so the two identifiers never matched and file edits silently blocked once the first legacy marker drifted. Hook now scans the marker directory for any marker whosecontract_hashmatches the current contract hash and whoseacknowledged_atis within the 12 h TTL. emit_compliance_contract.pyechoeshookEventNamein itshookSpecificOutputJSON envelope — Claude Code 2.1+ rejects the envelope without it (Hook JSON output validation failed — hookSpecificOutput is missing required field 'hookEventName'). The script now readshook_event_namefrom stdin and echoes it back.test_hooks.py— two new failure-mode tests (stale marker beyond TTL, marker with mismatchedcontract_hash). 13 cases total, all green.
- Team roster rewritten with three-layer architecture section, PM routing algorithm (5 steps), Primary default + Fallbacks columns, effort-tier attribution for session handovers.
preferences.modelstring on Actor is deprecated (no breaking migration — roles carry the routing intent now; actors stay identity- only unless overriding viamodel_profile_override).
DEC-20260417_1800-CapabilityProfileRoutingwas hand-written via a file Write (not therecord_decisionMCP tool) because the installer did not merge the per-skillmcp-config.jsonfiles into a harness- readable.mcp.json(filed upstream as aibox#53). The file carries aCLEANUP-REQUIREDmarker; re-record through the MCP tool once the wiring ships.
- 13
/pk-*ergonomic slash commands — the/pk-<verb>namespace is processkit's canonical command surface, provider-neutral across Claude Code, Codex CLI, Cursor, OpenCode (Aider falls back to AGENTS.md instructions). Three delivery surfaces:- Skill-driven (9):
/pk-resume(session start),/pk-status+ alias/pk-standup(mid-session status),/pk-wrapup(session end),/pk-note(fleeting capture with Zettelkasten qualified-link suggestion at capture time),/pk-discuss(structured multi-turn engagement),/pk-research(investigate with confidence labels),/pk-release(prepare a release),/pk-publish(push + publish). - AGENTS.md-driven (3):
/pk-test,/pk-build,/pk-lint— read a structured<!-- pk-commands -->YAML block in AGENTS.md and execute the project's declared command. Fills the cross-harness gap (4 of 5 harnesses ship zero build/test coverage). - Cross-cutting skill-driven (1):
/pk-review— processkit- opinionated code review against AGENTS.md conventions + compliance contract.
- Skill-driven (9):
<!-- pk-commands -->YAML block in AGENTS.md — machine-readable project-specific build/test/lint/fmt/typecheck declarations.- OpenWeave: team-creator 4-layer override surface (FEAT-OpenWeave)
— landscape artifact override (3-level precedence), DEC-*-TeamWeights
(tag-based weight + threshold override),
role-archetypes.yaml(project-level role→class pin override with delta/replace semantics and eager validation). team-creator bumped v1.1.0 → v1.2.0. - QuietLedger Rail 5: auto-capture of decisions (FEAT-QuietLedger)
— Lever 1 PreToolUse decision-language gate (shadow-mode-ON default;
--mode=blockavailable but NOT recommended until calibrated) + Lever 2 SessionEnd sweeper (writes Note artifact taggeddecision-candidatesfor owner async review). New MCP tool:skip_decision_record(reason, session_id)on skill-gate. Compliance contract bumped v1 → v2 (new Rail 5 clause). - ShadowCount calibration (RES-ShadowCount) — 9-session corpus,
precision 6/19 = 0.316, recall 6/6 = 1.00. Verdict: NO-GO on
--mode=blockwith current marker list. Marker tightening proposed. - DEC-CommandNexus — strategic decision:
/pk-<verb>namespace, processkit ships commands for any lifecycle phase not uniformly built-in across all major harnesses. Build/test/lint exclusion reversed. - CommandCompass research artifact — cross-harness built-in command matrix + external landscape scan + gap analysis + proposal.
- tool_use transcript filter — PreToolUse gate + SessionEnd sweeper
now filter
tool_use,tool_result,isCompactSummary,isSidechain, and<local-command-*>entries from transcript reads. Prevents false-positive gate fires on agent write payloads that contain decision-language text (e.g., "ship it" in WorkItem YAML).
- Compliance contract v1 → v2 — new clause: "When the last five
user messages contain explicit decision language, either call
record_decisionin the same turn or callskip_decision_record." Existing session acknowledgements re-prompt once on upgrade (contract hash changes). - team-creator v1.1.0 → v1.2.0 — 4-layer override docs + new
--threshold-overridesCLI flag + agent-driven discovery section with trigger phrases for all 4 layers. - skill-finder — 13 new trigger-phrase entries for
/pk-*commands- v0.17.0 ergonomic shortcuts category section.
- Canonical team-composition schema fields — closes the aibox field
report in issue #6, which requested that processkit land a canonical
team primitive in place of their temporary
x_aibox.*namespaced extension. Three new optional fields onRole(primary_contact,clone_cap,cap_escalation) and two onActor(is_template,templated_from):Role.primary_contact(bool, defaultfalse) — true for the role that is the single point of contact with the human owner. Exactly zero or one role per team may set this.Role.clone_cap(int, default5) — per-role parallelism ceiling. The role withprimary_contact: truemust setclone_cap: 1(never cloned).Role.cap_escalation(string, default"owner") — who must approve exceedingclone_cap. Literal"owner"or an actor-ref.Actor.is_template(bool, defaultfalse) — true for the canonical seed Actor that defines a role binding; clones derive from it. Enables index queries that separate seed team members from task-specific clones.Actor.templated_from(Actor-ref, defaultnull) — back- reference from a clone to its template Actor.
team-creatorskill bumped 1.0.0 → 1.1.0 — emits the five new canonical fields on everyteam-create/team-rebalancerun. Deactivation logic now usesis_template: trueas the canonical seed identifier instead of the prior same-model-same-role heuristic.- Two new applied migrations —
MIG-20260415T085311(Role schema- data) and
MIG-20260415T095000(Actor schema + data). Back-fill every existing Role/Actor entity so v0.15.0-installed teams carry the new fields automatically on upgrade.
- data) and
role-managementskill bumped to v1.0.1 — documents the three new Role fields and their validation invariants.actor-profileskill bumped to v1.0.1 — documents the two new Actor fields and their validation invariants.
Consumers carrying the aibox-style spec.x_aibox.* extension can lift
those fields into the canonical names with a one-to-one mapping:
x_aibox.is_template → is_template, x_aibox.clone_of →
templated_from, x_aibox.default_clone_cap → clone_cap,
x_aibox.escalate_cap_to → cap_escalation, plus a new field
primary_contact set true on the PM-equivalent role.
team-creatorskill — provider-neutral team composition. Tiers available models into heavy / medium / light using a weighted formula over Capability (0.60), Cost-efficiency (0.20), Latency (0.10), and Governance (0.10), then maps eight role archetypes (PM, sr-architect, jr-architect, developer, sr-researcher, jr-researcher, jr-developer, assistant) onto the tiered models. Three commands:team-create(full derivation, writes 24 entities- roster + DecisionRecord),
team-review(read-only diff vs latest landscape),team-rebalance(targeted re-tier of named roles). Composesmodel-recommender,role-management,actor-profile,binding-management,decision-record-write— no new primitives, no MCP server. Defaults reproduce the v0.14.0 manually-composed team 8/8 on Anthropic Max 5×. Validated by Phase 3 dogfood (ART-20260415_1545-TeamWeaver-team-creator-dogfood-diff).
- roster + DecisionRecord),
- Session-orientation wiring — AGENTS.md gains a "Session start"
section under the compliance-contract block: agents run
morning-briefing-generatebefore acting (provider-neutral, every AGENTS.md-aware harness picks it up).emit_compliance_contract.pyhook script extended with--include-session-startflag for Claude Code / Cursor reinforcement. - 6 new artifacts under
context/artifacts/— TeamWeaver Phase 1 design, OpenWeave Phase 1 design, landscape snapshot (HTML + structured summary), Phase 3 dogfood diff, Rail 5 research. - 3 new follow-up WorkItems filed —
FEAT-OpenWeave(4-layer override design done; implementation queued),FEAT-QuietLedger(Rail 5 L1+L2 implementation),RES-GapScout(research closed).
morning-briefingskill bumped 1.0.0 → 1.1.0 — addscontext/migrations/pending/to "Sources to read" and emits a one-line token-budget-share snapshot (Opus / Sonnet / Haiku actuals vs ≈5/85/10 target, flagging drift > ±10pp perDEC-20260414_0900-TeamRoster).
ARCH-20260414_1245-FirmFoundation— enforcement implementation plan closed. All four originally-blocking FEAT items (Rails 1–4) plus the two reconstructed follow-ups (PathFinder, TeamWeaver) shipped.
- Compliance contract (Rail 1) — canonical
context/skills/processkit/skill-gate/assets/compliance-contract.mdis the single source of truth for the eight enforceable rules. AGENTS.md carries a verbatim copy between<!-- pk-compliance-contract v1 BEGIN -->and<!-- pk-compliance-contract v1 END -->markers at the top of the file (primacy header), so every harness that reads AGENTS.md surfaces the contract before the rest of the project narrative. acknowledge_contract()MCP tool (Rail 3) — added to theskill-gateMCP server. Records a per-session acknowledgement marker undercontext/.state/skill-gate/session-<id>.ack. Paired with the PreToolUse hook script (Rail 2) so writes undercontext/block until the contract has been acknowledged once per session. The server also shipsread_contract()andcheck_acknowledged().- Provider-neutral hook scripts (Rail 2) — stdlib-only Python scripts
shipped under
context/skills/processkit/skill-gate/scripts/:emit_compliance_contract.py(SessionStart / UserPromptSubmit) andcheck_route_task_called.py(PreToolUse). Harness wiring (Claude Codesettings.json, Codex CLIhooks.json, etc.) is aibox's responsibility; fixtures captured from a real Claude Code 2.1+ session ship as golden files alongside the scripts. Includestest_hooks.pyfor CI.
- 1% rule sentence in 8 MCP tool descriptions (Rail 4) — the
entity-mutating tools on
artifact-management,decision-record,discussion-management,event-log,skill-finder, andworkitem-managementMCP servers now carry a one-line reminder in their docstring:route_task()first if there is even a 1% chance a processkit skill applies. Always-on, zero-dependency rail visible in the tool schema every turn.
- v0.14.0 is the processkit (Bucket A) half of the enforcement
rollout. The matching aibox-side wiring (merged MCP config per
harness, hook installation, drift report) is tracked as upstream
issues #43–#51 on
projectious-work/aibox. Until aibox ships those, the rails are present in the source tree but only Rail 1 (prose) and Rail 4 (tool descriptions) are visible to derived projects.
task-routerskill and MCP server — primary routing entry point for processkit agents.route_task(task_description)returns the matching skill, project-specific process override (fromcontext/processes/), and recommended MCP tool in a single call without an LLM call. Two-phase heuristic routing: keyword match against 13 domain groups (Phase 1), token-overlap scoring within the group's tools (Phase 2), skill-finder trigger-table fallback for cross-domain tasks. Return shape includesskill_description_excerpt(first 150 chars),tool_qualified({server}__{tool}collision-safe naming),confidence,routing_basis, andcandidate_tools[].skill-finderMCP server — new MCP server for the existing skill-finder skill. Tools:find_skill(task_description)(trigger- phrase table lookup + token-overlap scoring) andlist_skills(category?)(catalog browser). Both tools are read-only withreadOnlyHint=true.skill-gatemeta-skill — provider-neutral prose skill that enforces the 1% rule: if there is even a 1% chance a processkit skill covers the task, check the router first. Includes decision graph, rationalization pre-emption table (5 entries), and escape hatch for agents already operating inside a named skill workflow.
- MCP tool prerequisite prompts (Track C) — all 20 entity-mutating
MCP tools (
create_*,transition_*,link_*,record_*,open_*) now carry a prerequisite sentence in their docstring: callroute_task()or confirm you are inside a named skill workflow before using the tool. These prompts appear in the tool schema every turn. skill-builderandskill-reviewerupdated (Track E) — skilldescription:field convention changed from "Use when…" summaries to one-sentence imperatives (verb-noun, ≤150 chars). Both skills enforce this: skill-builder's step 4 template uses the new format; skill- reviewer's Category 6 and Skill Killer #1 check for violations.AGENTS.mdrouting reference —find_skill()replaced byroute_task()as the primary 1% rule entry point.task-routeradded to the mandatory MCP server table.context/processes/release.md— fleshed out from generic stub to processkit-specific: addedbreaking-change-audit,update-docs-site,stamp-provenance,push,build-and-upload-release,deploy-docssteps; docs-deploy WildButter/aibox#42 blocker documented.
artifact-managementskill and MCP server — new Layer 2 processkit primitive for registering and retrieving completed deliverables (documents, datasets, builds, diagrams, URLs, etc.). Supports two usage patterns: self-hosted (Markdown body in the entity file) and pointer (external URL or path vialocation). MCP tools:create_artifact,get_artifact,query_artifacts,update_artifact. Artifact has no state machine (state_machine: null) — it is a catalogue record, not a work-tracking entity.skill-finderupdated — new trigger phrases forartifact-management("register an artifact","catalog this document","store this deliverable","link this design file") and a one-liner in the Process category.context/skills/INDEX.md—processkit/skill count updated to 31; Layer 2 entry updated to includeartifact-management **MCP**.
ids.py:pascalandcamelare now distinct word styles —pascalproduces PascalCase (BoldVale, every word capitalised);camelnow correctly produces true camelCase (boldVale, first word lowercase). Previouslycamelincorrectly generated PascalCase.id-management/config/settings.tomlupdated toword_style = "pascal".
context/dogfood mirror synced —resolve_entity()and partial-ID lookup now live in the installedcontext/copies ofindex.pyand all MCP servers, consistent with thesrc/implementation shipped in v0.10.0.session-handoverSKILL.md — log-entry writing steps updated withgenerate_idcall, date-sharded path derivation, and word-pair ID template.context/skills/INDEX.md— expanded with skill package layout section and_lib/note.aibox.lock— updated to aibox v0.17.12, processkit v0.10.0.
- Note schema:
linksfield — qualified Zettelkasten note-to-note links withtarget,relation(enum: elaborates, contradicts, supports, is-example-of, see-also, refines, sourced-from), and a requiredcontextsentence explaining why the connection matters. Tags group notes by topic; links build arguments. - note-management SKILL.md: linking section — new "Linking notes" section with a full relation table and usage guidance; note template updated with links example.
- Note schema: type descriptions aligned with Luhmann/Ahrens taxonomy
—
insight= permanent note (never discarded, part of the knowledge base);reference= literature note;fleeting= fleeting note. Schema description clarifies that permanent notes are not ephemeral.typedescriptions and note-management SKILL.md type table updated accordingly. - Artifact schema: self-hosted and pointer patterns both documented —
description updated to acknowledge two valid usage patterns:
self-hosted (Markdown body in the file,
locationoptional) and pointer (external URL/path,locationrequired).locationremoved from therequiredarray. Note vs Artifact distinction added. config.py_skill_config_dir— now tries theprocesskit/category subdirectory before falling back to the flat layout, fixing ID generation and config loading after the v0.10.0 skills reorganization..mcp.json— all 12 MCP server paths corrected fromcontext/skills/<name>/tocontext/skills/processkit/<name>/after the v0.10.0 SteadyLeaf reorganization.AGENTS.md— added AGENTS.md lean-scope principle; expandedcontext/layout table to all 15 directories includingartifacts/,decisions/,discussions/,notes/,workitems/,logs/,migrations/,owner/,actors/,roles/.
index.resolve_entity()— new shared library function with 3-stage ID resolution: exact match → prefix match (missing slug) → word-pair match (bare word-pair likeStoutCrow). Enables agents and humans to look up entities by the colloquial word-pair shorthand rather than needing the full canonical ID.
- Skills directory reorganized into 7 category subdirectories (SteadyLeaf):
processkit/(30),engineering/(46),devops/(15),data-ai/(11),product/(11),documents/(8),design/(5). All 126 skills moved in bothsrc/context/skills/andcontext/skills/. All SKILL.md files updated with a consistentcategory:frontmatter field. skill-finderupdated with a "By directory" table mapping the 7 categories to their on-disk subdirectory names.get_workitem,get_decision,get_entity(index-management) now useresolve_entity()and return{"error": "..."}instead ofnull/Nonewhen the entity is not found, and{"error": "ambiguous..."}with a candidate list when multiple entities match.- All
_load_*helpers (_load_scope,_load_gate,_load_actor,_load_role,_load_discussion,_load_decision,_load_workitem) updated to useresolve_entity()so word-pair lookup also works in write tools (transition, link, etc.). smoke-test-servers.pyupdated to find MCP server files in the new category subdirectory layout.
get_workitemandget_decisionpreviously returnednullfor not-found IDs, making it impossible for callers to distinguish "not found" from "found but empty". Both now return a structured error dict (SnappyCrane).- Agents looking up entities by word-pair shorthand (e.g.
StoutCrowinstead of the fullBACK-20260410_1050-StoutCrow-create-brand-design-skill) now resolve correctly via the newresolve_entity()fallback chain (SteadyPeak).
src/ → context/ mirror restructure (GrandLily). All processkit content
now lives under src/context/ in the source tree and is mirrored to
context/ in the target project root on aibox sync.
Auto-log side effects in all entity-mutating MCP servers. Every
create_*, transition_*, and link_* call now appends a LogEntry
without the caller doing anything extra.
Initial processkit v0.7.0 release. Core entity MCP servers, state machines, schemas, and 85+ skills migrated from the original aibox templates.