Improvement ① — close the telemetry blind spot. Skill usage was logged on one channel (the main-session Skill tool); subagent, chain, and background invocations were invisible. This PR tags every invocation with the channel it fired through, so the activation matrix can be computed from real telemetry instead of static analysis.
user types /ork:x ──[PreToolUse·Skill]──▶ logged (main channel) skill A → /ork:B ──[same hook]──────────▶ logged (also main — chain split is a follow-up) agent calls Skill ─[isolated context]───▶ NEVER LOGGED ← the big blind spot ci-sentinel headless ─[separate session]─▶ NEVER LOGGED
Read one channel → the prior audit's "20/31 dead". The fix is to measure the other channels, starting with the largest: subagent.
Every main-session Skill call (user-direct or chained). Enriched skill-tracker writes a channel:"main" row.
NEW handler reads agent_transcript_path, extracts every Skill tool_use, writes channel:"subagent" tagged with the agent.
Split main → direct vs chain via a per-turn skill stack. Schema field reserved; capture deferred.
Tag cron/headless runs (ci-sentinel, dream). Schema field reserved; capture deferred.
One JSONL row per invocation in .claude/logs/skill-channels.jsonl, schema-locked + drift-gated. Backward compatible — readers default missing channel to main.
SkillChannelEntry schema + validator + lock test (SCHEMA_LOCKED → 8)recordSkillChannel() buffered writerskill-tracker enriched → channel:"main"skill-channel-tracker → channel:"subagent"chain: per-turn skill-stack to split direct vs chainedbackground: tag headless/cron sessions/ork:doctor: "wired but never fired in 90d" — static + live/ork:telemetry-inspect already surfaces the new sink ♻️