Skip to content

Releases: projectious-work/processkit

v0.24.0 — model routing and context archiving

30 Apr 13:59

Choose a tag to compare

A minor release focused on model-routing depth, context lifecycle
management, and operator diagnostics. It adds richer model/provider
metadata, local semantic routing support, a read-safe context archiving
skill, context-consumption reporting, and team/model assignment
infrastructure. No breaking changes are intended for existing consumers.

Added

  • Added model-class assignment and richer model/provider characteristics:
    provider, model, version, effort, architecture, license, deployment,
    latency/speed, context length, token accounting, access, rate limits,
    and supported runtime parameters.
  • Added get_model_for_class() and class-based routing metadata to the
    model recommender so callers can resolve fast, balanced, deep, and
    specialized model classes consistently.
  • Added the context-archiving skill and MCP server for planning and
    creating archive tarballs, extracting archived payloads, and keeping
    archived entities queryable through the index.
  • Added archive-aware index metadata via storage_location, including
    archived LogEntry event-query support.
  • Added task-router v0.2 scoring with local n-gram semantic matching,
    scoring basis details, and low-confidence LLM-escalation metadata.
  • Added context-consumption checkpoint reports and team identity /
    model-assignment bindings for role-based routing.
  • Added optional sqlite-vec semantic search and FTS5-backed index search.
  • Added a library-expert skill template plus skill-builder and
    skill-reviewer guidance for version-scoped library expertise.

Changed

  • Improved processkit routing and MCP ergonomics across task-router,
    skill-finder, model-recommender, and related docs.
  • Refined harness diagnostics and pk-doctor drift reporting, including
    server-header drift coverage.
  • Updated model schemas in both context/ and src/context/ to carry
    the broader model-characteristics surface.

Fixed

  • Fixed artifact metadata updates so callers can avoid restamping
    freshness-sensitive metadata.updated values.
  • Restored the docs-site build after the v0.23.1 release line.

Notes

  • v0.24.0 is a minor release because it introduces new
    backwards-compatible capabilities. The context-archiving MCP server is
    implemented, but harness registration remains gated on installer sync
    support for new per-skill MCP config entries.
  • Pre-release validation on the release branch retains the known optional
    release-audit warnings for unused entity directories (actors/,
    scopes/, gates/) and the known pk-doctor preauth warning gated by
    aibox#55.

v0.23.1 — release-audit cleanup (0 ERRORs)

26 Apr 19:30

Choose a tag to compare

A focused content+code patch resolving the 106 ERRORs surfaced by the
first-run release-audit on v0.23.0. Hybrid validator + content fixes
per DEC-20260426_1859-MightyRobin (BACK-FierceOwl): three documented
validator relaxations close 96 false-positives, and ten real content
findings get backfilled. Net: 106 ERROR → 0 ERROR; 3 WARN unchanged
(actors / scopes / gates entity-dirs are deliberately unused — flagged
for v0.24.0).

Changed

  • change(release-audit): excludelist aibox CLI migration prose docs.
    entity_files walker now skips *-to-*.md and INDEX.md under
    context/migrations/. Closes 16 A1 false-positives — these are aibox
    CLI prose, not Migration entities. Real Migration entities under
    pending/ and applied/ continue to be validated.
  • change(release-audit): model the team-member directory layout.
    entity_files walker now understands the team-manager skill's
    alt schema: registers Persona as a known kind, special-cases the
    team-member.md filename stem to map onto TEAMMEMBER-{slug}, and
    walks relations/ subdirs as Persona-related sub-files. Closes 11
    A2 false-positives.
  • change(release-audit): make metadata.processkit.layer optional
    for non-processkit-category skills.

    Layer is a processkit-DAG concept; library-style skills
    (category != "processkit") participate in no compositional layer
    graph. Strict layer enforcement preserved for the processkit DAG
    where it matters. Closes 69 C false-positives — across engineering
    (39), devops (11), data-ai (11), design (5), documents (3).

Added

  • add(release-audit): 24 new pytest cases. test_release_audit.py
    gains TestMigrationProseSkipped (4 cases), TestTeamMemberLayout
    (3 cases), and TestLayerConditional (2 cases) covering the three
    validator changes above. Plus +203 lines total of fixture and
    helper plumbing.

Fixed

  • fix(skills): backfill metadata.processkit.layer on 7
    processkit-category SKILL.md files.
    Each value computed from the
    skill's declared uses[] deps:
    • model-recommender: layer 2
    • skill-builder: layer 4
    • skill-finder: layer 4
    • skill-gate: layer 4
    • skill-reviewer: layer 4
    • task-router: layer 4
    • team-creator: layer 4
  • fix(team-creator): author missing ## Full reference section.
    +213 lines reference content covering all team-creator commands,
    flags, and recipes.
  • fix(team-manager): author missing ## Overview and
    ## Full reference sections.
    +316 lines covering the team-member
    directory layout, persona files, relations, and consistency checks.

Notes

  • v0.23.1 is a patch release — additive validator allowances and
    documentation backfills only, no breaking changes. Consumers on
    v0.23.0 can adopt with no migration steps.
  • pk-release-audit on this release: 0 ERROR / 3 WARN / 999 INFO
    (down from 106 ERROR / 3 WARN / 903 INFO on v0.23.0). The 3
    remaining WARNs are entity.missing-dir for actors/, scopes/,
    and gates/ — the project doesn't use those entity kinds yet.
  • Incidentals rolled into the same release per FierceOwl's transition
    note: pk-doctor drift.py parser 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-CuriousButter was corrupted at write-time
    (XML-style fields embedded inside the decision string plus
    trailing tool-call markup) and supersedes-replaced by
    DEC-20260426_1859-MightyRobin.

v0.23.0 — RoyalFern filters + 4 new validators/tools + 3 scaffolding fixes

26 Apr 15:49

Choose a tag to compare

A focused batch release: governance filter implementation that gives
the v0.22.1 RoyalFern schema fields runtime teeth, plus four scaffolding
bug-fixes (CalmArch / RapidDaisy / VastLark) and four new validators &
tools (TidyGrove / NobleBrook / AmberCliff). Eight WorkItems in total,
all detect-or-fix improvements with no breaking changes.

Implementation followed two waves: wave one (CalmArch + RapidDaisy +
VastLark + SolidWolf) shipped sequentially; wave two (TidyGrove +
NobleBrook + AmberCliff + BraveMeadow) ran as four parallel
sonnet-tier subagents, one per WI, against disjoint target dirs.

Added

  • feat(model-recommender): query_models() RoyalFern filters (SolidWolf).
    BACK-20260426_1214 — query_models() gains 9 governance / data-privacy
    filter kwargs sourced from the RoyalFern fields landed in v0.22.1:
    phi_hipaa_eligible, pii_eligible, gdpr_eligible,
    training_on_customer_data (enum match), data_retention_days_max
    (numeric ceiling; accepts the literal "zero", rejects "unknown"),
    jurisdiction_country_in (HQ membership), legal_regime_in (any-match
    on applicable_legal_regimes), data_residency_in (any-match on
    data_residency_regions), and max_latency_p50_ms. Missing-field
    semantics: a model lacking the relevant field is REJECTED — conservative
    governance default. _profile_block surfaces 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_1830context/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, command pk-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 the layer field) — flagged for separate triage and not
    blocking this release.
  • feat(pk-doctor): skill_dag check (NobleBrook).
    BACK-20260409_1738 — new pk-doctor check walks every SKILL.md,
    builds the dependency graph from each metadata.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 catalog MCP tool (AmberCliff).
    BACK-20260410_1840 — new catalog() tool on
    processkit-skill-finder. Signature:
    catalog(category, tag, keyword, columns, sort_by, output) with
    output ∈ {"markdown", "json", "yaml"} and column projection on
    any frontmatter field. Defaults to a Markdown table of every skill
    sorted by name. Reuses _all_skills() — no new SQLite plumbing.
    SKILL.md gains a "Catalog queries" section with trigger phrases
    ("list skills", "show me all skills in X", "skills as JSON") and
    five example invocations.

Changed

  • change(skill-gate): prefix-based PreToolUse matcher (VastLark).
    BACK-20260425_1235check_route_task_called.py switches from an
    explicit allowlist to a prefix-based matcher. Any tool whose name
    starts with create_, transition_, link_, record_, open_,
    update_, apply_, reject_, add_, end_, import_,
    reactivate_, deactivate_, release_, reserve_, supersede_,
    start_, evaluate_, or skip_ is now gate-locked, plus an
    explicit allowlist for log_event (verb+noun shape). Closes the
    auto-renew gap that surfaced in the 2026-04-25 session when only
    create_binding traffic ran across a midnight boundary and the
    marker expired despite continuous compliant writes. 40 new test
    cases in test_hooks.py.
  • change(workitem-management + all entity-writing MCPs): YAML
    literal-block-scalar serialization (CalmArch).

    BACK-20260425_1755context/skills/_lib/processkit/frontmatter.py
    adopts a custom SafeDumper subclass with a str representer 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 \n the 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 for vendor_model_id, knowledge_cutoff,
    latency_p50_ms, jurisdiction, and data_privacy from
    Model.versions[] into the legacy-shape entry that query_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.

Fixed

  • fix(event-log): log_event MCP now validates required actor field
    (RapidDaisy).

    BACK-20260425_1755log_event() calls
    schema.validate_spec("LogEntry", spec) before write. Calls
    missing or with empty actor return {"error": "..."} and write
    no file. Previously the schema-required field was silently omitted,
    producing LogEntry files that pk-doctor's schema_filename check
    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 actor as required.
  • 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 (uses release-semver at 3).
    • processkit/status-briefing: layer 2 → 4 (uses agent-management at 4).
    • processkit/status-update-writer: layer 2 → 4 (uses agent-management at 4).
    • product/onboarding-guide: layer 2 → 4 (uses agent-management at 4).
      Behavior unchanged; only the frontmatter metadata.processkit.layer
      values change.

Verified (no changes needed)

  • chore(owner-profiling): reference files complete (BraveMeadow).
    BACK-20260410_1049 — verified
    owner-profiling/references/observable-signals.md (105 lines, 37
    signals × 6 categories) and interview-protocol.md (128 lines)
    are present, complete, spec-compliant against
    NOTE-20260410_1046-StoutSwan, and mirror-clean. No file changes.

Notes

  • v0.23.0 is a minor release — additive features and pure bug
    fixes, no breaking changes. Consumers on v0.22.1 can adopt with no
    migration steps.
  • The release-audit skill's first live run reports 105 ERRORs of
    pre-existing tree issues; these are NOT blockers for v0.23.0 and
    will be triaged in a separate v0.23.x content-cleanup pass.
  • Two cross-project bugs were filed upstream during the prep window
    (no processkit-side fix): aibox#56 (CleverRiver — same-version
    migrations) and aibox#57 (FierceWren — content-diff overwrites
    locally-added entity content). Workaround in place: run git status
    after every aibox sync.
  • pk-doctor green at release time: 0 ERROR / 2 WARN / 11 INFO. The
    two WARNs are the unchanged context/.processkit-provenance.toml
    drift (known v0.22.0 stamping bug, acknowledged in aibox v0.20.0
    release notes and tolerated). One additional INFO comes from the
    new skill_dag check.

v0.22.1 — RoyalFern Model schema (jurisdiction + data_privacy + 3 more)

26 Apr 12:24

Choose a tag to compare

A focused point release shipping the RoyalFern Model schema enhancement
(DEC-20260425_2256): five additive optional fields on
Model.spec_schema.versions[]jurisdiction, data_privacy,
knowledge_cutoff, vendor_model_id, and latency_p50_ms — backfilled
across all 34 model entities and documented under the Governance
dimension in the model-recommender skill. No breaking changes; existing
callers are unaffected because every new field is optional.

The query_models() MCP tool does not yet implement filtering on these
fields — that work is tracked as BACK-20260426_1214-SolidWolf and
targeted for v0.23.0. Until that lands, the new fields are read via
get_profile() / direct file inspection.

Added

  • feat(schema): RoyalFern Model schema fields.
    context/schemas/model.yaml gains five optional fields on
    spec_schema.versions[]:
    • jurisdiction — vendor HQ country (ISO-3166-1 alpha-2),
      applicable_legal_regimes (slugs: EU-GDPR, US-CLOUD-Act,
      US-HIPAA, CN-DSL, CN-PIPL, UK-DPA, CA-PIPEDA), and
      data_residency_regions (e.g. ["us-east","eu-west"]). Lossless
      replacement for ad-hoc governance_warning free-text callouts.
    • data_privacy — vendor data-handling posture: dpa_available
      (boolean or DPA URL), data_retention_days (integer or
      zero/unknown), training_on_customer_data (never/opt-in/
      opt-out/always/unknown), pii_eligible, phi_hipaa_eligible,
      gdpr_eligible, and sub_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 to dimensions.speed.
      All fields are optional and additive; pre-RoyalFern Model entities
      remain valid without modification.

Changed

  • chore(models): backfill RoyalFern fields across all 34 model entities.
    Every MODEL-*.md under context/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.md adds a
    structured-fields block under the Governance dimension and four
    example query_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 corresponding query_models() filter implementation
    ships in v0.23.0 (tracked as BACK-20260426_1214-SolidWolf).

Notes

  • v0.22.1 is a patch release — five additive optional schema
    fields with no behavioural changes to any existing tool. Consumers
    on v0.22.0 can adopt with no migration steps.
  • Two upstream aibox bugs surfaced during this session and were
    filed for the aibox project: aibox#56 (CleverRiver — same-version
    migrations) and aibox#57 (FierceWren — content-diff overwrites
    locally-added entity content). Neither has any processkit-side
    fix in this release; both are tracked as cross-project WorkItems
    (BACK-20260425_1711-CleverRiver, BACK-20260426_1205-FierceWren).
  • pk-doctor green at release time: 0 ERROR / 2 WARN (both expected
    drift WARNs for context/.processkit-provenance.toml — known
    v0.22.0 stamping bug acknowledged in aibox v0.20.0 release notes
    and tolerated by the host).

v0.22.0

25 Apr 18:00

Choose a tag to compare

[v0.22.0] — 2026-04-25

Two new pk-doctor checks (migration_integrity, server_header_drift)
and the processkit-side half of preauth-spec shipping (WildGrove
Phase A) — plus a host CLI bump to aibox 0.19.2 with mcp_config_hash
recorded in the lock file. Closes the v0.21.0-deferred RapidSwan
pk-doctor check, lands the schema-malformed-migration detection that
motivated CleverRiver, and exports an 18-pattern preauth bundle for
derived projects (consumed by aibox#55).

A small one-shot cleanup pass also clears 3 pre-existing pk-doctor
schema ERRORs (1 WorkItem with mangled YAML quoting, 2 LogEntries
missing actor); the producer-side MCP fixes are tracked as
RapidDaisy and CalmArch for a future release.

Added

  • feat(pk-doctor): migration_integrity check (CleverRiver). New
    check flags two malformed-migration patterns: same-version-with-content
    (a Migration whose from_version == to_version but whose
    affected_groups / affected_files are non-empty) and
    affected-files-empty (table rows present in the body but the
    affected_files array empty). Both fire as WARN, cite CleverRiver,
    and recommend reject_migration on the offending file. Surfaced the
    malformed MIG-20260425T164303 that 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_drift check (RapidSwan). New
    WARN-level check that hashes the PEP 723 inline metadata block
    (# /// script# ///) of every MCP server.py and compares
    against a manifest baseline. On drift, lists the affected skill
    slugs and recommends restarting the harness so uv re-resolves the
    pinned venv. context/.processkit-mcp-manifest.json is extended
    with a per-skill per_server_header field; aggregate_sha256
    semantics are unchanged (still computed over mcp-config.json
    files only — aibox#54 contract preserved). Per
    DEC-20260424_0127-QuickPine (SharpBrook split: BraveBird shipped
    the schema-reload half in v0.21.0; RapidSwan ships the dep-drift
    half here). Closes
    BACK-20260424_0128-RapidSwan-pk-doctor-server-header.
  • feat(skill-gate): preauth spec asset (WildGrove Phase A).
    context/skills/processkit/skill-gate/assets/preauth.json ships an
    18-pattern bundle of server-wildcard permission entries and 18
    matching enabledMcpjsonServers entries 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 on aibox sync).
  • feat(pk-doctor): preauth_applied check (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 "run aibox sync once aibox#55
    ships" hint. No-op in the processkit dogfood repo.

Changed

  • chore(aibox): host CLI 0.18.7 → 0.19.2 + record mcp_config_hash
    in lock file.
    Bumped the harness CLI; aibox.lock now carries an
    mcp_config_hash field recording the sha256 of the merged
    .mcp.json at sync time, giving pk-doctor and aibox-sync a stable
    reference for drift detection independent of per-skill
    manifest hashes.

Fixed

  • chore(repair): clear 3 pre-existing pk-doctor schema ERRORs.
    One-shot direct edit on a WorkItem whose YAML quoting was mangled
    by a fragile MCP serializer, plus two LogEntries missing the
    required actor field (written by a broken log_event MCP 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 via reject_migration per the
    migration_integrity finding above). Filed CleverRiver as the
    upstream-side aibox-sync diff defect that produced it.

External

  • projectious-work/aibox#55 — aibox-side preauth merge (WildGrove
    Phase B). The processkit-side spec stays in-tree; preauth_applied
    WARNs in derived projects until the matching aibox sync logic
    ships.

v0.21.0 — retro batch + pk-doctor portability fixes

25 Apr 11:12

Choose a tag to compare

Five fixes spanning the v0.19.2 retro action items and two
correctness bugs in pk-doctor that surfaced when the owner ran
/pk-doctor inside an aibox-derived project and got a falsely-clean
report. Both pk-doctor bugs were silent-zero failures: the checks
silently no-op'd in derived projects and hid every entity-hygiene
problem they were supposed to catch.

The two heavier retro items (SharpBrook MCP schema hot-reload,
SnappyBird append-only LogEntry repair) were worked through design
discussions (DISC-DaringBird, DISC-WiseLily) and split or narrowed
per DEC-QuickPine and DEC-BrightHawk.

Added

  • feat(_lib + 4 servers): reload_schemas MCP 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-process load_schema and
    state_machine.load lru_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 (the uv-resolved venv is
    pinned at process start — tracked separately by
    BACK-RapidSwan for v0.22.0+). Closes
    BACK-20260424_0128-BraveBird-reload-schemas-mcp-tool per
    DEC-20260424_0127-QuickPine.
  • feat(model-recommender): 20 specialist + expert seed bindings.
    The v0.19.0 roster declared a 5-level seniority ladder
    (junior → specialist → expert → senior → principal), but the
    default-bindings pack seeded only 3 levels. As a result,
    resolve_model(<role>, "specialist"|"expert") returned
    no viable model across all 10 seeded roles — 20 missing
    combinations. KeenFern adds seeds inheriting from the nearest
    covered neighbour: specialist → junior's (model, effort band),
    expert → senior's (model, effort band). MANIFEST.yaml grew from
    30 → 50 seeds. New regression test
    test_default_bindings_coverage.py asserts every seeded role
    covers all 5 ladder levels and fires loudly on any future gap.
    Closes BACK-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).
    Closes BACK-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_filename as
    the preferred path. Part of MightyFjord.

Changed

  • feat(skill-gate): compliance-ack TTL is now an idle timeout.
    _any_valid_marker() rewrites the matching marker's
    acknowledged_at to now on every successful gate check.
    Sessions actively making compliant writes never expire mid-flow
    (the v0.19.2 midnight-span pain pattern); idle sessions
    (> _ACK_LIFETIME_HOURS, default 12 h) still must re-acknowledge.
    Touch failures are non-fatal. Closes
    BACK-20260424_0038-SwiftLynx-compliance-contract-acknowledgement-ttl.

Fixed

  • fix(pk-doctor): schema_filename schemas-dir fallback (HappyReef).
    schema_filename.py resolved 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 to context/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
    _0000 placeholder filenames, missing-actor ERRORs, etc.).
    Closes BACK-20260425_1041-HappyReef-pk-doctor-schema-filename.
  • fix(pk-doctor): migrations layout fallback (DeepMoss).
    Companion to HappyReef. The migrations check looked only in
    context/migrations/pending/ (processkit dogfood convention).
    Derived projects (aibox) keep pending migrations at the top
    level of context/migrations/ and only move applied ones into
    applied/. The new _candidate_pending_paths() probes
    pending/ first; if absent, walks context/migrations/*.md
    minus applied/, INDEX.md, and aibox-CLI upgrade-doc
    filenames (<YYYYMMDD>_<HHMM>_<from>-to-<to>.md). _list_pending
    also filters by kind: Migration so non-Migration markdown
    alongside migrations is ignored. Closes
    BACK-20260425_1041-DeepMoss-pk-doctor-migrations-detect.
  • fix(pk-doctor): --fix=schema_filename for the CalmAnt-class
    pattern (MightyFjord).
    New run_fix on
    schema_filename.py patches LogEntries missing the required
    actor field by inserting actor: system, validates
    post-patch, and rolls back on failure. Behind --fix=schema_filename --yes, never default. Closes
    BACK-20260424_0128-MightyFjord-pk-doctor-fix-schema per
    DEC-20260424_0128-BrightHawk.
  • fix(skill-gate): remediation text uses on-disk contract version.
    _remediation_msg() parses the leading <!-- pk-compliance vN -->
    marker rather than hard-coding v1. Part of SwiftLynx.
  • fix(retrospective): /pk-retro --auto-workitems no longer fails
    with ModuleNotFoundError: No module named 'mcp'.
    Added
    mcp[cli]>=1.0 and jsonschema>=4.0 to pk_retro.py's PEP 723
    header so uv run --script pk_retro.py resolves the in-process
    MCP loader's transitive imports automatically. Closes
    BACK-20260424_0038-WildLake-pk-retro-auto-workitems.
  • fix(skills): resolve cross-category retrospective skill basename
    collision.
    product/retrospective is renamed to
    product/sprint-retrospective; the processkit-category
    retrospective (release-scope, /pk-retro) keeps the bare name.
    Closes #11.

Deferred

  • BACK-20260424_0128-RapidSwan-pk-doctor-server-header — pk-doctor
    server_header_drift check (PEP 723 dep drift detection,
    WARN-only). Targeted v0.22.0+.
  • BACK-20260424_0037-SharpBrook-mcp-servers-cache-schemas
    (cancelled; superseded by BraveBird + RapidSwan per
    DEC-20260424_0127-QuickPine).
  • BACK-20260424_0038-SnappyBird-data-repair-path-for
    (cancelled; replaced by the narrow MightyFjord run_fix per
    DEC-20260424_0128-BrightHawk; general data-fix migration kind
    not built — revisit only if >2 more recurrences in a calendar
    quarter).

v0.20.0 — retro follow-up: WildLake + ToughAnt + SwiftLynx + #11

24 Apr 01:14

Choose a tag to compare

Retro follow-up batch: fixes the three lightest action items from the
v0.19.2 retrospective (WildLake, ToughAnt, SwiftLynx). The two heavier
retro items — SharpBrook (MCP schema hot-reload) and SnappyBird
(data-repair path for append-only LogEntries) — are deferred to
v0.21.0 pending the design discussions opened as DISC-DaringBird and
DISC-WiseLily. See DEC-20260424_0101-SolidBadger-split-v0-20-0.

Added

  • docs(AGENTS.md): "Sub-agent delegation" section. Pairs with the
    existing "Skill guards" list and codifies the read-only / mutating
    split for harness Agent-tool sub-agents: delegate Read, search
    Bash, and MCP query_* / get_* / search_* / list_*; keep
    Write, Edit, new mkdir, MCP create_* / transition_* /
    record_* / link_* / open_* / log_event, and git mutations
    on the main session. Closes
    BACK-20260424_0038-ToughAnt-ephemeral-sub-agent-defaults.

Changed

  • feat(skill-gate): compliance-ack TTL is now an idle timeout.
    _any_valid_marker() in check_route_task_called.py now rewrites
    the matching marker's acknowledged_at to now on every
    successful gate check. A session that is actively making
    compliant writes no longer expires mid-flow (the v0.19.2
    midnight-span pain pattern); a session that goes idle for longer
    than _ACK_LIFETIME_HOURS (12h) still must re-acknowledge. Touch
    failures are non-fatal. Closes
    BACK-20260424_0038-SwiftLynx-compliance-contract-acknowledgement-ttl.

Fixed

  • fix(skill-gate): remediation text uses the on-disk contract
    version.
    _remediation_msg() parses the leading
    <!-- pk-compliance vN --> marker in
    assets/compliance-contract.md rather than hard-coding v1. The
    v0.19.2 hard-code told callers to acknowledge v1 even though the
    on-disk contract was already v2. Part of SwiftLynx.
  • fix(retrospective): /pk-retro --auto-workitems no longer fails
    with ModuleNotFoundError: No module named 'mcp'.
    pk_retro.py
    declared only pyyaml in its PEP 723 header, but its in-process
    MCP loader imports server.py modules from artifact-management,
    event-log, and workitem-management — all of which require
    mcp[cli] and jsonschema. Added both to the PEP 723 header so
    uv run --script pk_retro.py resolves them automatically. Closes
    BACK-20260424_0038-WildLake-pk-retro-auto-workitems.
  • fix(skills): resolve cross-category retrospective skill
    basename collision.
    product/retrospective is renamed to
    product/sprint-retrospective (directory, name:, and id: SKILL-sprint-retrospective); the processkit-category
    retrospective (release scope, /pk-retro) keeps the bare name.
    Closes #11. The missing pk-doctor/commands/ directory
    (#10) and the duplicate pk-resume.md command
    (#12) were already resolved in v0.19.2 (90c980f and 87e185e
    respectively) and are closed here for bookkeeping.

Deferred to v0.21.0

  • BACK-20260424_0037-SharpBrook-mcp-servers-cache-schemas — MCP
    schema hot-reload / reload_schemas tool. Design discussion:
    DISC-20260424_0101-DaringBird-how-should-mcp-servers.
  • BACK-20260424_0038-SnappyBird-data-repair-path-for — data-repair
    path for malformed append-only LogEntries. Design discussion:
    DISC-20260424_0101-WiseLily-how-do-we-allow.

v0.19.2 — release-hygiene + derived-project-install bulletproofing

24 Apr 00:31

Choose a tag to compare

Release-hygiene and derived-project-install bulletproofing. Closes
four v0.19.2 WorkItems (SteadyCedar, BraveDove, ToughMeadow,
HappyFinch) and ships the processkit-side half of TrueQuail; the
aibox-side reconcile is tracked at
projectious-work/aibox#54.

Added

  • feat(pk-doctor): commands_consistency check. Walks every
    context/skills/processkit/*/SKILL.md and ERRORs when a declared
    commands[].name has no matching commands/<name>.md file (WARNs
    on the inverse — stray files not declared in metadata). Prevents
    recurrence of the v0.19.1 slip where pk-doctor shipped without its
    own commands/pk-doctor.md. Closes
    BACK-20260423_1103-ToughMeadow-pk-doctor-skill-missing.
  • feat(pk-doctor): mcp_config_drift check. Reads
    context/.processkit-mcp-manifest.json, recomputes per-skill
    mcp-config.json sha256es, and reports manifest staleness (WARN)
    or — in a derived-project context (aibox.lock + .mcp.json at
    repo root) — missing processkit servers in .mcp.json's
    mcpServers map (ERROR with a "run aibox sync" hint). Surfaces
    the exact failure mode that motivated TrueQuail.
  • feat(release-semver): scripts/generate-mcp-manifest.py. Writes
    context/.processkit-mcp-manifest.json + src/ mirror with a sha256
    per-skill-config and an aggregate hash. Wired into
    scripts/build-release-tarball.sh so every release tarball ships a
    fresh manifest. Stable contract for downstream installers (aibox)
    to detect per-skill-config drift independent of the processkit
    version delta — see
    DEC-20260423_2049-VastLake-truequail-split-processkit-ships and
    projectious-work/aibox#54. Closes the processkit-side of
    BACK-20260423_0829-TrueQuail-aibox-installer-reconcile-mcp.
  • feat(pk-doctor): ship commands/pk-doctor.md. v0.19.1 declared
    the slash command in SKILL.md metadata but forgot the file, so
    /pk-doctor was never registered in derived projects. This release
    ships the file in both trees and adds commands_consistency above
    as the prevention mechanism.
  • docs(AGENTS.md): "MCP config manifest" contract section.
    Documents the manifest shape + path so aibox (and any other
    processkit installer) can implement against a stable interface.

Changed

  • chore(skills): reconcile SKILL.md commands: metadata to /pk-
    namespace.
    14 skills had stale <skill>-<verb> names declared in
    metadata while actually shipping /pk-<verb>.md files. This
    release renames the metadata to match shipped filenames (and for
    team-creator, promotes the commands: block out of provides: to
    metadata.processkit.commands: so the new
    commands_consistency check can see it). Drops three entries for
    commands that were declared but never shipped
    (model-recommender-profile, owner-profiling-refine,
    skill-reviewer-bulk-gotchas). No behavioural changes to any
    command. Closes
    BACK-20260423_2055-HappyFinch-skill-md-commands-metadata.

Fixed

  • fix(model-recommender): add missing pyyaml>=6.0 to MCP server's
    PEP 723 header.
    The resolve_model call failed with
    ModuleNotFoundError: No module named 'yaml' when the harness
    invoked uv run server.py (no --script). Smoke-tested live
    returning an 8-layer routing trace for
    ROLE-product-manager@senior. Closes
    BACK-20260423_0829-SteadyCedar-model-recommender-mcp-server.
  • fix(schemas): widen identity-class ID pattern to
    ^(ACTOR|TEAMMEMBER)-[a-zA-Z0-9_-]+$ across five schemas.
    The
    v0.19.0 TeamMember rollout left workitem.assignee,
    decisionrecord.deciders[], discussion.participants[],
    artifact.owner, and metric.owner still requiring ACTOR-*
    only, so MCP writes carrying a TEAMMEMBER-* subject failed
    jsonschema validation. Chose alternation over a clean flip to
    avoid retroactively invalidating ~90 residual ACTOR-* references
    in 44 entity files. Smoke-tested live post-harness-restart with
    both a create_workitem(assignee="TEAMMEMBER-cora") and a
    record_decision(deciders=["TEAMMEMBER-cora"]). Closes
    BACK-20260422_1643-BraveDove-schema-drift-workitem-assignee.
  • fix(log): add missing required actor field to
    LOG-20260422_1643-CalmAnt-workitem-created.
    Pre-TeamMember MCP
    server wrote a LogEntry without populating actor, so
    pk-doctor --category=schema_filename reported a schema ERROR.
    actor: system accurately reflects the unattributed machine-origin
    of the event. One-off direct edit; no MCP tool exists to patch
    append-only LogEntries.

External

  • projectious-work/aibox#54 — aibox-side reconcile-on-manifest-drift
    tracking issue. BACK-20260423_0829-TrueQuail stays open in the
    processkit backlog until that PR lands.

v0.19.1 — local-only release bulletproofing (skill flow + pk-doctor release_integrity)

22 Apr 15:44

Choose a tag to compare

Local-only release bulletproofing — no CI workflows. Addresses the
v0.19.0 post-mortem finding that a tag push does not create a GitHub
Release. Supersedes DEC-20260422_0926-MerryArch (CI workflow
approach, rejected on vendor-lock + cost grounds) with
DEC-20260422_1348-SnowyWolf (skill flow + doctor detection).

Added

  • feat(pk-doctor): 6th check category release_integrity — walks every local v* git tag, probes GitHub via gh release view for a matching Release, and WARNs on any tag without one. INFO when gh is unavailable or the tag set is empty. Opt-out via PK_DOCTOR_SKIP_RELEASE_INTEGRITY=1; tag-scan cap via PK_DOCTOR_RELEASE_INTEGRITY_MAX (default 50). Each WARN carries a ready-to-paste gh release create <TAG> command with CHANGELOG extraction inlined. See DEC-20260422_1348-SnowyWolf-local-only-release-bulletproofing.

Changed

  • chore(release-semver): collapse /pk-release into a single bulletproof flow. SKILL.md (both trees) rewritten with a 9-step recipe that prepares, publishes, and verifies in one turn — the release is not considered complete until gh release view vX.Y.Z succeeds (step 8). /pk-publish retained as a recovery alias for historical tags that are missing a Release. New Gotcha: "git push --tags is not a GitHub Release." Closes BACK-20260422_0925-MightyOtter-v0-19-1-release.

Fixed

  • fix(release flow): v0.19.0 tag was pushed without a corresponding GitHub Release — the prepare phase of release-semver completed but the publish phase was skipped. v0.19.0 Release was created manually; v0.19.1 ships the prevention (collapsed flow) and detection (release_integrity check) mechanisms.

v0.19.0 — TeamMember model + 51-role catalog + Model artifacts + binding routing

22 Apr 09:21

Choose a tag to compare

[v0.19.0] — 2026-04-22

Added (v0.19.0 architecture refactor)

  • feat(team-manager): new skill replacing actor-profile. Persistent
    participants are now TeamMembers (humans, named AI personas,
    services), each living as a directory tree:
    context/team-members/<slug>/ with team-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). See DEC-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 a private/ subdirectory for developer-local notes
    (gitignored via .gitignore.example shipped at repo root).

  • feat(team-member export/import): export_team_member produces a
    versioned tarball excluding journal/, relations/, and
    private/ by default; sensitivity-tagged files (pii, confidential)
    are redacted. import_team_member validates the A2A card signature
    field and creates the entity tree on import.

  • feat(role catalog): expanded from 8 to 51 curated roles under
    context/roles/. Function-grouped (engineering-software, platform-infra,
    data-ml, security, architecture, design-ux, marketing, sales-customer,
    finance, legal-compliance, executive, etc.). Seniority no longer
    baked into slugs
    — pure ordinal attribute with ladder
    junior → specialist → expert → senior → principal.
    Bindings (not role files) decide what each rung maps to in
    (model, effort). See DEC-20260422_0234-BraveFalcon.

  • feat(model artifacts): models become first-class entities under
    context/models/, one file per (provider, family) with
    versions[] nested. 34 model artifacts replace the monolithic
    model_scores.json registry (which becomes a compiled cache).
    Each model carries equivalent_tier in 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] (aliases extra-high → xhigh
    at the Anthropic adapter boundary). See DEC-20260422_0234-LoyalComet.

  • feat(bindings): model-assignment binding 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-routing slash command
    for debugging. Default binding pack at
    context/skills/processkit/model-recommender/default-bindings/MANIFEST.yaml
    ships 30 starter bindings (10 roles × 3 seniorities) materialised into
    context/bindings/.

  • feat(pk-doctor): 5th check category team_consistency. Wraps
    team-manager.check_all() and surfaces the 10 team-consistency check
    codes in pk-doctor's standard report (schema drift, tier-missing,
    dangling refs, name collision, name-pool compliance, orphan files,
    sensitivity placement, private-dir gitignore, memory file headers,
    card staleness).

  • chore(.gitignore.example): bundle of all proposed processkit
    ignores (cache/state, context/**/private/, model cache, harness
    configs, OS/IDE/Python noise) shipped at repo root for adoption by
    new processkit projects.

Removed

  • actor-profile skill superseded by team-manager. 8 role-class
    actors removed (ACTOR-developer, ACTOR-assistant, ACTOR-pm-claude,
    ACTOR-{sr,jr}-{architect,researcher,developer}); identity-class
    ACTOR-20260421_0144-AmberDawn-legacy-historical-backfill removed
    (not meaningful); ACTOR-20260421_0144-ThriftyOtter-owner migrated
    to TEAMMEMBER-thrifty-otter. 7 legacy role files
    (ROLE-{developer,project-manager,senior-architect,senior-researcher, junior-architect,junior-developer,junior-researcher}) removed,
    superseded by entries in the curated 51-role catalog. 8 legacy
    role-assignment bindings removed.

Fixed

  • fix(mcp): systemic auto-log actor fix — every entity-mutating MCP tool (create_, transition_, link_, update_, apply_, reject_, start_, end_, open_, record_, supersede_, deactivate_) now passes actor= to log helpers, producing schema-valid LogEntries. Covers the bug pattern previously fixed for create_actor in WarmGrove. Includes backfill of 6 pre-fix-emission LogEntries from this session and drift-allowlist entry for template-only scripts/ subdirs.
  • fix(actor-profile): create_actor MCP tool now emits actor.created LogEntry with spec.actor = new actor id (self-attribution); previously the emitted LogEntry was schema-invalid (missing required field). Closes BACK-20260421_0156.

Changed

  • chore(mcp): skill-consultation prompt added to every entity-mutating MCP tool description across all processkit servers (provider-neutral replacement for pre-tool-use hooks). Closes BACK-20260411_0802-SolidCrow.
  • chore(AGENTS): slim root AGENTS.md to <60 lines of core content; domain-specific instructions moved into their owning skills; explicit if/then skill guards added. Closes BACK-20260411_0802-EagerSpruce.
  • chore(grooming): rename 4 process files and 1 artifact to match canonical metadata.id prefixes (PROC-/ART-). pk-doctor WARN residual eliminated (5 → 0). Closes pk-doctor Phase 2 filename-rename intent.

Added

  • Renamed skill: morning-briefing → status-briefing (provider-neutral; time-of-day agnostic). Content migration emitted for downstream projects.

  • New skill: retrospective — /pk-retro generates post-release blameless retrospectives (4 signals: release_summary, timeline, workitems, drift; dual-emit Artifact+LogEntry; --auto-workitems for proposed follow-ups; --verbose for full narrative including Appendix A raw signal dumps). See BACK-20260420_1340-LoyalFrog-add-pk-retro-skill.

  • feat(pk-doctor): new health-check aggregator skill + /pk-doctor slash command (Phase 1). Detect-only by default; 4 checks: schema+filename validation against src/context/schemas/, sharding (logs YYYY/MM, migrations state-bucket), stale pending migrations, src/context drift. --fix/--fix-all opt-in; fixes route through existing MCP write tools (no hand-edits). Each run emits a doctor.report LogEntry via event-log MCP. See DEC-20260420_1631-WiseGarnet and BACK-20260420_1631-ProudGlade.

  • feat(migration-management): new MCP server exposing 5 tools
    (fixes #9).
    list_migrations, get_migration, start_migration,
    apply_migration (with implicit-start when called from pending),
    and reject_migration. Each write-side tool stamps the appropriate
    timestamp (started_at / applied_at / rejected_at), moves the
    Migration file between pending/, in-progress/, and applied/
    subdirectories, refreshes context/migrations/INDEX.md (preserving
    the Applied-table Notes column and the ## CLI Migrations tail
    section), and writes a migration.* event via the side-effect log
    helper. Rejected migrations park under applied/ and are listed in
    a dedicated ## Rejected INDEX.md section. Adds
    spec.started_at to the Migration schema (optional,
    backward-compatible). See
    DEC-20260420_1342-WarmClover (shape) and
    DEC-20260420_1353-ProudReef (5 refinements).