Preserve skill identity and add the governed skill-fit view #96
No reviewers
Labels
No labels
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/agent-proxy!96
Loading…
Reference in a new issue
No description provided.
Delete branch "skill-fit-view"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #70.
The prerequisite was real
The issue flags a product prerequisite: "the raw ledger retains
ward.skillobservations and selected-skill claims, but the current materializer and operational views do not preserve skill names for querying." That held exactly as written.MaterializedTrajectorycarriedmodels,providers,harnesses, andactor_roles— and no skill dimension.grep skill app/trajectory/returned nothing outside the agent-compose adapter. So the query contract had to land before the skill could be advertised, which is the order taken here.Selection and use are separate facts
The design decision worth reviewing. Materialization now keeps three things:
skills_selected— capability claims from the agent-composeactor.observedeventskills_used— skills Ward actually observed viaward.skillskill_use_counts— observed counts per skillThey are never merged into a single "the skill was involved" signal, because the two sources answer different questions and can legitimately disagree:
selected_without_observed_use. This is missing evidence, not evidence the skill went unused — an adapter that never ran produces the identical shape. Dropping the row would silently assert "never selected", a different and wrong claim.That is the issue's "keep unresolved disagreement and missing evidence explicit" criterion, and both the view and the skill's instructions carry it.
Schema change
MATERIALIZATION_SCHEMA_VERSIONmoves 1.0 → 1.1. The three fields are additive with defaults, so records written before this change still validate — there is a test pinning that. Worth a reviewer's eye since other services build against the trajectory contract, though this is the materialization schema rather than the contract-v1 event envelope, which is untouched.Surface added
skill_fitview — grouped by skill, role, harness, and model. Reports observed use and counts, trajectory counts, completion rate, retries, fallbacks, human interventions, evaluation labels, disagreement, late records, access tier, freshness, and source trajectory ids.ward exec trajectory-query -- skill-use— filters by exact--skill,--role,--harness,--model, and surfacesselected_without_observed_useas its own block.agent-proxy-evaluate-skill-useskill — instructions require reporting unresolved disagreement rather than resolving it, and forbid reading the aggregate as causal proof or as authority.Access tiers are enforced by the existing
AccessPolicy, so restricted evidence is withheld rather than redacted. Both directions are tested.Verification
pytest— 268 passed, 10 of them newruff/black/mypy— cleanpre-commit run --all-files— every hook passesdocs/operational-views.mdlanded at exactly 80 lines against the 80-line cap; I trimmed the prose rather than adding a new entry to #88's backlogOne thing I did not do
The issue asks the view to report "observed usage ... evaluation, access, freshness, and source trajectories", which is covered. It does not ask for a time-window or repository filter, and I did not add one — the underlying view has no time dimension, and
harness-fitalready documents that same limit. The skill's instructions state it.