[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6KC52YN1RKMXTGQCGVXR3K2":3,"skill-same:01M6KC52YN1RKMXTGQCGVXR3K2":68},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":31,"linkOnly":32,"markdownContent":33,"markdownBody":34,"frontMatter":35,"refName":37,"commitSha":38,"skillDirectory":39,"forksCount":40,"repositoryHtmlUrl":41,"repositoryHomepageUrl":6,"ownerHtmlUrl":42,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":43,"install":44,"resources":57},"01M6KC52YN1RKMXTGQCGVXR3K2","critical-review",null,"Adversarial review — 1–2 fresh reviewer agents on distinct angles, consolidated here. Pressure-tests a plan, spec, or research artifact.","charleshall888\u002Fcortex-command","charleshall888","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F47426470?v=4","01M6KC1Z9S8HWSA07QDH85FYNE","Charlie Hall","01M6KC1ZDQNJX8EWA7KG5RK5E8",2,"MIT","https:\u002F\u002Fgithub.com\u002Fcharleshall888\u002Fcortex-command\u002Fblob\u002Fmain\u002Fplugins\u002Fcortex-core\u002Fskills\u002Fcritical-review\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30],"review","critical","critical review","spec","research","adversarial review","plan","reviewer","artifact","tests","fresh","path","2026-11-10 10:12:30",false,"---\nname: critical-review\ndescription: Adversarial review — 1–2 fresh reviewer agents on distinct angles, consolidated here. Pressure-tests a plan, spec, or research artifact.\nargument-hint: \"[\u003Cartifact-path>]\"\n---\n\n# Critical Review\n\nOne new reviewer per angle, so no reviewer is swayed by the reasoning that produced the artifact. You then combine the findings and decide on each one.\n\n## 1. Artifact\n\nWith an active lifecycle, take the most relevant of `cortex\u002Flifecycle\u002F{feature}\u002Fplan.md` → `spec.md` → `research.md`. Otherwise use the conversation. If nothing is clear enough to challenge, ask \"What should I critically review?\" Resolve it to an absolute path — reviewers read that exact path.\n\n## 2. Angles\n\nDerive **1 or 2** angles from this artifact, never more. Lean toward 2 at `high`\u002F`critical` criticality. Each angle cites a specific section, claim, assumption, or design choice, and the two must not restate one concern. \"Fragile assumptions\" is not an angle; \"the retry logic in §3 assumes idempotent endpoints, which breaks for the payment webhook in §5\" is. Architectural, integration, and scope-creep risk are hints to vary the angles, not a checklist — favor the artifact's domain. More weaknesses than slots → take the most severe.\n\n## 3. Project context\n\nBuild a `## Project Context` block for the reviewer prompts:\n\n- the Overview from `cortex\u002Frequirements\u002Fproject.md` (~250 words);\n- a `**Project type:** {type}` prefix when `cortex\u002Flifecycle.config.md` has a valid `type:`;\n- the `## Language` section of `cortex\u002Frequirements\u002Fglossary.md`, word for word. Only that section: it defines words, and more context would tell the reviewer the earlier reasoning.\n\nNone available → omit the block.\n\n## 4. Reviewers\n\nStart one general-purpose agent per angle, in parallel. Send `${CLAUDE_SKILL_DIR}\u002Freferences\u002Freviewer-prompt.md` exactly, with `{artifact_path}`, `{angle name}`, `{angle description}`, and the context block filled in.\n\nParse each reply: split on the **last** `\u003C!--findings-json-->` line and `json.loads` the rest. Require top-level `angle: str` and `findings: list`, each finding with `class ∈ {A,B,C}`, `finding`, `evidence_quote`. Malformed → warn `⚠ Reviewer {angle} emitted malformed JSON envelope ({reason})`, use its prose as `unstructured` findings, and leave the angle out of §6.\n\nOne of two fails → work from the other, prefixed \"1 of 2 reviewer angles completed.\" Never wait on a silent agent. All fail → one general-purpose agent derives 1–2 angles itself, same output shape, prefixed `Note: reviewer dispatch failed, falling back to single reviewer`.\n\n## 5. Consolidate\n\nDo this yourself — the artifact is in your context. Check every `evidence_quote` against the artifact before you accept its class. Count any `measurement` as evidence.\n\n**Downgrade A→B** when the `fix_invalidation_argument` is missing, repeats the finding with no causal link, names an adjacent gap, or hedges with no concrete failure path. Exception: a present `straddle_rationale` keeps it A. Report each class change as `Re-classified finding N from B→A: \u003Crationale>` (or A→B).\n\nMerge concerns that repeat across angles **within the same class** into one through-line. Note tensions where angles conflict. With two reviewers, write one coherent challenge, not a list per angle.\n\nOutput sections `## Objections` (A), `## Through-lines`, `## Tensions`, `## Concerns` (B and C). Use bullets that cite exact artifact text; skip empty sections. No A-class left → no `## Objections`, and open with: `No fix-invalidating objections after evidence re-examination. The concerns below are adjacent gaps or framing notes — do not read as verdict.`\n\n## 6. B-class residue\n\nWith ≥1 B-class finding, write the file the morning report reads. The command finds the feature from the session id:\n\n```bash\ncortex-critical-review-write-residue --session-id \"$LIFECYCLE_SESSION_ID\" \u003C\u003C\u003C \"$PAYLOAD_JSON\"\n```\n\nPayload: `ts`, `feature`, `artifact`, `synthesis_status: \"ok\"`, `reviewers: {completed, dispatched}`, `findings` (each `{class: \"B\", finding, reviewer_angle, evidence_quote}`). No B-class → skip. `state: no-context` \u002F `unowned` \u002F `ambiguous` → nothing was written; show the returned `note`.\n\n## 7. Present and apply\n\nOutput the challenge unchanged. Then decide on each objection without waiting:\n\n- **Apply** — the fix is unambiguous and confidence is high.\n- **Dismiss** — the artifact already addresses it, or it misreads a stated constraint. Point at the artifact text.\n- **Ask** — it turns on preference, scope, or real uncertainty. The default when unsure.\n\nA resolution needs new evidence. For any empirical claim (latency, size, blast radius, baseline behavior) run the measurement; re-reading is not evidence.\n\nRe-read the whole artifact. Write the updated version with every Apply included and everything else kept. Then summarize: Apply bullets that name the *direction* of change (strengthened \u002F narrowed \u002F clarified \u002F added \u002F removed \u002F inverted), one **Dismiss: N objections** line (omit at zero), and all Asks in a single message.\n","# Critical Review\n\nOne new reviewer per angle, so no reviewer is swayed by the reasoning that produced the artifact. You then combine the findings and decide on each one.\n\n## 1. Artifact\n\nWith an active lifecycle, take the most relevant of `cortex\u002Flifecycle\u002F{feature}\u002Fplan.md` → `spec.md` → `research.md`. Otherwise use the conversation. If nothing is clear enough to challenge, ask \"What should I critically review?\" Resolve it to an absolute path — reviewers read that exact path.\n\n## 2. Angles\n\nDerive **1 or 2** angles from this artifact, never more. Lean toward 2 at `high`\u002F`critical` criticality. Each angle cites a specific section, claim, assumption, or design choice, and the two must not restate one concern. \"Fragile assumptions\" is not an angle; \"the retry logic in §3 assumes idempotent endpoints, which breaks for the payment webhook in §5\" is. Architectural, integration, and scope-creep risk are hints to vary the angles, not a checklist — favor the artifact's domain. More weaknesses than slots → take the most severe.\n\n## 3. Project context\n\nBuild a `## Project Context` block for the reviewer prompts:\n\n- the Overview from `cortex\u002Frequirements\u002Fproject.md` (~250 words);\n- a `**Project type:** {type}` prefix when `cortex\u002Flifecycle.config.md` has a valid `type:`;\n- the `## Language` section of `cortex\u002Frequirements\u002Fglossary.md`, word for word. Only that section: it defines words, and more context would tell the reviewer the earlier reasoning.\n\nNone available → omit the block.\n\n## 4. Reviewers\n\nStart one general-purpose agent per angle, in parallel. Send `${CLAUDE_SKILL_DIR}\u002Freferences\u002Freviewer-prompt.md` exactly, with `{artifact_path}`, `{angle name}`, `{angle description}`, and the context block filled in.\n\nParse each reply: split on the **last** `\u003C!--findings-json-->` line and `json.loads` the rest. Require top-level `angle: str` and `findings: list`, each finding with `class ∈ {A,B,C}`, `finding`, `evidence_quote`. Malformed → warn `⚠ Reviewer {angle} emitted malformed JSON envelope ({reason})`, use its prose as `unstructured` findings, and leave the angle out of §6.\n\nOne of two fails → work from the other, prefixed \"1 of 2 reviewer angles completed.\" Never wait on a silent agent. All fail → one general-purpose agent derives 1–2 angles itself, same output shape, prefixed `Note: reviewer dispatch failed, falling back to single reviewer`.\n\n## 5. Consolidate\n\nDo this yourself — the artifact is in your context. Check every `evidence_quote` against the artifact before you accept its class. Count any `measurement` as evidence.\n\n**Downgrade A→B** when the `fix_invalidation_argument` is missing, repeats the finding with no causal link, names an adjacent gap, or hedges with no concrete failure path. Exception: a present `straddle_rationale` keeps it A. Report each class change as `Re-classified finding N from B→A: \u003Crationale>` (or A→B).\n\nMerge concerns that repeat across angles **within the same class** into one through-line. Note tensions where angles conflict. With two reviewers, write one coherent challenge, not a list per angle.\n\nOutput sections `## Objections` (A), `## Through-lines`, `## Tensions`, `## Concerns` (B and C). Use bullets that cite exact artifact text; skip empty sections. No A-class left → no `## Objections`, and open with: `No fix-invalidating objections after evidence re-examination. The concerns below are adjacent gaps or framing notes — do not read as verdict.`\n\n## 6. B-class residue\n\nWith ≥1 B-class finding, write the file the morning report reads. The command finds the feature from the session id:\n\n```bash\ncortex-critical-review-write-residue --session-id \"$LIFECYCLE_SESSION_ID\" \u003C\u003C\u003C \"$PAYLOAD_JSON\"\n```\n\nPayload: `ts`, `feature`, `artifact`, `synthesis_status: \"ok\"`, `reviewers: {completed, dispatched}`, `findings` (each `{class: \"B\", finding, reviewer_angle, evidence_quote}`). No B-class → skip. `state: no-context` \u002F `unowned` \u002F `ambiguous` → nothing was written; show the returned `note`.\n\n## 7. Present and apply\n\nOutput the challenge unchanged. Then decide on each objection without waiting:\n\n- **Apply** — the fix is unambiguous and confidence is high.\n- **Dismiss** — the artifact already addresses it, or it misreads a stated constraint. Point at the artifact text.\n- **Ask** — it turns on preference, scope, or real uncertainty. The default when unsure.\n\nA resolution needs new evidence. For any empirical claim (latency, size, blast radius, baseline behavior) run the measurement; re-reading is not evidence.\n\nRe-read the whole artifact. Write the updated version with every Apply included and everything else kept. Then summarize: Apply bullets that name the *direction* of change (strengthened \u002F narrowed \u002F clarified \u002F added \u002F removed \u002F inverted), one **Dismiss: N objections** line (omit at zero), and all Asks in a single message.\n",{"name":5,"description":7,"argument-hint":36},"[\u003Cartifact-path>]","main","3aac0752f0f020bd953cfed5bd29244d1c8f5f4f","plugins\u002Fcortex-core\u002Fskills\u002Fcritical-review",0,"https:\u002F\u002Fgithub.com\u002Fcharleshall888\u002Fcortex-command","https:\u002F\u002Fgithub.com\u002Fcharleshall888","2026-10-28 20:32:05",{"source":8,"skillName":5,"commands":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add charleshall888\u002Fcortex-command --skill critical-review",{"tool":50,"command":51},"bunx","bunx skills add charleshall888\u002Fcortex-command --skill critical-review",{"tool":53,"command":54},"pnpm","pnpm dlx skills add charleshall888\u002Fcortex-command --skill critical-review","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcharleshall888\u002Fcortex-command\u002Fblob\u002Fmain\u002Fplugins\u002Fcortex-core\u002Fskills\u002Fcritical-review\u002FSKILL.md",true,[58,64],{"path":59,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":62,"sourceHtmlUrl":63},"references\u002Freviewer-prompt.md","REFERENCE","参考文档",2220,"https:\u002F\u002Fgithub.com\u002Fcharleshall888\u002Fcortex-command\u002Fblob\u002Fmain\u002Fplugins\u002Fcortex-core\u002Fskills\u002Fcritical-review\u002Freferences\u002Freviewer-prompt.md",{"path":65,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":66,"sourceHtmlUrl":67},"references\u002Fsize-pin.txt",5,"https:\u002F\u002Fgithub.com\u002Fcharleshall888\u002Fcortex-command\u002Fblob\u002Fmain\u002Fplugins\u002Fcortex-core\u002Fskills\u002Fcritical-review\u002Freferences\u002Fsize-pin.txt",[69,84,93,107,120,132],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":75,"publishedAt":31},"01M6KCB4DH17601DR5QA7WYG28","over-cap-no-marker","Synthetic fixture with 501 lines and no size-budget marker.","https:\u002F\u002Fgithub.com\u002Fcharleshall888\u002Fcortex-command\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskill_size_budget\u002Fover-cap-no-marker\u002FSKILL.md",[],[76,77,78,79,80,81,82,83],"over cap no marker","cap","marker","fixture","Budget","synthetic","with","size",{"skillNo":85,"name":86,"nameZh":6,"description":87,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":88,"categories":89,"keywords":90,"publishedAt":31},"01M6KCB0P08NTQBZVYP6Q0J74M","invalid-marker","Synthetic fixture exercising the invalid-marker failure path.","https:\u002F\u002Fgithub.com\u002Fcharleshall888\u002Fcortex-command\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskill_size_budget\u002Finvalid-marker\u002FSKILL.md",[],[91,78,92,30,81,79],"invalid","invalid marker",{"skillNo":94,"name":95,"nameZh":6,"description":96,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":97,"categories":98,"keywords":99,"publishedAt":31},"01M6KCAXS26V6DS7FTG7Z3D08V","boundary-29-char-reason","Synthetic fixture with marker rationale at the regex boundary (29 chars, just under min).","https:\u002F\u002Fgithub.com\u002Fcharleshall888\u002Fcortex-command\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fskill_size_budget\u002Fboundary-29-char-reason\u002FSKILL.md",[],[100,101,102,81,103,104,78,82,105,79,106],"reason","boundary 29 char reason","boundary","rationale","at","regex","just",{"skillNo":108,"name":109,"nameZh":6,"description":110,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":31},"01M6KCARRB8SCQJNQTCCZY7WS9","valid-with-inputs","A skill that declares one input variable and uses it in the body.","https:\u002F\u002Fgithub.com\u002Fcharleshall888\u002Fcortex-command\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fcontracts\u002Fvalid-with-inputs\u002FSKILL.md",[],[114,82,115,116,117,118,119],"valid with inputs","valid","operate","it","STRING","input",{"skillNo":121,"name":122,"nameZh":6,"description":123,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":31},"01M6KCAP369CPN1N3G8ZG95D6J","valid-minimal","A minimal skill with only the required fields present.","https:\u002F\u002Fgithub.com\u002Fcharleshall888\u002Fcortex-command\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fcontracts\u002Fvalid-minimal\u002FSKILL.md",[],[127,128,115,82,129,130,131],"minimal","valid minimal","present","only","minimal skill",{"skillNo":133,"name":134,"nameZh":6,"description":135,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":136,"categories":137,"keywords":138,"publishedAt":31},"01M6KCAJJXSZJ9JQM730JWFSMF","invalid-undeclared-variable","A skill whose body uses a variable not declared in inputs.","https:\u002F\u002Fgithub.com\u002Fcharleshall888\u002Fcortex-command\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fcontracts\u002Finvalid-undeclared-variable\u002FSKILL.md",[],[91,139,118],"invalid undeclared variable"]