dunk/skills/dln-linear/SKILL.md
This skill should be used when the DLN orchestrator routes a learner whose Phase is Linear, or when a user explicitly requests a Linear session. Guides factor discovery (50% delivery / 50% elicitation) — finding shared structures across procedural chains and transforming them into transferable principles. Triggers: DLN orchestrator determines Phase = Linear, or explicit requests like "run a Linear session on [topic]", "help me find factors across my chains", "find patterns across my [domain] chains", "what do my [domain] chains have in common".
npx skillsauth add luqmannurhakimbazman/ashford dln-linearInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
50% delivery / 50% elicitation. The learner already has working chains — they can execute procedures. The goal is NOT to teach new chains, but to help the learner discover that chains they already know share abstract structure. These shared structures are called factors.
A factor is a principle that explains why multiple chains work, stated without domain-specific language. The learner who can articulate factors has compressed their knowledge — they can predict outcomes in unseen problems by recognizing which factor applies.
Linear phase is inherently harder than Dot — the learner is being asked to think abstractly for possibly the first time in this domain. Expect frustration. Normalize it proactively:
Never frame abstraction difficulty as a learner deficit. Frame it as a feature of the phase.
Before any teaching begins, write the session plan to Notion. Follow the merge protocol in @${CLAUDE_PLUGIN_ROOT}/skills/dln/references/merge-protocol.md with action plan-write. Include session_number: <Session Count + 1> and the following plan content:
---
## Session [N] — [date] (Linear Phase)
### Plan
- Weakness remediation: [top 1-2 items from Weakness Queue — may include Dot-level concepts that decayed or Linear-level factors that are `partial`]
- Remediation strategy: [for each: re-activate → diagnose → intervene → re-check]
- Chains to compare: [which chains from Knowledge State will be juxtaposed]
- Target factors: [hypothesized shared structures to discover]
- Upgrade operator goals: [Dot→Linear question upgrades to practice]
### Progress
(populated by sync loop)
The agent writes the plan and returns a re-anchor payload. Teach from the returned payload.
Read the ## Syllabus section from the page body. All syllabus topics should be covered before Linear begins (enforced by Dot phase gate). The syllabus provides context for what the learner was taught — use it to understand the scope of their foundation when selecting chains for cross-pollination.
If the user has added new topics to the syllabus since entering Linear phase, note them but do not teach them — these are Dot-level concepts. Park them in Open Questions with: "New syllabus topic added — needs Dot-level concept delivery." (Any uncovered syllabus topic in Linear phase was necessarily added after the Dot gate, which requires full syllabus coverage before passing. Treat these as post-gate additions.)
Run this after the session plan write but BEFORE the warm-up problem (Step 1). The learner should retrieve from memory before encountering any new problems.
If the orchestrator's review protocol already ran this session (indicated by review_completed: true in the context), skip the retrieval warm-up — the review protocol already served this purpose.
"Before we dive in — name every factor you've discovered so far. Don't explain them yet, just list them."
Wait for their response. Do not hint.
Factor explanation — Pick one factor they named (ideally one relevant to today's planned chain comparisons) and ask them to explain it structurally:
"Take [factor name]. Which chains does it connect? What's the structural relationship it captures?"
"There's a factor you identified in a previous session that you didn't mention. It connects [chain A] and [chain B]. Can you reconstruct it?"
This "cued recall" attempt is still a retrieval event — even if they can't recover it, the attempt primes re-learning.
Score silently:
Respond with feedback:
"You recalled [N] of [M] factors. Your explanation of [factor] was [structural/surface-level]. [If forgotten factor:] We'll revisit the connection between [chain A] and [chain B] today."
Adjust session plan — If the learner forgot factors that are prerequisites for today's planned comparisons, reorder the session to re-discover those factors first.
Run the merge protocol (@${CLAUDE_PLUGIN_ROOT}/skills/dln/references/merge-protocol.md) with action replace. Include retrieval results in progress notes.
After each of the following boundaries, run the merge protocol in @${CLAUDE_PLUGIN_ROOT}/skills/dln/references/merge-protocol.md with action replace:
Boundary outcomes — gather these before running the merge protocol:
session_number: current session number (Session Count + 1)- Cross-pollination [Chain A vs Chain B] — learner identified [shared structure / missed it]. Precision: [vague/structural/transferable].
- Factor hypothesis: "[learner's stated factor]" — rating: [vague/structural/predictive]. [Notes on precision pushback.]
- Upgrade operator: converted [Dot question] → [Linear question]. [Success/needed guidance.]
## Factors, updated chainsOn agent return — follow the learner-generated checkpoint, plan adjustment, calibration-driven adjustment, and Notion failure handling protocols in @${CLAUDE_PLUGIN_ROOT}/skills/dln/references/sync-protocol.md.
Present a new problem in the learner's domain. Use the Chains from the Knowledge State to inform problem selection — pick a scenario where existing chains should apply but might break or feel clunky. Let them attempt it using their existing chains. Observe:
Do not correct mistakes yet. The goal is to surface the limits of chain-level thinking.
If the Weakness Queue contains items, select the warm-up problem to specifically exercise the weakest item. For example:
partial factor, choose a problem that requires that factor to solve.After the warm-up, run remediation on any items that the learner struggled with, using the Remediation Protocol from the Dot phase (re-activate → diagnose → intervene → re-check). Update mastery and the Weakness Queue via dln-sync.
Spend at most the first quarter of the session on warm-up + remediation. Then proceed to new cross-pollination work.
Monitor for the same frustration signals as Dot phase (see @${CLAUDE_PLUGIN_ROOT}/skills/dln-dot/references/dot-protocol.md section 12). Linear phase has additional signals:
| Signal | Severity | |--------|----------| | "I don't see the connection" repeated 3+ times | High | | Reverting to Dot-level answers ("because that's what happens") instead of factor-level | Medium | | Expressing doubt about the process itself ("Why are we comparing these?") | Medium |
Response protocol is the same: pause, acknowledge, simplify (strip to two chains with the most obvious shared structure), quick win, re-approach.
Take two chains the learner knows and ask:
"What do these have in common? Where do they share structure?"
Use the cross-pollination question templates from @references/linear-protocol.md. Guide them to see the shared factor by progressively stripping domain-specific details. If they struggle, narrow the comparison — point to a specific step in each chain and ask what role it plays.
When running multiple cross-pollination comparisons in a session, do NOT compare related chain pairs consecutively. Instead, interleave:
Blocked (avoid): Compare Chain A vs Chain B. Then compare Chain A vs Chain C. Then compare Chain B vs Chain C.
Interleaved (prefer): Compare Chain A vs Chain B. Then compare Chain D vs Chain E (from a different sub-domain). Then return to Chain A vs Chain C.
The learner must switch contexts between comparisons, forcing them to actively identify which factor applies to each pair rather than riding the momentum of a single line of thinking.
When the Interleave Pool contains factors from previous sessions, mix factor application questions between cross-pollination rounds:
"Before we compare the next pair — you discovered [factor] last session. Does it apply to [chain D] and [chain E]? Why or why not?"
This interleaves factor APPLICATION with factor DISCOVERY, preventing the illusion that new factors always emerge from every comparison (sometimes the right answer is "an existing factor already covers this").
Cross-pollination comparisons have inherently high element interactivity — the learner must hold two chains in working memory simultaneously while abstracting shared structure. Manage load as follows:
When comparing two chains, render them side by side with visual alignment of structurally similar steps. After the learner identifies the shared factor, render a factor map showing the abstract structure both chains instantiate. Then test transfer by asking the learner to describe a third chain that fits the same pattern. See @references/linear-protocol.md (section 9) for the side-by-side chain, factor map, and factor coverage map templates.
Ask the learner to state the shared factor as a principle. Push for precision:
"It seems like whenever [condition], [consequence] follows regardless of [specific context]."
Use the factor hypothesis prompts from @references/linear-protocol.md. A good factor is:
After the learner states a factor with sufficient precision (structural + transferable), push for one level of "why":
"You've identified the factor: '[learner's factor statement].' Now — why is this true? Why does this pattern keep appearing across different chains?"
This forces the learner to move from pattern recognition to causal understanding of the pattern. A learner who can explain WHY a factor exists has deeper compression than one who can only NAME the factor.
Evaluating factor "why" answers:
After each factor hypothesis is stated and validated, update the factor's mastery status:
| Hypothesis Quality | Status |
|-------------------|--------|
| Structural + transferable + predictive (passes all three precision checks) | mastered |
| Structural but domain-locked, OR transferable but vague, OR predictive on known cases but untested on novel ones | partial |
| Vague ("they're kind of similar"), domain-specific, or non-predictive | not-mastered |
Include factor mastery updates in the dln-sync dispatch payload:
- Knowledge State updates:
- Factor "[factor statement]": status → partial. Evidence: "Hypothesis structural but domain-locked (S[N])."
When a partial factor gets refined to structural + transferable in a later round, upgrade to mastered and append evidence. When a previously mastered factor fails on an unseen problem, downgrade to partial.
Show how recognizing the factor transforms the type of questions the learner can ask:
Use the upgrade operator examples from @references/linear-protocol.md. The learner should practice converting their own Dot questions into Linear questions.
When the learner practices converting Dot questions to Linear questions, alternate between:
The third category is critical. In blocked practice, the learner knows every question has a Linear upgrade because that's the exercise. Interleaving "no upgrade available" questions forces genuine discrimination — they must decide IF an upgrade exists before attempting one.
Before running the phase gate, review the factor mastery table from the latest re-anchor payload:
mastered or partial (no not-mastered items).mastered.If prerequisites are not met, run targeted factor refinement — take the weakest factor and re-run cross-pollination with a new chain pair that exercises it. Update mastery via dln-sync.
Tell the learner: "Before we test your readiness for the next level, let's sharpen a couple of your factors."
Before the phase gate, ask the learner to predict:
"Rate your confidence 1-5 on each:
- Naming 3+ shared factors across your chains: ___
- Predicting an unseen problem's outcome using a factor: ___
- Articulating a minimal principle set covering 80%+ of your chains: ___
Overall: do you think you'll pass into Network phase? (1-5)"
Record predictions verbatim before beginning the gate.
Test whether the learner can:
partial.Dispatch dln-sync with gate mastery updates before announcing the result.
The learner passes only if:
not-mastered, ANDmastered status.Use the full rubric from @references/linear-protocol.md. If they pass, update Phase to Network.
When the learner passes the Linear gate:
"You've done something significant. You started this domain with isolated facts, built them into chains, and now you've discovered the principles underneath. That compression — going from [N chains] to [M factors] — is exactly how experts think. Ready to pressure-test your model?"
Provide a journey summary:
"The journey so far: [total session count] sessions, [concept count] concepts mastered, [chain count] chains built, [factor count] factors discovered. Your mental model is getting more powerful and more compressed."
After the phase gate (pass or fail), surface the calibration data:
"You predicted [X/5] on factor naming — you actually [named N+ factors / struggled to name 3]. You predicted [Y/5] on prediction — you [predicted correctly / missed the key factor]. You predicted [Z/5] on minimal principles — you [articulated a clean set / had redundant principles]. Overall you predicted [W/5] and the result was [pass/fail]."
Name the direction:
Include calibration data in the dln-sync dispatch for ## Calibration Log.
At the end of every session:
1. Self-Summary:
"What did you learn today? What factors did you discover or refine?"
2. Progress Celebration:
3. Milestone Celebrations (when applicable):
| Milestone | Celebration | |-----------|-------------| | First factor discovered | "That's your first abstraction — you just found a pattern that connects multiple chains." | | Factor explains 3+ chains | "This factor is powerful — it covers [N] different processes. That's real compression." | | All chains covered by factors | "Every chain you know is now explained by a smaller set of principles. Your knowledge is organized." | | Phase gate passed | "You've moved from knowing procedures to understanding principles. That's a qualitative shift." |
4. Forward Look:
"Next phase tests whether your principles hold up under pressure. We'll try to break them."
5. Confidence Self-Assessment:
"Rate your confidence 1-5 on each factor we worked with today:" [List each factor from the session] "Which factor feels most solid? Which feels most uncertain?"
6. Confusion Surfacing:
"What are you still confused about? What connections felt forced or incomplete?"
Record all responses. Include factor confidence ratings in the replace-end merge protocol run for ## Calibration Log. Confusion responses go into ## Open Questions.
Do NOT reassure if they express confusion. Validate it: "That's a real gap — we'll address it next session."
7. Engagement Signals Update: Set Momentum based on session outcome:
positiveneutralfragileInclude in the replace-end merge protocol run.
Below-phase (Dot-level) questions — concept recall, definition requests, "what is X?" questions. Redirect gently:
"You know this one — you built a chain for it. Can you recall the chain instead of asking me for the node?"
Above-phase (Network-level) questions — compression attempts, minimal model construction, cross-domain unification. Acknowledge and park:
"That's a great Network-level question. Let's park it in Open Questions and come back to it when you've got more factors to work with."
Most write-back happens continuously via the merge protocol during the sync loop. At session end, run the merge protocol one final time with action replace-end. Include session_number: <Session Count + 1>, along with:
| Target | Field | Action | |--------|-------|--------| | Column property | Last Session | Set to today's date | | Column property | Session Count | Increment by 1 | | Column property | Phase | Set to Network if phase gate passed | | Column property | Next Review | Set to computed date (see orchestrator interval rules) | | Column property | Review Interval | Set to computed interval (see orchestrator interval rules) | | Page body | Knowledge State | Verify Factors and Open Questions are complete | | Page body | Current session Progress | Append final status and exit ritual response |
Database IDs are handled by the dln-sync agent — phase skills do not need them.
development
This skill should be used when the user wants a technical interview preparation roadmap, coding interview study plan, or DSA practice plan tailored to a specific company and role. Trigger phrases include "technical interview roadmap", "coding interview prep for", "DSA roadmap for", "DSA study plan", "leetcode prep for", "what problems should I practice for", "interview study plan", "prep me for the technical rounds", "technical prep for", "what should I study for", "coding prep plan", "roadmap from this JD", "prep me for this role [URL]", or providing a JD URL with a request for technical interview preparation.
development
This skill should be used when the user asks to "write a blog post", "draft a blog post", "create a technical blog", "write a deep dive", "write an explainer", "blog about", "write a tutorial post", "turn this into a blog post", or wants to create technical content for a personal blog or static site. Default platform is Jekyll (Gundersen-style) with KaTeX math, BibTeX citations via jekyll-scholar, and custom figure HTML. Covers deep dives, explainers, tutorials, and project showcases on ML, statistics, computer science, finance, math, and quantitative topics. Generates Markdown with SEO frontmatter, code examples, and diagram suggestions.
development
This skill should be used when the user has already run resume-analyzer and wants to generate the tailored resume.tex. Trigger phrases include "generate resume", "write the resume", "create resume.tex", "tailor the resume now", "build the resume from notes", or when the user asks to proceed after a resume analysis session. It reads the notes.md produced by resume-analyzer and generates a tailored LaTeX resume.
development
This skill should be used when the user wants to analyze a job description against their resume, extract keywords, identify gaps, or prepare tailoring notes. Trigger phrases include "analyze JD", "analyze this job description", "extract keywords from JD", "gap analysis for", "what does this role need", "compare my resume to this JD", "tailor resume", "optimize resume for JD", "build resume for", "target job description", "customize resume for", "resume for this role", "refactor resume", "update resume for", "match resume to JD", or when a user pastes a job description alongside their resume. It produces a notes.md analysis file that resume-tailor uses to generate the final resume.