Creating Distillations
Per-distillation projection of one source onto one task axis. Consumes a (source, task) pair plus an optional lens-set; produces one file plus an index update.
Invoked by:
creating-applications, per-distillation orchestration: once per applicable (source, task) distillation.
ingesting-resources Pass G: once per task axis during a new-source ingest.
Rationale, template structure, evidence discipline, four-outcome lens-applicability gate, and failure modes live in projection-protocol.md. This file is the runbook; that one is the rationale. Read both before invoking.
When to use
- Pass G of
ingesting-resources. Per task axis in the corpus, the ingest skill calls this skill once with the new (source, task) pair. The applicability gate decides whether to produce a distillation or skip.
- Per-distillation orchestration in
creating-applications. When a new application is being assembled, the orchestrator calls this skill once per (source, task) distillation named in the task spec. Often dispatched as parallel sub-agents.
- Operator follow-up. A new task axis has landed and the operator notices a source whose existing deep reference predates the axis: invoke this skill directly to project that source onto the new task.
- Re-projection after a deep-ref update. The deep reference has been sharpened (often via Pass G cycling: see
projection-protocol.md §Cycling); the distillation needs to reflect the updated deep.
When not to use
- The deep reference does not yet exist. Run
ingesting-resources first.
- The task axis does not yet exist (no distillation directory, no index, no build profile). Run
creating-tasks → creating-applications first.
- The operator wants to project all applicable sources onto a new axis. That's the per-distillation orchestration job inside
creating-applications: invoke it instead, and it will call this skill once per source.
Pre-flight
Both checks must pass:
- Verified deep reference exists. Path:
corpus.commons/{corpus}/references/{slug}-deep.md. The deep must have passed Pass I (source-only audit). If the deep does not exist, abort with the operator-facing message "Deep reference for {slug} not found; run ingesting-resources first."
- Task axis exists. Path:
corpus.commons/{corpus}/distillations/{task-name}/. The directory plus task-index.json (and the human-readable {TASK-UPPERCASE}-DISTILLATION-INDEX.md operator-inspection view) must exist. If any are missing, abort with "Task axis {task-name} not yet scaffolded; run creating-applications first."
If both pre-flight checks pass, the skill proceeds. Otherwise it fails loudly and names the gate that closed.
Inputs
- The existing task axis name in kebab-case (e.g.,
decision-making, learning-from-incidents).
- The slug of the existing verified reference (e.g.,
openstax-organizational-behavior).
- Optionally, one or more lens names. Lens names refer to specs at
corpus.commons/{corpus}/lenses/{lens-slug}.md. If a named lens has no spec file, abort and direct the operator to run creating-lenses first.
Outputs
- The distillation file at
corpus.commons/{corpus}/distillations/{task-name}/{slug}-{task-name}.md, produced when Pass G.0's source-applicability gate fires clear yes or operator-confirmed yes. The distillation includes a ## Runtime triggers this source addresses section that maps the source's content to specific triggers from the task spec's seed table (field 2a), with teach-in-the-moment scripts. See "Trigger-grain projection" below.
- An update to the distillation index for the task, citing the new distillation in the appropriate phase sections and adding rows to the per-phase runtime listener tables for each trigger the source addresses.
- For each lens where the per-distillation applicability gate fires beyond clear no:
- Partial reshape: a
## Through the {lens-name} lens section inside the main distillation.
- Deep reshape: a separate per-lens distillation at
corpus.commons/{corpus}/distillations/{task-name}/{slug}-{task-name}-{lens-name}.md.
- A skip log when Pass G.0 fires clear no or operator-confirmed no. No file is generated; the skip is recorded with the reason. Lens skips at clear no are recorded similarly.
If the skill is invoked under parallel-batch orchestration, index updates may be written to a staging file (_ingest_{task}_{slug}.md in the distillation directory) instead of the canonical index, to be merged by the orchestrator's consolidator step.
Procedure
The detailed step-by-step procedure—applicability gate logic, projection-template structure, evidence discipline, lens-as-optional-framing—lives in projection-protocol.md. The runbook summary:
- Read the verified deep reference. The deep is the only input at this step; the source is not re-read. (See
projection-protocol.md §Failure modes for why.)
- Run the source-applicability gate (
projection-protocol.md §Pass G.0). Three outcomes: clear yes → proceed; clear no → log skip and exit; ambiguous → ask the operator and proceed per their call.
- Project the source onto the task using the standard nine-section template (
projection-protocol.md §Projection template). The structure is uniform across the corpus; do not deviate, add sections, or reorder.
- For each named lens, run the lens-applicability gate (
projection-protocol.md §Lens-as-optional-framing). Four outcomes:
- Clear no. No additional artefact. Log the skip.
- Clear yes, partial reshape. Add a
## Through the {lens-name} lens section inside the distillation.
- Clear yes, deep reshape. Produce a separate per-lens distillation file.
- Ambiguous. Ask the operator; proceed per their call.
- Trigger-grain projection. Read the task spec's field 2a (seed trigger→response table) and identify which triggers this source can address. For each:
- Add a row to the distillation's
## Runtime triggers this source addresses section: trigger | source's content that addresses it | teach-in-the-moment script (1-3 sentences).
- Add a row to the distillation index's runtime listener table for the appropriate phase: trigger | framework name + cite to this distillation.
- The source may extend the seed table (surface triggers the spec didn't anticipate but the source clearly addresses); log these extensions in a
## Trigger extensions surfaced by this source section so the operator can fold them back into the task spec.
- If the source addresses zero triggers in the seed table, that is a signal Pass G.0 should reconsider: the source may apply at the phase level but not at the moment level, which means the distillation will be shelf material at runtime even if the phase-routing fires it. Default: still produce the distillation but flag the trigger-mismatch in the distillation header so the operator can address it.
- Update the distillation index to cite the new file(s) in the phase sections where they apply and add trigger-table rows for the triggers the source addresses. If running under parallel-batch orchestration, write to a staging file instead and let the orchestrator's consolidator merge it.
- Run
npm run build to verify the affected profile compiles cleanly. Required after every Mode-2 run when invoked standalone; the orchestrator runs a final build after all per-distillation invocations complete when running under creating-applications.
Re-runs and overwrites
If the distillation already exists for the (source, task) pair, the skill does not silently overwrite. Two paths:
- Refresh after a deep-ref update. Delete or rename the existing distillation; rerun the skill. The applicability check runs again; the file is regenerated from the current deep.
- Merge changes. The skill does not merge. Generate the new version into a temporary path, diff against the existing, and apply the diff manually.
Failure modes to watch
The full catalogue with worked examples lives in projection-protocol.md §Failure modes. The headlines:
- Skipping the source-applicability gate. Generating a distillation for a (source, task) pair where the source doesn't actually fit produces a file that strains, reaches, and reads as filler. Better to skip and record the skip.
- Skipping the lens-applicability gate. Pre-projecting against every named lens by default inflates the corpus with thin lens-shaped variations of the same content. The default for lenses is do nothing; pre-project only where the lens materially reweights the distillation.
- Re-reading the source. Distillation projection is from the verified deep, not from the source. Re-reading reintroduces failure modes the deep ref has already audited out (training-prior leakage, drift, evidence-marker confusion).
- Smuggling new claims into distillations. If a concept is not in the deep reference, it does not belong in the distillation. Re-ingest if the concept warrants inclusion.
- Re-extracting verbatim from the source at Pass G. Verbatim blockquotes in distillations are copies of already-audited Pass D blockquotes from the deep ref, with the evidence marker preserved. Re-extracting from the source reopens the failure modes Pass D closed.
- Mismatched task vocabulary. The distillation's working vocabulary should be the task's own: decisions for decision-making, stakeholders for stakeholder-engagement, incidents for incident-review, etc. Source-author vocabulary is preserved in the deep reference; task-applied vocabulary lives in the distillations.
Related skills
creating-tasks: scopes a new task axis. Run before this skill if the named task axis does not yet exist.
creating-applications: assembles a new application. Invokes this skill once per (source, task) distillation.
ingesting-resources: runs the 9-pass protocol. Pass G calls this skill once per task axis the corpus carries.
creating-lenses: designs a lens spec. Run before this skill if a named lens doesn't yet exist.
matching-references: find an existing source by topic before assuming a distillation is needed.
1---2name: creating-distillations3description: Projects one existing verified reference onto one existing task axis, gated by a per-distillation applicability check. Produces one distillation file at `corpus.commons/{corpus}/distillations/{task}/{slug}-{task}.md`, optionally with lens-applied sections or per-lens variants. Invoked by `ingesting-resources` Pass G during new-source ingestion and by `creating-applications` during per-distillation orchestration when assembling a new application.4---56# Creating Distillations78Per-distillation projection of one source onto one task axis. Consumes a (source, task) pair plus an optional lens-set; produces one file plus an index update.910Invoked by:11- `creating-applications`, per-distillation orchestration: once per applicable (source, task) distillation.12- `ingesting-resources` Pass G: once per task axis during a new-source ingest.1314Rationale, template structure, evidence discipline, four-outcome lens-applicability gate, and failure modes live in [`projection-protocol.md`](projection-protocol.md). This file is the runbook; that one is the rationale. Read both before invoking.1516## When to use1718- **Pass G of `ingesting-resources`.** Per task axis in the corpus, the ingest skill calls this skill once with the new (source, task) pair. The applicability gate decides whether to produce a distillation or skip.19- **Per-distillation orchestration in `creating-applications`.** When a new application is being assembled, the orchestrator calls this skill once per (source, task) distillation named in the task spec. Often dispatched as parallel sub-agents.20- **Operator follow-up.** A new task axis has landed and the operator notices a source whose existing deep reference predates the axis: invoke this skill directly to project that source onto the new task.21- **Re-projection after a deep-ref update.** The deep reference has been sharpened (often via Pass G cycling: see [`projection-protocol.md`](projection-protocol.md) §Cycling); the distillation needs to reflect the updated deep.2223## When not to use2425- The deep reference does not yet exist. Run `ingesting-resources` first.26- The task axis does not yet exist (no distillation directory, no index, no build profile). Run `creating-tasks` → `creating-applications` first.27- The operator wants to project *all* applicable sources onto a new axis. That's the per-distillation orchestration job inside `creating-applications`: invoke it instead, and it will call this skill once per source.2829## Pre-flight3031Both checks must pass:32331. **Verified deep reference exists.** Path: `corpus.commons/{corpus}/references/{slug}-deep.md`. The deep must have passed Pass I (source-only audit). If the deep does not exist, abort with the operator-facing message *"Deep reference for {slug} not found; run `ingesting-resources` first."*342. **Task axis exists.** Path: `corpus.commons/{corpus}/distillations/{task-name}/`. The directory plus `task-index.json` (and the human-readable `{TASK-UPPERCASE}-DISTILLATION-INDEX.md` operator-inspection view) must exist. If any are missing, abort with *"Task axis {task-name} not yet scaffolded; run `creating-applications` first."*3536If both pre-flight checks pass, the skill proceeds. Otherwise it fails loudly and names the gate that closed.3738## Inputs3940- The existing task axis name in kebab-case (e.g., `decision-making`, `learning-from-incidents`).41- The slug of the existing verified reference (e.g., `openstax-organizational-behavior`).42- Optionally, one or more lens names. Lens names refer to specs at `corpus.commons/{corpus}/lenses/{lens-slug}.md`. If a named lens has no spec file, abort and direct the operator to run `creating-lenses` first.4344## Outputs4546- **The distillation file** at `corpus.commons/{corpus}/distillations/{task-name}/{slug}-{task-name}.md`, produced when Pass G.0's source-applicability gate fires *clear yes* or *operator-confirmed yes*. **The distillation includes a `## Runtime triggers this source addresses` section** that maps the source's content to specific triggers from the task spec's seed table (field 2a), with teach-in-the-moment scripts. See "Trigger-grain projection" below.47- **An update to the distillation index** for the task, citing the new distillation in the appropriate phase sections **and adding rows to the per-phase runtime listener tables** for each trigger the source addresses.48- **For each lens** where the per-distillation applicability gate fires beyond *clear no*:49 - **Partial reshape:** a `## Through the {lens-name} lens` section inside the main distillation.50 - **Deep reshape:** a separate per-lens distillation at `corpus.commons/{corpus}/distillations/{task-name}/{slug}-{task-name}-{lens-name}.md`.51- **A skip log** when Pass G.0 fires *clear no* or *operator-confirmed no*. No file is generated; the skip is recorded with the reason. Lens skips at *clear no* are recorded similarly.5253If the skill is invoked under parallel-batch orchestration, index updates may be written to a staging file (`_ingest_{task}_{slug}.md` in the distillation directory) instead of the canonical index, to be merged by the orchestrator's consolidator step.5455## Procedure5657The detailed step-by-step procedure—applicability gate logic, projection-template structure, evidence discipline, lens-as-optional-framing—lives in [`projection-protocol.md`](projection-protocol.md). The runbook summary:58591. **Read the verified deep reference.** The deep is the only input at this step; the source is not re-read. (See `projection-protocol.md` §Failure modes for why.)602. **Run the source-applicability gate** (`projection-protocol.md` §Pass G.0). Three outcomes: clear yes → proceed; clear no → log skip and exit; ambiguous → ask the operator and proceed per their call.613. **Project the source onto the task** using the standard nine-section template (`projection-protocol.md` §Projection template). The structure is uniform across the corpus; do not deviate, add sections, or reorder.624. **For each named lens, run the lens-applicability gate** (`projection-protocol.md` §Lens-as-optional-framing). Four outcomes:63 - **Clear no.** No additional artefact. Log the skip.64 - **Clear yes, partial reshape.** Add a `## Through the {lens-name} lens` section inside the distillation.65 - **Clear yes, deep reshape.** Produce a separate per-lens distillation file.66 - **Ambiguous.** Ask the operator; proceed per their call.675. **Trigger-grain projection.** Read the task spec's field 2a (seed trigger→response table) and identify which triggers this source can address. For each:68 - Add a row to the distillation's `## Runtime triggers this source addresses` section: trigger | source's content that addresses it | teach-in-the-moment script (1-3 sentences).69 - Add a row to the distillation index's runtime listener table for the appropriate phase: trigger | framework name + cite to this distillation.70 - The source may extend the seed table (surface triggers the spec didn't anticipate but the source clearly addresses); log these extensions in a `## Trigger extensions surfaced by this source` section so the operator can fold them back into the task spec.71 - If the source addresses zero triggers in the seed table, that is a signal Pass G.0 should reconsider: the source may apply at the *phase* level but not at the *moment* level, which means the distillation will be shelf material at runtime even if the phase-routing fires it. Default: still produce the distillation but flag the trigger-mismatch in the distillation header so the operator can address it.726. **Update the distillation index** to cite the new file(s) in the phase sections where they apply *and* add trigger-table rows for the triggers the source addresses. If running under parallel-batch orchestration, write to a staging file instead and let the orchestrator's consolidator merge it.737. **Run `npm run build`** to verify the affected profile compiles cleanly. Required after every Mode-2 run when invoked standalone; the orchestrator runs a final build after all per-distillation invocations complete when running under `creating-applications`.7475## Re-runs and overwrites7677If the distillation already exists for the (source, task) pair, the skill does not silently overwrite. Two paths:7879- **Refresh after a deep-ref update.** Delete or rename the existing distillation; rerun the skill. The applicability check runs again; the file is regenerated from the current deep.80- **Merge changes.** The skill does not merge. Generate the new version into a temporary path, diff against the existing, and apply the diff manually.8182## Failure modes to watch8384The full catalogue with worked examples lives in [`projection-protocol.md`](projection-protocol.md) §Failure modes. The headlines:8586- **Skipping the source-applicability gate.** Generating a distillation for a (source, task) pair where the source doesn't actually fit produces a file that strains, reaches, and reads as filler. Better to skip and record the skip.87- **Skipping the lens-applicability gate.** Pre-projecting against every named lens by default inflates the corpus with thin lens-shaped variations of the same content. The default for lenses is *do nothing*; pre-project only where the lens materially reweights the distillation.88- **Re-reading the source.** Distillation projection is from the verified deep, not from the source. Re-reading reintroduces failure modes the deep ref has already audited out (training-prior leakage, drift, evidence-marker confusion).89- **Smuggling new claims into distillations.** If a concept is not in the deep reference, it does not belong in the distillation. Re-ingest if the concept warrants inclusion.90- **Re-extracting verbatim from the source at Pass G.** Verbatim blockquotes in distillations are *copies* of already-audited Pass D blockquotes from the deep ref, with the evidence marker preserved. Re-extracting from the source reopens the failure modes Pass D closed.91- **Mismatched task vocabulary.** The distillation's working vocabulary should be the task's own: *decisions* for decision-making, *stakeholders* for stakeholder-engagement, *incidents* for incident-review, etc. Source-author vocabulary is preserved in the deep reference; task-applied vocabulary lives in the distillations.9293## Related skills9495- `creating-tasks`: scopes a new task axis. Run before this skill if the named task axis does not yet exist.96- `creating-applications`: assembles a new application. Invokes this skill once per (source, task) distillation.97- `ingesting-resources`: runs the 9-pass protocol. Pass G calls this skill once per task axis the corpus carries.98- `creating-lenses`: designs a lens spec. Run before this skill if a named lens doesn't yet exist.99- `matching-references`: find an existing source by topic before assuming a distillation is needed.