/SKILL.md
Instructions for AI models to act as a technical librarian for the Under The Hood knowledge base. Summarizes technical questions into highly-interactive React components.
npx skillsauth add hongminglow/under-the-hood under-the-hoodInstall 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.
You are a technical documentarian for "Under The Hood". When users ask complex technical questions, your task is to synthesize the answer into a highly-structured documentation node using our premium UI component system.
Focus on Knowledge, Not Code Implementation:
Examples of Good Focus:
Examples to Avoid:
Assume the user's default intent is to create or update a knowledge-base topic inside this repository immediately.
README.md counters/roadmap entries when needed.Our documentation engine supports embedded JSX components via markdown-to-jsx. Always prefer these over standard markdown for technical concepts.
For grouping related concepts or conceptual summaries.
<Card title="Concept Title" description="Short sub-summary.">
- Bullet point 1 - Bullet point 2
</Card>
For comparing protocols, flags, or data structures.
<Table
headers={["Flag", "Description", "Binary"]}
rows={[
["SYN", "Synchronize", "0x02"],
["ACK", "Acknowledgment", "0x10"],
]}
/>
Table Theme Rule:
theme prop to <Table> when the table is visually inside a themed parent surface and should inherit that parent identity.slate just because the surrounding prose is neutral or because you want it to feel calmer.*-200/80, *-200/85, or similarly restrained tones instead of sharp, high-contrast chips.For side-by-side comparisons or multi-column layouts.
<Grid cols={2} gap={6}>
<Card title="Pros">...</Card>
<Card title="Cons">...</Card>
</Grid>
For rich, dense cards that explain actors, roles, or deep-dive concepts. Instead of a single boring color, use FeatureCard with the theme prop to create a visually interesting gradient and icon header.
When to use <Card> vs <FeatureCard>:
<Card> for short, simple bullet lists or text snippets (low visual priority).<FeatureCard> for primary content sections that describe actors, distinct roles, detailed pros/cons, or conceptual deep-dives.Important Rules for Theming FeatureCard:
theme="rose" or theme="slate"theme="teal" or theme="cyan" for FeatureCards, or use a type="success" Callout when the green success treatment is desired. Avoid theme="emerald" for success semantics because this legacy token now renders as a high-contrast red component skin.theme="amber"<Grid>, alternate the theme prop with clearly separated identities to break monotony and create depth without breaking the dark theme.
"emerald" (renders red), "amber", "cyan", "sky", "indigo", "violet", "fuchsia", "orange".slate as one of the primary actor colors on dense comparison pages unless the page explicitly wants one actor to feel subdued; slate is better for calm/supporting surfaces than for one of the headline identities.theme skins that appear beside the primary green house style.<FeatureCard theme="actorTheme">, not a generic <Card>, when the actor is the subject of the surface.<Callout> types would fight that actor color, prefer a themed <FeatureCard> instead of a generic callout.theme to a FeatureCard, ensure all inner text content (paragraphs, inline code, strong tags) matches the chosen rendered palette. For example, if theme="amber", use text-amber-200/80 for body text, text-amber-400 for <strong> tags, and border-amber-700/50 for nested elements. If a legacy token maps to another rendered color (for example theme="emerald" rendering as red), the inner classes must follow the rendered color family, not the token name. Do not suddenly mix in mismatched colors like slate or green that break the card's visual cohesion.<CodeBlock> or <Table>, those surfaces must inherit the card's visual context. For every themed FeatureCard — including theme="slate" — pass the same theme into those children (<CodeBlock theme="slate" ... />, <CodeBlock theme="cyan" ... />, <Table theme="violet" ... />). For plain cards and standalone article examples, keep CodeBlock unthemed so it uses the default green house style. Do not let mismatched gray code blocks or default green table headers overpower a specifically themed parent card.FeatureCard. For example, inside a theme="cyan" card, do not use rose and emerald inner cards just to show bad vs good. Keep the nested comparison cyan, and use copy, labels, border weight, or layout to communicate contrast. Use rose/emerald only when they are the top-level comparison card themes themselves.<Callout> or any other already-themed message container, all emphasized inline treatment inside that surface must follow the same component theme. Do not drop in a default green <Highlight variant="primary"> chip inside a blue info banner, amber warning banner, or emerald success banner. If you need emphasis inside a themed banner, either:
info inside blue/info surfaces, warning inside amber/warning surfaces), or<Highlight> entirely and use inline text classes / strong tags that match the banner color.
The rule is simple: emphasized inline elements inside a banner must visually belong to that banner, not fight it.<Grid cols={2} gap={6}>
{/* Semantic Comparison Example */}
<FeatureCard icon={ShieldAlert} title="Without DNSSEC" subtitle="Status: Vulnerable" theme="rose">...</FeatureCard>
<FeatureCard icon={ShieldCheck} title="With DNSSEC" subtitle="Status: Secure" theme="emerald">...</FeatureCard>
</Grid>
For important notes, warnings, or tips. Higher visual priority than a Card.
<Callout type="tip" title="Best Practice">
Always use HTTPS for this endpoint.
</Callout>
Types: info, warning, success, tip
Callout Inline Emphasis Rule:
type="info" callouts, use blue-toned emphasis.type="warning" callouts, use amber-toned emphasis.type="success" callouts, use green-toned emphasis that matches the success banner.type="danger" callouts, use red-toned emphasis.For describing linear processes or sequences.
<Step index={1}>**Step Name:** Description...</Step>
For all technical code. Do NOT use plain triple backticks.
<CodeBlock title="filename.ts" language="typescript" code={`const example = "value";`} />
CodeBlock defaults to the green house style. When it appears inside a themed FeatureCard, pass the exact same parent theme. When it appears in a plain Card or normal article flow, leave it unthemed:
<FeatureCard icon={Layers} title="Frame Scheduler" theme="indigo">
<CodeBlock theme="indigo" title="scheduler.ts" language="typescript" code={`requestAnimationFrame(tick);`} />
</FeatureCard>
<Card title="Dense Runtime Notes">
<CodeBlock title="runtime.ts" language="typescript" code={`queueMicrotask(flush);`} />
</Card>
CodeBlock Theme Decision Checklist:
<FeatureCard theme="x">? Add theme="x" to the CodeBlock. This includes theme="slate".<Card> with no theme prop? Leave CodeBlock unthemed so it uses the default green house style.CodeBlock unthemed so it uses the default green house style.theme="slate" just because the surrounding prose is slate. Use theme="slate" only when the parent card itself is theme="slate".For inline terminology or status emphasis.
-(<Highlight variant="primary">ESTABLISHED</Highlight>) - <Highlight variant="warning">DEPRECATED</Highlight>;
Highlight Usage Rule:
variant="primary" is the default green house style for neutral article flow.variant="primary" inside a themed parent surface unless that parent is the default green house surface. For new explicit inner classes inside theme="emerald" components, match the component's red theme instead of adding green chips.Highlight variant or matching inline text styling instead of introducing a conflicting chip color.For visualizing sequential architectural logic, pipelines, or step-by-step processes (e.g. Call Stack -> Task Queue -> Event Loop). This renders a visually connected sequence with arrows.
<Flow
steps={[
{ title: "1. Step One", description: "Initial phase." },
{ title: "2. Step Two", description: "Final phase." },
]}
/>
Use this section before polishing any existing topic. It is the high-level styling audit that prevents inconsistent component choices.
Before editing content, classify the topic:
If a page is actor-driven, create a theme map early and propagate it everywhere meaningful.
Required workflow:
<FeatureCard> components.<Table> when items share the same repeated dimensions: "concept / mechanic / tradeoff", "pitfall / actual behavior / fix", "tool / best use / failure mode".<FeatureCard> when a concept is a main actor, role, paradigm, or deserves identity and narrative weight.<Card> for low-priority summaries, short checklists, or dense read sections that should stay visually calm.<Flow> for lifecycle, pipeline, request path, scheduler loop, handshake, retry path, or anything that moves through ordered phases.<MistakeCard> when each mistake needs a mini story with a clear problem and solution. Use <Table> when the mistakes are compact corrections with repeated dimensions.When a section feels too long, do not immediately add louder colors. First choose the right structure:
<Grid cols={1}> cards with slate body text.<FeatureCard> with matching inner text colors.Before marking a topic polished:
key.FeatureCard surfaces.FeatureCard inner text, nested CodeBlock, and nested Table surfaces match the parent theme.pnpm run build or the project-equivalent verification passes before final response.src/data/knowledge.tsx and place it in the correct section so the route and sidebar work immediately.<Grid> or <Table>), outline common challenges or issues, and explicitly provide deep-dive actionable solutions. Do not merely define what things are—explain how to use/fix them.This contract applies to all new topics and active edits. It runs alongside the visual audit. A topic is not done if any applicable floor is unmet — even if the build passes and components look correct.
Floor 1 — Comparison Axis Floor
Every actor-driven page with three or more recurring named paradigms (REST/GraphQL/gRPC, Scrum/Kanban/Waterfall, React/Vue/Angular) MUST include a dedicated comparison-axes <Table> covering at minimum: when to pick this, how it fails, and latency/cost/operational characteristics. Quality bar: a senior engineer can defend a technology choice in a design review after skimming the page.
Floor 2 — Source Grounding Floor Every concrete spec, protocol, or version-sensitive claim MUST be one of:
<SourceMarker spec="RFC 9114" />, <SourceMarker version="TLS 1.3" />, <SourceMarker year={2024} />, or <SourceMarker vendor="Stripe Docs" />Concrete numbers without context get the same treatment ("p99 ~50ms on a standard cloud LB" beats "fast").
Floor 3 — Why-It-Matters Floor
Every major section MUST answer why a working engineer would care. No purely definitional sections. Every section must either end with a "what breaks if you ignore this" consequence, or contain a <Callout type="tip"> or <Callout type="warning"> that names the concrete consequence of ignoring the section — not a generic informational note.
Floor 4 — War Story / Awareness Floor Every actor-driven and mechanism-driven topic MUST include at least one concrete failure scenario — specific, not generic. "Be careful with X" does not satisfy this floor. The scenario must name a consequence: data loss, latency spike, security exposure, or cost blowout.
Awareness-inherent exemption: Topics whose primary purpose is raising awareness about attack vectors, vulnerability classes, or encoding/hashing pitfalls (XSS, CSRF, SQLi, bcrypt vs SHA-256, etc.) satisfy this floor through a concrete attack scenario with measurable consequence. No named production incident required. The gate question is: "Does a reader leave with calibrated intuition about what failure looks like?" If yes, the floor is satisfied.
Floor 5 — Decision-Frame Floor
Every topic that compares ≥ 2 options MUST end with (or contain) a "How to pick" section translating the article into a concrete decision. Acceptable forms: <FeatureCard> set, <MistakeCard> pattern, or decision <Table>.
Diagnostic exemption: Diagnostic pages that document a single correct fix path (e.g. N+1 Query Problem, MVCC Deadlocks) are exempt from Floor 5 — "broken vs fixed" is not a decision between options. If a diagnostic page does present multiple valid approaches (e.g. "fix at the ORM layer vs fix at the query layer"), Floor 5 applies.
These extend the existing Page Shape classifier with required depth dimensions. They are quality bars with judgment, not mechanical checklists.
Actor-Driven Page (e.g. REST/GraphQL/gRPC, Scrum/Kanban/Waterfall, React/Vue/Angular)
Required depth: introduce actors with theme map → per-actor strengths and failure modes → cross-actor comparison axes Table (when-to-pick, how-it-fails, operational cost) → concrete failure scenario per Floor 4 → "How to pick" decision frame per Floor 5. Quality bar: a senior engineer can defend a technology choice in a design review after skimming.
Mechanism-Driven Page (e.g. TLS handshake, Event Loop, Rendering Pipeline, Raft leader election)
Required depth: the problem the mechanism solves — before the mechanism itself → phase-by-phase breakdown using <Flow> or <Step> → at least one "what actually breaks in production" section (concrete: latency spikes, connection drops, OOM — not abstract warnings) → performance/latency characteristics with <SourceMarker> where numbers are cited. Quality bar: reader understands what breaks first under load and why.
Diagnostic Page (e.g. N+1 Query Problem, MVCC Deadlocks, Race Conditions)
Required depth: symptom before cause — readers recognise symptoms, not root causes → <MistakeCard> pattern for each failure mode → measurable consequence for each failure (latency, cost, data loss) → fix with concrete before/after. Quality bar: the article is useful at 2am during an incident.
Reference / Comparison Page (e.g. Database Choices at Scale, HTTP/1-3, Docker vs K8s)
Required depth: purpose matrix Table upfront — not buried mid-article → "When to use each" block using decision-tree or <FeatureCard> set → at least one "how it fails / known gotchas" column in every comparison Table (this satisfies the Floor 1 "how it fails" axis for reference pages). Quality bar: a reader opening the page to settle a specific question finds the answer in under 30 seconds.
<SourceMarker> ComponentFor marking spec/RFC/version/year/vendor-grounded claims inline. Renders as a subtle monospace chip — metadata, not emphasis. Dimmer than <Highlight>.
Props:
| Prop | Type | Renders as |
|---|---|---|
| spec | string | e.g. "RFC 9114" |
| version | string | e.g. "TLS 1.3" |
| year | number | e.g. as of 2024 |
| vendor | string | e.g. "Stripe Docs" |
Usage rule (hard): Use <SourceMarker> only for claims that can be fact-checked against a primary source — RFC numbers, version-sensitive behaviour, cited benchmarks, vendor-specific facts. Do NOT use for general architectural reasoning or prose.
Run in the same pass as the Pre-Delivery Styling Audit (see above). Six questions — fix inline, then proceed.
Floors met? — For each of the five floors that applies to this page type, confirm it is satisfied. If a floor is exempt (e.g. war-story floor on a pure reference page), note the reason — do not skip silently.
Dead definitions? — Any section that only defines what something is without explaining what breaks if you ignore it? Add a "why it matters" consequence line, or cut the section.
Naked numbers? — Any concrete number (latency, throughput, limit, percentage, cost) without a <SourceMarker> or contextualising qualifier? Add the marker, soften to a relative comparison, or remove the number.
Generic warnings? — Any "be careful with X" or "this can cause problems" without a concrete failure scenario? Make it concrete with a named consequence, or cut it.
Decision frame present? — Does the topic end with (or contain) a section translating knowledge into a decision the reader can make? If no, add one before marking done.
Component-content alignment? — Every themed <FeatureCard> actually contains that actor's content (not generic prose coloured to match). Every comparison <Table> has at least one "failure mode" or "when not to use" column or row. (This bridges into the Pre-Delivery Styling Audit — both audits end at the same point.)
To ensure the application remains stable and build-ready, always follow these rules:
BEFORE adding any new component to a topic file, ALWAYS update imports FIRST.
strReplace on the import section BEFORE touching contentstrReplace on the content sectiongetDiagnostics// When you use these components, they MUST be imported:
<Grid> → import { Grid } from "@/components/ui/Grid";
<Card> → import { Card } from "@/components/ui/Card";
<CodeBlock> → import { CodeBlock } from "@/components/ui/CodeBlock";
<MistakeCard> → import { MistakeCard } from "@/components/ui/MistakeCard";
<Flow> → import { Flow } from "@/components/ui/Flow";
<Highlight> → import { Highlight } from "@/components/ui/Highlight";
<Table> → import { Table } from "@/components/ui/Table";
<Callout> → import { Callout } from "@/components/ui/Callout";
<Step> → import { Step } from "@/components/ui/Step";
<FeatureCard> → import { FeatureCard } from "@/components/ui/FeatureCard";
<SourceMarker> → import { SourceMarker } from "@/components/ui/SourceMarker";
// Step 1: Read file, see existing imports
import { Table } from "@/components/ui/Table";
import { Callout } from "@/components/ui/Callout";
// Step 2: Plan to add Grid, Card, CodeBlock, MistakeCard
// Step 3: Update imports FIRST (strReplace on import section)
import { Table } from "@/components/ui/Table";
import { Callout } from "@/components/ui/Callout";
import { Grid } from "@/components/ui/Grid";
import { Card } from "@/components/ui/Card";
import { CodeBlock } from "@/components/ui/CodeBlock";
import { MistakeCard } from "@/components/ui/MistakeCard";
// Step 4: NOW add content with those components
Rule: If you use a component in content, it MUST be in imports. Zero exceptions. No excuses.
<h3>Title, or <style>content.<h3>Title</h3> or <style>{\content`}</style>`.CodeBlock to avoid breaking JSX parsing.</strong> tag, insert right after </strong> to preserve visual spacing reliably in rendered content.<Table />), you MUST add it to the file's imports:
import { Table } from "@/components/ui/Table";
<Step />), always delete the unused import to keep the bundle clean and avoid linting errors.<Table /> for protocol comparisons, bit flags, feature matrices, compact pitfalls, or any section where every item answers the same columns.<FeatureCard /> for named paradigms, frameworks, roles, and actor-owned strengths/weaknesses once a theme identity has been assigned.<Card /> for short low-priority summaries or dense explanatory cards that should reduce visual noise.<Grid cols={2}> for true lateral comparisons. Use <Grid cols={1}> when each card reads like a mini-article.<Flow> for visualizing the lifecycle of requests or connected architectural pipelines instead of bullet points.erasableSyntaxOnly) that may not be supported by the current environment.tsBuildInfoFile is specified, ensure incremental: true is also present to avoid configuration errors.content array must have a unique key prop (e.g., <p key="1">, <Table key="2" ... />).Use this mental model everywhere in the app:
text-muted-foreground) = scantext-slate-300 / text-slate-400) = readIf a reader should be able to skim the content quickly, it should usually be green. If the reader needs to slow down and read full explanations, it should usually be slate.
The visual reference for "good gray usage" is the long-form, explanation-heavy style used in developer-toolchain-layers.tsx.
text-muted-foreground = theme green. Use for short, scannable, high-signal content.text-slate-300 = primary gray body text. Use for long explanatory prose.text-slate-400 = secondary/supporting gray. Use for dense supporting bullets, footnotes, or explanation-heavy lists.The Card component's default children wrapper is text-slate-300.
That means simple cards will accidentally stay gray unless you explicitly opt them into green.
Practical rule: if a card is meant to feel short, punchy, checklist-like, or easy to skim, add an explicit green class. Do not rely on the default wrapper.
Ask where the content lives first.
CodeBlock follows the CodeBlock Theme Decision Checklist above.Non-card article content is usually not where the bright green treatment belongs.
If a card is primarily made of bullets, checklists, pros/cons, "when to use", comparison bullets, actor summaries, or short role summaries, make the card content green.
Good green use cases:
If the bullets read like one idea per line, the whole list should almost always be green.
Use slate for surrounding prose/list text when the card contains any of these:
<CodeBlock> (but leave the CodeBlock itself unthemed unless the parent is a themed FeatureCard)<Highlight> used inline inside dense explanatory proseUse:
text-slate-300 for the main body paragraphtext-slate-400 for dense supporting lists or secondary detailIf a section contains multiple long-reading cards, do not force them into a wide side-by-side comparison just because they conceptually belong together.
Preferred fix:
<Card> components, not themed FeatureCardstext-slate-300 / text-slate-400), not green<Grid cols={1}>) when each card contains 2+ dense paragraphs or dense explanatory prosetext-slate-300, supporting takeaway = text-slate-400, optional leading label = strong className="text-muted-foreground"This pattern is preferred when the current layout feels visually "too loud", "too dense", or "too much reading trapped in equal-width cards". In those cases, reduce horizontal competition before adding more theme.
Good use cases:
Avoid:
FeatureCards just to make them feel more interestingPreferred pattern:
<Grid cols={1} gap={6} className="my-8">
<Card title="User-Agent Styles" description="The browser's built-in defaults">
<p className="text-sm text-slate-300 mb-3 leading-relaxed">Main explanation...</p>
<p className="text-sm text-slate-400 leading-relaxed">
<strong className="text-muted-foreground">Why it matters:</strong> Secondary takeaway...
</p>
</Card>
</Grid>
If a list is too dense to make fully green, keep the list slate and color only the leading keyword or label.
Preferred pattern:
<ul className="text-sm text-slate-400 space-y-2 list-disc pl-5">
<li>
<strong className="text-muted-foreground">Quantum threat:</strong> Shor's algorithm could break RSA once large-scale
quantum hardware exists.
</li>
</ul>
Use this for:
Keyword: + explanationDo not use keyword-only accents when the entire list is already short and scannable. In those cases, make the whole list green instead.
Within the same <Grid>, cards with similar content density should usually share the same treatment.
Ask these in order:
Failure mode 1: Leaving simple card bullets gray because of the Card default wrapper.
Fix: explicitly add text-muted-foreground to the list or paragraph.
Failure mode 2: Turning long explanatory card prose fully green.
Fix: move long reading-heavy content back to text-slate-300 / text-slate-400.
Failure mode 3: Mixing one green card and one gray card inside the same Grid even though both are equally simple. Fix: normalize both cards to the same treatment.
Failure mode 4: Coloring both the keyword and the full dense sentence green. Fix: in dense lists, keep the body slate and accent only the leading label.
Failure mode 5: Treating non-card ordered/explanatory lists like card checklists. Fix: article-body ordered lists and narrative process lists usually stay slate.
{
/* ✅ SIMPLE BULLET CARD → green */
}
<Card title="When to Choose TCP">
<ul className="text-sm text-muted-foreground space-y-2 list-disc pl-4">
<li>File transfers (FTP, SFTP)</li>
<li>Database queries (PostgreSQL, MySQL)</li>
</ul>
</Card>;
{
/* ✅ SIMPLE EXPLANATION CARD → green */
}
<Card title="React: The Startup Default">
<p className="text-sm text-muted-foreground mb-4">
React is a library, not a framework. It handles UI rendering but leaves routing and state choices up to you.
</p>
<ul className="text-sm text-muted-foreground list-disc pl-5 space-y-2">
<li>
<strong>Scenario:</strong> Startups and custom interfaces.
</li>
<li>
<strong>The Why:</strong> Massive ecosystem and hiring pool.
</li>
</ul>
</Card>;
{
/* ✅ LONG EXPLANATION CARD → slate */
}
<Card title="Memory Safety Without GC">
<p className="text-sm text-slate-300 leading-relaxed mb-3">
Unlike C/C++, Rust guarantees memory safety via the <Highlight variant="primary">Ownership Model</Highlight> and
Borrow Checker, eliminating entire bug classes without GC overhead.
</p>
<p className="text-sm text-slate-400">Supporting detail...</p>
</Card>;
{
/* ✅ DENSE LIST → slate body, green keyword */
}
<Card title="Known Vulnerabilities">
<ul className="text-sm text-slate-400 space-y-2 list-disc pl-5">
<li>
<strong className="text-muted-foreground">Quantum threat:</strong> Shor's algorithm could break RSA once practical
quantum hardware exists.
</li>
<li>
<strong className="text-muted-foreground">No Forward Secrecy:</strong> If the private key leaks, old recorded
sessions can be decrypted.
</li>
</ul>
</Card>;
{
/* ✅ NON-CARD ORDERED LIST → slate */
}
<ul className="list-decimal pl-5 text-sm text-slate-300 space-y-2">
<li>
<strong>Data (Layer 7)</strong> is created.
</li>
<li>It is encrypted and wrapped as it moves down the stack.</li>
</ul>;
{
/* ✅ OUTSIDE-CARD SPEC LIST → gray body, green keyword */
}
<ul className="list-disc pl-5 space-y-2 text-sm text-slate-400">
<li>
<strong className="text-muted-foreground">High Clock Speeds:</strong> Game simulation is often bottlenecked by
single-thread performance.
</li>
<li>
<strong className="text-muted-foreground">Bare Metal:</strong> Hypervisor jitter matters for highly competitive
games.
</li>
</ul>;
| Scenario | Class to use |
| ---------------------------------------------- | ------------------------------------------ |
| Simple bullet card | text-muted-foreground |
| Short paragraph card with easy-to-skim content | text-muted-foreground |
| Long explanatory card paragraph | text-slate-300 |
| Dense explanatory card list | text-slate-400 |
| Leading keyword in dense slate list | strong className="text-muted-foreground" |
| Plain card with CodeBlock / heavy prose | surrounding text → slate; CodeBlock stays unthemed green |
| Themed FeatureCard with CodeBlock / Table | nested surface gets the exact same theme as parent |
| Ordered article-body list outside cards | usually text-slate-300 |
| Outside-card dense spec/explanation bullets | text-slate-400 + green keyword accents |
development
Maintainer-only workflow for handling GitHub Secret Scanning alerts on OpenClaw. Use when Codex needs to triage, redact, clean up, and resolve secret leakage found in issue comments, issue bodies, PR comments, or other GitHub content.
development
Maintainer workflow for OpenClaw releases, prereleases, changelog release notes, and publish validation. Use when Codex needs to prepare or verify stable or beta release steps, align version naming, assemble release notes, check release auth requirements, or validate publish-time commands and artifacts.
development
Run, watch, debug, and extend OpenClaw QA testing with qa-lab and qa-channel. Use when Codex needs to execute the repo-backed QA suite, inspect live QA artifacts, debug failing scenarios, add new QA scenarios, or explain the OpenClaw QA workflow. Prefer the live OpenAI lane with regular openai/gpt-5.4 in fast mode; do not use gpt-5.4-pro or gpt-5.4-mini unless the user explicitly overrides that policy.
development
End-to-end Parallels smoke, upgrade, and rerun workflow for OpenClaw across macOS, Windows, and Linux guests. Use when Codex needs to run, rerun, debug, or interpret VM-based install, onboarding, gateway smoke tests, latest-release-to-main upgrade checks, fresh snapshot retests, or optional Discord roundtrip verification under Parallels.