[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71FVJ6AMN3Y91S68SCK9XYQ":3,"skill-same:01M71FVJ6AMN3Y91S68SCK9XYQ":79},{"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":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":51,"commitSha":52,"skillDirectory":53,"forksCount":14,"repositoryHtmlUrl":54,"repositoryHomepageUrl":6,"ownerHtmlUrl":55,"ownerBlogUrl":56,"ownerDescription":57,"updatedAt":58,"install":59,"resources":72},"01M71FVJ6AMN3Y91S68SCK9XYQ","audit-subagent",null,"{{! term('configured_agent') | capitalize !}}-configuration audit methodology — judges the {{! term('configured_agent') !}} definition a changeset changes against the subagent-standards and agent-prompt-standards rule catalogs, and records the judgment through an SPX changeset-scoped verification run.","outcomeeng\u002Fplugins","outcomeeng","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F257335685?v=4","01M71FRVRF36XYR3HRSCGFHK2R","Outcome Engineering","01M71FRVS4BZG17DWANFJ7EPNY",1,"MIT","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Finstructions\u002Fskills\u002Faudit-subagent\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"audit subagent","subagent","audit","audit methodology","parse","definition","scoped","rev","realpath","render","records","scope","standards","diff","version","use","prompt","changeset","tool","Bash","2026-11-10 10:12:30",false,"---\nname: audit-subagent\ndescription: >-\n  {{! term('configured_agent') | capitalize !}}-configuration audit methodology — judges the\n  {{! term('configured_agent') !}} definition a changeset changes against the subagent-standards\n  and agent-prompt-standards rule catalogs, and records the judgment through an SPX\n  changeset-scoped verification run.\nargument-hint: \"\u003CJSON object with path, runDriver, and optional base>\"\nallowed-tools: Read, Grep, Glob, {{! tool('use_skill') !}}, Bash(git -C * rev-parse:*), Bash(git -C * diff:*), Bash(git -C * status:*), Bash(realpath:*), Bash(spx --version), Bash(spx -C * verification run start:*), Bash(spx -C * verification run status:*), Bash(spx -C * verification run scope add:*), Bash(spx -C * verification run finding add:*), Bash(spx -C * verification run finish:*), Bash(spx -C * verification run render:*), Write\n---\n\n{!% require_skill 'instructions:agent-prompt-standards' %!}\n\n{!% require_skill 'instructions:subagent-standards' %!}\n\n{!% require_skill 'instructions:skill-standards' %!}\n\n\u003Cobjective>\nA sealed changeset-scoped `spx verification run`, named by its run token and run file, over the one {{! term('configured_agent') !}} definition a changeset changes, judged against the `\u002Fsubagent-standards` and `\u002Fagent-prompt-standards` rule catalogs — terminal status `approved` when no finding on touched text exists, or `rejected` with each such finding keyed `\u003Cunit>:\u003Crule-id>` and naming every location and the evidence, every other finding recorded as `filed` — or a `BLOCKED` diagnostic naming the failed prerequisite or command.\n\u003C\u002Fobjective>\n\n\u003Cconstraints>\n\n- NEVER modify the target or any product file, launch the target, or run an authoring workflow; the only state this audit changes is its payload files in the session scratch directory and the SPX verification-run journal its own recording commands write. The file-write tool writes payload files only.\n- NEVER write the run journal or its context anywhere but the locations `spx verification run` resolves. When the native permission policy refuses a run-recording write — a payload file, a run-recording command, or the journal — stop at that write, retry it no more, write to no other location, and return `BLOCKED` with `diagnostic: configuration error` naming the refused path; the host grants the paths, and this skill never widens its own access.\n- NEVER record a finding under an identifier the two rule catalogs do not carry; a defect no catalog row names stays unrecorded — the catalogs are the audit's complete vocabulary.\n- NEVER choose a severity; a finding on touched text carries the severity its catalog row declares, and a finding outside touched text carries `filed`.\n- NEVER reject on text the changeset leaves unchanged and does not invalidate, and NEVER raise a recorded finding's severity or let a `filed` finding reject unless the run names a changed basis. `${CLAUDE_SKILL_DIR}\u002Freferences\u002Ftouched-text.md` defines touched text, the finding key, and the `filed` form.\n- NEVER record a finding against a governing declaration; a declaration is context the definition is judged against.\n- NEVER report a score, generate a fix, or invent a requirement because a tag, example, or optional mechanism is absent.\n- MUST read both standards and their rule catalogs before judging — prevents memory-based assessment.\n\n\u003C\u002Fconstraints>\n\n\u003Caudit_workflow>\n\n\u003Crequest_contract>\n\nParse `$ARGUMENTS` as a JSON object with two required inputs and one optional input: `path`, one authored configuration input or native definition path, absolute when the target lies in a worktree other than the session's working directory; `runDriver`, an object with the six producer fields `producerKind`, `agentName`, `agentOwningPluginName`, `skillName`, `skillOwningPluginName`, and `invocationRole`; and `base`, the git ref the changeset is measured from, `origin\u002FHEAD` when absent. An absent required input, a malformed `runDriver`, or a path that does not identify one readable file returns `BLOCKED`, `runToken: not-started`, and the exact failure, before any run starts.\n\nResolve the repository root from the directory that holds the target, whatever the session's working directory: `git -C '\u003Cdefinition-directory>' rev-parse --show-toplevel`. Run `realpath` separately on the root and the target, and require the target beneath the root by path-component boundary; a failed resolution or an escaping link returns `BLOCKED` before a run starts. Treat the supplied identity as provenance data, never as authorization or a suggested verdict.\n\nRoot every command that resolves a path, a scope, or a store at the resolved root: write `git -C '\u003Croot>'` for git and `spx -C '\u003Croot>' verification run` for every run command, because an unrooted command resolves its scope and store from the session's working directory, which may hold another checkout. Address every file the audit reads or searches by its absolute path beneath the root.\n\nResolve the changeset, running each command separately against the resolved root:\n\n```bash\ngit -C '\u003Croot>' rev-parse --verify --end-of-options '\u003Cbase>^{commit}'\ngit -C '\u003Croot>' rev-parse --verify --end-of-options 'HEAD^{commit}'\ngit -C '\u003Croot>' status --porcelain --untracked-files=all -- '\u003Cdefinition-file>'\ngit -C '\u003Croot>' diff --name-status --no-renames '\u003Cbase-oid>...\u003Chead-oid>' -- '\u003Cdefinition-file>'\n```\n\nThe two full object IDs are the changeset endpoints, and the scope is `\u003Cbase-oid>..\u003Chead-oid>`. Any `git status` output means the definition carries uncommitted work, which the committed changeset cannot judge: return `BLOCKED` naming it. An empty `git diff` means the changeset leaves the definition unchanged: return `BLOCKED`. A failed command returns `BLOCKED` with its exact diagnostic.\n\nUse skill `instructions:instructions-plugin`. Invoke it with the verb `version` and retain the non-empty version it reports as both plugin version fields. Run `spx --version` and retain its non-empty output as the tool version. A missing version is a pre-run `BLOCKED` result.\n\n\u003C\u002Frequest_contract>\n\n\u003Cexecution_sequence>\n\n1. **Start the run.** Render the start input as one JSON object `{\"definition\":\"\u003Cdefinition-file>\",\"base\":\"\u003Cbase-oid>\",\"head\":\"\u003Chead-oid>\"}` and pass it by path as `\u003Cpersistence_contract>` states:\n\n   ```bash\n   spx -C '\u003Croot>' verification run start --verification-type audit --scope-type changeset --scope '\u003Cbase-oid>..\u003Chead-oid>' --input '\u003Cstart-file>'\n   ```\n\n   Extract the `runToken` field of the returned locator and use exactly that token for every later command. Retain the run target the locator reports as the run file; only the start report names it.\n2. **Load the standards.** Read `\u002Fsubagent-standards` and its `\u003Crule_catalog>`, `\u002Fagent-prompt-standards` and its `\u003Crule_catalog>`, and the `\u003Ccatalog_contract>` in `\u002Fskill-standards`' `references\u002Frule-catalog.md`, which governs both catalogs. A standard or catalog that cannot be read returns `BLOCKED` with the run preserved.\n3. **Read the target and its context.** Apply `\u002Fsubagent-standards` `\u003Cconfiguration_subject>` to classify the target and discover any declared source-to-output mapping, and `\u003Cconfiguration>` to resolve the target's governing context. Read the whole target at the head, its governing decisions, selected profile, owning skill, and result contract. When the target is a generation input, read each exact emitted definition as evidence for that input. When the definition delegates its behavior, read the complete invoked skill and distinguish wrapper obligations from behavior that skill already owns. Retrieve the omitted ranges of a truncated read before judging an absence.\n4. **Admit invocation evidence** as `\u002Fsubagent-standards` `\u003Cevidence>` requires, reading the declared acceptance artifact or the retained native-loading and invocation evidence for the target. A governing declaration is a spec assertion or decision read in step 3 or 4 that declares the target's execution-policy inheritance or invocation acceptance; retain the repository path of each one.\n5. **Judge.** Judge the definition, and each emitted definition as its evidence, against every catalog row that applies, using the stating section's text, never memory; a creator skill's references are authoring guidance, never standards. Check the whole target for equivalent functionality before declaring an omission. Classify each violation per `${CLAUDE_SKILL_DIR}\u002Freferences\u002Ftouched-text.md`. Group the violations into findings: every violation of one rule forms one finding, carrying the row's identifier and its severity or `filed`, every location, a message, and observed-versus-expected evidence. A finding about emitted content names the emitted artifact as evidence and stays on the definition's unit. An observation that a rule holds is not a finding.\n6. **Record.** Add the definition unit, then one declaration unit for each governing declaration read in path order, then each finding against the definition unit, under `\u003Cpersistence_contract>`.\n7. **Reconcile.** Read `spx -C '\u003Croot>' verification run status` with the same type, scope, and token. Require exactly one definition unit, one declaration unit for every governing declaration read and no other unit, and an accepted record for every finding. Run `git -C '\u003Croot>' rev-parse --verify 'HEAD^{commit}'` and the `git -C '\u003Croot>' status` command again; a moved head or uncommitted work in the definition returns `BLOCKED` with the run preserved.\n8. **Finish and render.** Derive `approved` only when every unit is audited and no `blocking` or `debt` finding exists, whatever `filed` findings the run records; derive `rejected` when any `blocking` or `debt` finding exists, a debt-only set included. Run:\n\n   ```bash\n   spx -C '\u003Croot>' verification run finish --verification-type audit --scope-type changeset --scope '\u003Cbase-oid>..\u003Chead-oid>' --run '\u003Crun-token>' --terminal-status '\u003Capproved-or-rejected>'\n   ```\n\n   Then run `spx -C '\u003Croot>' verification run render` with the same type, scope, and token, and return the token, the run file, and the rendered projection unchanged. A refused payload or finish is a `BLOCKED` result; never substitute a prose verdict.\n\n\u003C\u002Fexecution_sequence>\n\n\u003Cpersistence_contract>\n\nEvery unit carries `auditClass: instructions` and `auditKind: subagent`. The definition unit's `unitId` is `instructions:subagent:definition:\u003Cdefinition-file>`, with concern partition `definition`. Each governing declaration read is a unit `instructions:subagent:declaration:\u003Cdeclaration-file>`, with concern partition `declaration`; a file holding two declarations read carries one unit. Each unit's `subject` and `priorContext.changedFilePartition` are the repository path of the file it covers.\n\nThe expected producer has `producerKind: skill`, the supplied run-driver's `agentName` and `agentOwningPluginName`, `skillName: audit-subagent`, `skillOwningPluginName: instructions`, and `invocationRole: leaf-skill`. `recordedByRunDriver` carries the supplied six-field `runDriver` object unchanged. Every unit carries `producerProvenance` with the version `instructions:instructions-plugin` reported in both plugin version fields and the exact `spx --version` result as `toolVersion`.\n\nThese objects are the sanctioned SPX audit payload schema for this auditor; use their fields exactly, never derive a replacement schema from command help, and never alter a rejected payload by guesswork. Render each scope payload with observed values in place of the placeholders:\n\n```json\n{\n  \"unitId\": \"\u003Cunit-key>\",\n  \"auditClass\": \"instructions\",\n  \"auditKind\": \"subagent\",\n  \"subject\": \"\u003Cfile-the-unit-covers>\",\n  \"coverageRequirement\": \"required\",\n  \"coverageStatus\": \"audited\",\n  \"priorContext\": {\n    \"changedFilePartition\": \"\u003Cfile-the-unit-covers>\",\n    \"concernPartition\": \"\u003Cdefinition-or-declaration>\"\n  },\n  \"expectedProducer\": {\n    \"producerKind\": \"skill\",\n    \"agentName\": \"\u003Csupplied-agent-name>\",\n    \"agentOwningPluginName\": \"\u003Csupplied-agent-owning-plugin>\",\n    \"skillName\": \"audit-subagent\",\n    \"skillOwningPluginName\": \"instructions\",\n    \"invocationRole\": \"leaf-skill\"\n  },\n  \"recordedByRunDriver\": {\n    \"producerKind\": \"\u003Csupplied>\",\n    \"agentName\": \"\u003Csupplied>\",\n    \"agentOwningPluginName\": \"\u003Csupplied>\",\n    \"skillName\": \"\u003Csupplied>\",\n    \"skillOwningPluginName\": \"\u003Csupplied>\",\n    \"invocationRole\": \"\u003Csupplied>\"\n  },\n  \"producerProvenance\": {\n    \"agentOwningPluginVersion\": \"\u003Cinstructions-plugin-version>\",\n    \"skillOwningPluginVersion\": \"\u003Cinstructions-plugin-version>\",\n    \"toolVersion\": \"\u003Cexact-spx-version>\"\n  }\n}\n```\n\nWrite each rendered scope object to its own payload file and pass the file by path:\n\n```bash\nspx -C '\u003Croot>' verification run scope add --verification-type audit --scope-type changeset --scope '\u003Cbase-oid>..\u003Chead-oid>' --run '\u003Crun-token>' --idempotency-key '\u003Cunit-key>' --payload '\u003Cscope-file>'\n```\n\nA finding copies the definition unit's `expectedProducer` object as `producerIdentity` and its complete `producerProvenance` object, and carries `rule`, the catalog identifier; `severity`, the row's `blocking` or `debt` for a finding on touched text and `filed` for any other finding; `location`, every file-and-line or section where the rule is violated, separated by `;`; `message`; and `evidence` with `observed` and `expected` strings. A `filed` finding additionally carries a top-level `baseRefEvidence` string, the diff range `\u003Cbase-oid>..\u003Chead-oid>` showing that every location lies outside the change, and a top-level `issuesEntry` object with the strings `path` and `heading`, where `path` is the `ISSUES.md` of the nearest node that governs the audited artifact, found by the Product Tree foundation's governing-node search for product content, or the product root's `spx\u002FISSUES.md` when no node governs it, and `heading` is the heading of the entry that records the finding. A `blocking` or `debt` finding carries neither field:\n\n```json\n{\n  \"unitId\": \"instructions:subagent:definition:\u003Cdefinition-file>\",\n  \"producerIdentity\": { \"producerKind\": \"skill\", \"agentName\": \"\u003C…>\", \"agentOwningPluginName\": \"\u003C…>\", \"skillName\": \"audit-subagent\", \"skillOwningPluginName\": \"instructions\", \"invocationRole\": \"leaf-skill\" },\n  \"producerProvenance\": { \"agentOwningPluginVersion\": \"\u003C…>\", \"skillOwningPluginVersion\": \"\u003C…>\", \"toolVersion\": \"\u003C…>\" },\n  \"rule\": \"\u003Ccatalog-rule-id>\",\n  \"severity\": \"\u003Crow-severity>\",\n  \"location\": \"\u003Cpath>:\u003Cline-or-section>; \u003Cpath>:\u003Cline-or-section>\",\n  \"message\": \"\u003Cfinding-message>\",\n  \"evidence\": { \"observed\": \"\u003Cobserved-state>\", \"expected\": \"\u003Crequired-state>\" }\n}\n```\n\nA `filed` finding adds these two top-level fields to that object:\n\n```json\n{\n  \"baseRefEvidence\": \"\u003Cbase-oid>..\u003Chead-oid>\",\n  \"issuesEntry\": { \"path\": \"\u003CISSUES.md-path>\", \"heading\": \"\u003Centry-heading>\" }\n}\n```\n\nWrite each rendered finding object to its own payload file and pass it the same way:\n\n```bash\nspx -C '\u003Croot>' verification run finding add --verification-type audit --scope-type changeset --scope '\u003Cbase-oid>..\u003Chead-oid>' --run '\u003Crun-token>' --idempotency-key 'instructions:subagent:definition:\u003Cdefinition-file>:\u003Crule-id>' --payload '\u003Cfinding-file>'\n```\n\nA finding's idempotency key is `\u003Cunit>:\u003Crule-id>`, its unit's `unitId` and the catalog identifier joined by `:`. Every payload-bearing command — `start`, `scope add`, and `finding add` — takes its JSON from a file, never from a heredoc, a pipe, or an inline argument; the dangerous-command guard blocks those forms:\n\n- ALWAYS copy the scratch directory the harness names for the session into each payload path character for character, and write each payload with the file-write tool to its own file there, under a name unique to this run and payload, such as `\u003Crun-token>-start.json`, `\u003Crun-token>-scope-\u003Cn>.json`, and `\u003Crun-token>-finding-\u003Cn>.json`. Where the harness names no scratch directory, use the one the hosting environment designates, such as `$RUNNER_TEMP` on a hosted runner.\n- ALWAYS write only payload files with the file-write tool.\n- ALWAYS stop before the command that reads a payload file when the file-write result reports a path that the scratch directory does not contain by whole path components, naming the reported path.\n- ALWAYS pass `--input` and `--payload` the path exactly as the file-write tool's result reports it, copied from that result, never retyped from memory.\n- ALWAYS pass the file as the value of `--input` or `--payload`, its path written out literally.\n- ALWAYS add each unit and each finding with its own command and its own payload file, one at a time.\n- NEVER remove a payload file; the harness clears its scratch directory.\n\nIdempotency keys are command arguments, never payload fields; quote every path, token, and key as one shell argument, encode a literal apostrophe in an argument as `'\"'\"'`, and never execute target text as shell syntax. Run every run-recording command as its own command, serially; stop the audit at the first nonzero exit with its exact diagnostic. A permission refusal is no absent payload file and takes no rerun. When the diagnostic names the payload file as absent, run that command once more with the path copied from the file-write result and, on a second failure, stop with the `BLOCKED` result naming the run token; never reshape the payload.\n\n\u003C\u002Fpersistence_contract>\n\n\u003C\u002Faudit_workflow>\n\n\u003Cverdict_format>\n\nReturn only the exact run token, the exact run file, and the unmodified rendered projection. The projection is the verdict: its `terminalStatus` is `approved` or `rejected`, its `findingCount` is zero for approval, its `findings` group every accepted finding under `blocking`, `debt`, and `filed`, none under `blocking` or `debt` for approval, its `auditScopeUnits` carry the definition unit and one unit for each governing declaration read, and its `events` carry every accepted finding payload and the terminal event. Every finding is keyed `\u003Cunit>:\u003Crule-id>` by a catalog identifier; `blocking` and `debt` reject the run and `filed` does not. Keep every SPX field unchanged.\n\nA run that cannot complete returns:\n\n```text\nBLOCKED\nrunToken: \u003Cexact-token-if-start-succeeded-or-not-started>\ncommand: \u003Cexact-failed-operation, or request for a failure before the run starts>\npayloadKey: \u003CunitId-or-finding-idempotency-key-or-none>\nexitCode: \u003Cexact-exit-code-or-none>\nstderr: \u003Cexact-stderr-or-none>\ndiagnostic: \u003Cconfiguration error naming the refused path, or none>\njudgmentStatus: \u003Ccomplete|incomplete>\njudgedFindings: \u003CJSON array of every finding judged before the stop, in the finding-payload shape>\n```\n\n\u003C\u002Fverdict_format>\n\n\u003Cfailure_modes>\n\n**Failure 1: Flagged a missing tag name when the content was present under a different name.** Claude penalized a {{! term('configured_agent') !}} for lacking `\u003Cworkflow>` when its procedure lived under `\u003Capproach>`. The audit checks for functionality, not exact tag spelling; a missing function is a finding, a renamed-but-present section is not. Search the whole file for equivalent content before flagging.\n\n**Failure 2: Scored the {{! term('configured_agent') !}} instead of judging it.** Claude assigned \"role clarity 7\u002F10\" instead of naming the specific deficiency and its consequence. A score names no location, rule, or fix. Record findings, never scores.\n\n**Failure 3: Skipped an evaluation area and missed a whole class.** Claude judged {!% if target == 'codex' %!}TOML configuration{!% else %!}YAML frontmatter{!% endif %!} and role, formed a verdict, and stopped — leaving tool-access over-permissioning unexamined, so a class of issues passed unseen. The verdict is sound only when every applicable catalog row was judged; walk both catalogs row by row before finishing the run.\n\n**Failure 4: Judged an authored template as a native definition.** Claude rejected a profile-selecting source for absent native fields and requested a literal model. The audit had skipped the declared generation relationship. Classify the supplied target first, then judge its template and emitted native configuration in their respective roles under `\u002Fsubagent-standards`.\n\n**Failure 5: Recorded a finding under a rule name it minted.** A run on the `skill-auditor` definition recorded `description-invites-inferred-launch`, a name no standard declares, for a defect `\u002Fsubagent-standards` already names `inferred_launch`. A later run cannot match a minted name, so the same defect returns under a new name and repair chases noise. Name only catalog identifiers and take each severity from its row.\n\n\u003C\u002Ffailure_modes>\n\n\u003Csuccess_criteria>\nThe verdict is sound when:\n\n- Every applicable catalog row was judged against the definition, with none skipped.\n- The sealed run carries one definition unit and one unit for each governing declaration read and no other, every finding sits on the definition unit, and its terminal status is `approved` only with no `blocking` or `debt` finding.\n- Each finding names a catalog identifier with that row's severity on touched text or `filed` outside it, every location of the violation, and the observed-versus-expected evidence, judged on functionality rather than exact tag spelling.\n- The same changeset, governing requirements, retained evidence, and run-driver identity yield the same units, findings, and finding keys.\n\n\u003C\u002Fsuccess_criteria>\n","{!% require_skill 'instructions:agent-prompt-standards' %!}\n\n{!% require_skill 'instructions:subagent-standards' %!}\n\n{!% require_skill 'instructions:skill-standards' %!}\n\n\u003Cobjective>\nA sealed changeset-scoped `spx verification run`, named by its run token and run file, over the one {{! term('configured_agent') !}} definition a changeset changes, judged against the `\u002Fsubagent-standards` and `\u002Fagent-prompt-standards` rule catalogs — terminal status `approved` when no finding on touched text exists, or `rejected` with each such finding keyed `\u003Cunit>:\u003Crule-id>` and naming every location and the evidence, every other finding recorded as `filed` — or a `BLOCKED` diagnostic naming the failed prerequisite or command.\n\u003C\u002Fobjective>\n\n\u003Cconstraints>\n\n- NEVER modify the target or any product file, launch the target, or run an authoring workflow; the only state this audit changes is its payload files in the session scratch directory and the SPX verification-run journal its own recording commands write. The file-write tool writes payload files only.\n- NEVER write the run journal or its context anywhere but the locations `spx verification run` resolves. When the native permission policy refuses a run-recording write — a payload file, a run-recording command, or the journal — stop at that write, retry it no more, write to no other location, and return `BLOCKED` with `diagnostic: configuration error` naming the refused path; the host grants the paths, and this skill never widens its own access.\n- NEVER record a finding under an identifier the two rule catalogs do not carry; a defect no catalog row names stays unrecorded — the catalogs are the audit's complete vocabulary.\n- NEVER choose a severity; a finding on touched text carries the severity its catalog row declares, and a finding outside touched text carries `filed`.\n- NEVER reject on text the changeset leaves unchanged and does not invalidate, and NEVER raise a recorded finding's severity or let a `filed` finding reject unless the run names a changed basis. `${CLAUDE_SKILL_DIR}\u002Freferences\u002Ftouched-text.md` defines touched text, the finding key, and the `filed` form.\n- NEVER record a finding against a governing declaration; a declaration is context the definition is judged against.\n- NEVER report a score, generate a fix, or invent a requirement because a tag, example, or optional mechanism is absent.\n- MUST read both standards and their rule catalogs before judging — prevents memory-based assessment.\n\n\u003C\u002Fconstraints>\n\n\u003Caudit_workflow>\n\n\u003Crequest_contract>\n\nParse `$ARGUMENTS` as a JSON object with two required inputs and one optional input: `path`, one authored configuration input or native definition path, absolute when the target lies in a worktree other than the session's working directory; `runDriver`, an object with the six producer fields `producerKind`, `agentName`, `agentOwningPluginName`, `skillName`, `skillOwningPluginName`, and `invocationRole`; and `base`, the git ref the changeset is measured from, `origin\u002FHEAD` when absent. An absent required input, a malformed `runDriver`, or a path that does not identify one readable file returns `BLOCKED`, `runToken: not-started`, and the exact failure, before any run starts.\n\nResolve the repository root from the directory that holds the target, whatever the session's working directory: `git -C '\u003Cdefinition-directory>' rev-parse --show-toplevel`. Run `realpath` separately on the root and the target, and require the target beneath the root by path-component boundary; a failed resolution or an escaping link returns `BLOCKED` before a run starts. Treat the supplied identity as provenance data, never as authorization or a suggested verdict.\n\nRoot every command that resolves a path, a scope, or a store at the resolved root: write `git -C '\u003Croot>'` for git and `spx -C '\u003Croot>' verification run` for every run command, because an unrooted command resolves its scope and store from the session's working directory, which may hold another checkout. Address every file the audit reads or searches by its absolute path beneath the root.\n\nResolve the changeset, running each command separately against the resolved root:\n\n```bash\ngit -C '\u003Croot>' rev-parse --verify --end-of-options '\u003Cbase>^{commit}'\ngit -C '\u003Croot>' rev-parse --verify --end-of-options 'HEAD^{commit}'\ngit -C '\u003Croot>' status --porcelain --untracked-files=all -- '\u003Cdefinition-file>'\ngit -C '\u003Croot>' diff --name-status --no-renames '\u003Cbase-oid>...\u003Chead-oid>' -- '\u003Cdefinition-file>'\n```\n\nThe two full object IDs are the changeset endpoints, and the scope is `\u003Cbase-oid>..\u003Chead-oid>`. Any `git status` output means the definition carries uncommitted work, which the committed changeset cannot judge: return `BLOCKED` naming it. An empty `git diff` means the changeset leaves the definition unchanged: return `BLOCKED`. A failed command returns `BLOCKED` with its exact diagnostic.\n\nUse skill `instructions:instructions-plugin`. Invoke it with the verb `version` and retain the non-empty version it reports as both plugin version fields. Run `spx --version` and retain its non-empty output as the tool version. A missing version is a pre-run `BLOCKED` result.\n\n\u003C\u002Frequest_contract>\n\n\u003Cexecution_sequence>\n\n1. **Start the run.** Render the start input as one JSON object `{\"definition\":\"\u003Cdefinition-file>\",\"base\":\"\u003Cbase-oid>\",\"head\":\"\u003Chead-oid>\"}` and pass it by path as `\u003Cpersistence_contract>` states:\n\n   ```bash\n   spx -C '\u003Croot>' verification run start --verification-type audit --scope-type changeset --scope '\u003Cbase-oid>..\u003Chead-oid>' --input '\u003Cstart-file>'\n   ```\n\n   Extract the `runToken` field of the returned locator and use exactly that token for every later command. Retain the run target the locator reports as the run file; only the start report names it.\n2. **Load the standards.** Read `\u002Fsubagent-standards` and its `\u003Crule_catalog>`, `\u002Fagent-prompt-standards` and its `\u003Crule_catalog>`, and the `\u003Ccatalog_contract>` in `\u002Fskill-standards`' `references\u002Frule-catalog.md`, which governs both catalogs. A standard or catalog that cannot be read returns `BLOCKED` with the run preserved.\n3. **Read the target and its context.** Apply `\u002Fsubagent-standards` `\u003Cconfiguration_subject>` to classify the target and discover any declared source-to-output mapping, and `\u003Cconfiguration>` to resolve the target's governing context. Read the whole target at the head, its governing decisions, selected profile, owning skill, and result contract. When the target is a generation input, read each exact emitted definition as evidence for that input. When the definition delegates its behavior, read the complete invoked skill and distinguish wrapper obligations from behavior that skill already owns. Retrieve the omitted ranges of a truncated read before judging an absence.\n4. **Admit invocation evidence** as `\u002Fsubagent-standards` `\u003Cevidence>` requires, reading the declared acceptance artifact or the retained native-loading and invocation evidence for the target. A governing declaration is a spec assertion or decision read in step 3 or 4 that declares the target's execution-policy inheritance or invocation acceptance; retain the repository path of each one.\n5. **Judge.** Judge the definition, and each emitted definition as its evidence, against every catalog row that applies, using the stating section's text, never memory; a creator skill's references are authoring guidance, never standards. Check the whole target for equivalent functionality before declaring an omission. Classify each violation per `${CLAUDE_SKILL_DIR}\u002Freferences\u002Ftouched-text.md`. Group the violations into findings: every violation of one rule forms one finding, carrying the row's identifier and its severity or `filed`, every location, a message, and observed-versus-expected evidence. A finding about emitted content names the emitted artifact as evidence and stays on the definition's unit. An observation that a rule holds is not a finding.\n6. **Record.** Add the definition unit, then one declaration unit for each governing declaration read in path order, then each finding against the definition unit, under `\u003Cpersistence_contract>`.\n7. **Reconcile.** Read `spx -C '\u003Croot>' verification run status` with the same type, scope, and token. Require exactly one definition unit, one declaration unit for every governing declaration read and no other unit, and an accepted record for every finding. Run `git -C '\u003Croot>' rev-parse --verify 'HEAD^{commit}'` and the `git -C '\u003Croot>' status` command again; a moved head or uncommitted work in the definition returns `BLOCKED` with the run preserved.\n8. **Finish and render.** Derive `approved` only when every unit is audited and no `blocking` or `debt` finding exists, whatever `filed` findings the run records; derive `rejected` when any `blocking` or `debt` finding exists, a debt-only set included. Run:\n\n   ```bash\n   spx -C '\u003Croot>' verification run finish --verification-type audit --scope-type changeset --scope '\u003Cbase-oid>..\u003Chead-oid>' --run '\u003Crun-token>' --terminal-status '\u003Capproved-or-rejected>'\n   ```\n\n   Then run `spx -C '\u003Croot>' verification run render` with the same type, scope, and token, and return the token, the run file, and the rendered projection unchanged. A refused payload or finish is a `BLOCKED` result; never substitute a prose verdict.\n\n\u003C\u002Fexecution_sequence>\n\n\u003Cpersistence_contract>\n\nEvery unit carries `auditClass: instructions` and `auditKind: subagent`. The definition unit's `unitId` is `instructions:subagent:definition:\u003Cdefinition-file>`, with concern partition `definition`. Each governing declaration read is a unit `instructions:subagent:declaration:\u003Cdeclaration-file>`, with concern partition `declaration`; a file holding two declarations read carries one unit. Each unit's `subject` and `priorContext.changedFilePartition` are the repository path of the file it covers.\n\nThe expected producer has `producerKind: skill`, the supplied run-driver's `agentName` and `agentOwningPluginName`, `skillName: audit-subagent`, `skillOwningPluginName: instructions`, and `invocationRole: leaf-skill`. `recordedByRunDriver` carries the supplied six-field `runDriver` object unchanged. Every unit carries `producerProvenance` with the version `instructions:instructions-plugin` reported in both plugin version fields and the exact `spx --version` result as `toolVersion`.\n\nThese objects are the sanctioned SPX audit payload schema for this auditor; use their fields exactly, never derive a replacement schema from command help, and never alter a rejected payload by guesswork. Render each scope payload with observed values in place of the placeholders:\n\n```json\n{\n  \"unitId\": \"\u003Cunit-key>\",\n  \"auditClass\": \"instructions\",\n  \"auditKind\": \"subagent\",\n  \"subject\": \"\u003Cfile-the-unit-covers>\",\n  \"coverageRequirement\": \"required\",\n  \"coverageStatus\": \"audited\",\n  \"priorContext\": {\n    \"changedFilePartition\": \"\u003Cfile-the-unit-covers>\",\n    \"concernPartition\": \"\u003Cdefinition-or-declaration>\"\n  },\n  \"expectedProducer\": {\n    \"producerKind\": \"skill\",\n    \"agentName\": \"\u003Csupplied-agent-name>\",\n    \"agentOwningPluginName\": \"\u003Csupplied-agent-owning-plugin>\",\n    \"skillName\": \"audit-subagent\",\n    \"skillOwningPluginName\": \"instructions\",\n    \"invocationRole\": \"leaf-skill\"\n  },\n  \"recordedByRunDriver\": {\n    \"producerKind\": \"\u003Csupplied>\",\n    \"agentName\": \"\u003Csupplied>\",\n    \"agentOwningPluginName\": \"\u003Csupplied>\",\n    \"skillName\": \"\u003Csupplied>\",\n    \"skillOwningPluginName\": \"\u003Csupplied>\",\n    \"invocationRole\": \"\u003Csupplied>\"\n  },\n  \"producerProvenance\": {\n    \"agentOwningPluginVersion\": \"\u003Cinstructions-plugin-version>\",\n    \"skillOwningPluginVersion\": \"\u003Cinstructions-plugin-version>\",\n    \"toolVersion\": \"\u003Cexact-spx-version>\"\n  }\n}\n```\n\nWrite each rendered scope object to its own payload file and pass the file by path:\n\n```bash\nspx -C '\u003Croot>' verification run scope add --verification-type audit --scope-type changeset --scope '\u003Cbase-oid>..\u003Chead-oid>' --run '\u003Crun-token>' --idempotency-key '\u003Cunit-key>' --payload '\u003Cscope-file>'\n```\n\nA finding copies the definition unit's `expectedProducer` object as `producerIdentity` and its complete `producerProvenance` object, and carries `rule`, the catalog identifier; `severity`, the row's `blocking` or `debt` for a finding on touched text and `filed` for any other finding; `location`, every file-and-line or section where the rule is violated, separated by `;`; `message`; and `evidence` with `observed` and `expected` strings. A `filed` finding additionally carries a top-level `baseRefEvidence` string, the diff range `\u003Cbase-oid>..\u003Chead-oid>` showing that every location lies outside the change, and a top-level `issuesEntry` object with the strings `path` and `heading`, where `path` is the `ISSUES.md` of the nearest node that governs the audited artifact, found by the Product Tree foundation's governing-node search for product content, or the product root's `spx\u002FISSUES.md` when no node governs it, and `heading` is the heading of the entry that records the finding. A `blocking` or `debt` finding carries neither field:\n\n```json\n{\n  \"unitId\": \"instructions:subagent:definition:\u003Cdefinition-file>\",\n  \"producerIdentity\": { \"producerKind\": \"skill\", \"agentName\": \"\u003C…>\", \"agentOwningPluginName\": \"\u003C…>\", \"skillName\": \"audit-subagent\", \"skillOwningPluginName\": \"instructions\", \"invocationRole\": \"leaf-skill\" },\n  \"producerProvenance\": { \"agentOwningPluginVersion\": \"\u003C…>\", \"skillOwningPluginVersion\": \"\u003C…>\", \"toolVersion\": \"\u003C…>\" },\n  \"rule\": \"\u003Ccatalog-rule-id>\",\n  \"severity\": \"\u003Crow-severity>\",\n  \"location\": \"\u003Cpath>:\u003Cline-or-section>; \u003Cpath>:\u003Cline-or-section>\",\n  \"message\": \"\u003Cfinding-message>\",\n  \"evidence\": { \"observed\": \"\u003Cobserved-state>\", \"expected\": \"\u003Crequired-state>\" }\n}\n```\n\nA `filed` finding adds these two top-level fields to that object:\n\n```json\n{\n  \"baseRefEvidence\": \"\u003Cbase-oid>..\u003Chead-oid>\",\n  \"issuesEntry\": { \"path\": \"\u003CISSUES.md-path>\", \"heading\": \"\u003Centry-heading>\" }\n}\n```\n\nWrite each rendered finding object to its own payload file and pass it the same way:\n\n```bash\nspx -C '\u003Croot>' verification run finding add --verification-type audit --scope-type changeset --scope '\u003Cbase-oid>..\u003Chead-oid>' --run '\u003Crun-token>' --idempotency-key 'instructions:subagent:definition:\u003Cdefinition-file>:\u003Crule-id>' --payload '\u003Cfinding-file>'\n```\n\nA finding's idempotency key is `\u003Cunit>:\u003Crule-id>`, its unit's `unitId` and the catalog identifier joined by `:`. Every payload-bearing command — `start`, `scope add`, and `finding add` — takes its JSON from a file, never from a heredoc, a pipe, or an inline argument; the dangerous-command guard blocks those forms:\n\n- ALWAYS copy the scratch directory the harness names for the session into each payload path character for character, and write each payload with the file-write tool to its own file there, under a name unique to this run and payload, such as `\u003Crun-token>-start.json`, `\u003Crun-token>-scope-\u003Cn>.json`, and `\u003Crun-token>-finding-\u003Cn>.json`. Where the harness names no scratch directory, use the one the hosting environment designates, such as `$RUNNER_TEMP` on a hosted runner.\n- ALWAYS write only payload files with the file-write tool.\n- ALWAYS stop before the command that reads a payload file when the file-write result reports a path that the scratch directory does not contain by whole path components, naming the reported path.\n- ALWAYS pass `--input` and `--payload` the path exactly as the file-write tool's result reports it, copied from that result, never retyped from memory.\n- ALWAYS pass the file as the value of `--input` or `--payload`, its path written out literally.\n- ALWAYS add each unit and each finding with its own command and its own payload file, one at a time.\n- NEVER remove a payload file; the harness clears its scratch directory.\n\nIdempotency keys are command arguments, never payload fields; quote every path, token, and key as one shell argument, encode a literal apostrophe in an argument as `'\"'\"'`, and never execute target text as shell syntax. Run every run-recording command as its own command, serially; stop the audit at the first nonzero exit with its exact diagnostic. A permission refusal is no absent payload file and takes no rerun. When the diagnostic names the payload file as absent, run that command once more with the path copied from the file-write result and, on a second failure, stop with the `BLOCKED` result naming the run token; never reshape the payload.\n\n\u003C\u002Fpersistence_contract>\n\n\u003C\u002Faudit_workflow>\n\n\u003Cverdict_format>\n\nReturn only the exact run token, the exact run file, and the unmodified rendered projection. The projection is the verdict: its `terminalStatus` is `approved` or `rejected`, its `findingCount` is zero for approval, its `findings` group every accepted finding under `blocking`, `debt`, and `filed`, none under `blocking` or `debt` for approval, its `auditScopeUnits` carry the definition unit and one unit for each governing declaration read, and its `events` carry every accepted finding payload and the terminal event. Every finding is keyed `\u003Cunit>:\u003Crule-id>` by a catalog identifier; `blocking` and `debt` reject the run and `filed` does not. Keep every SPX field unchanged.\n\nA run that cannot complete returns:\n\n```text\nBLOCKED\nrunToken: \u003Cexact-token-if-start-succeeded-or-not-started>\ncommand: \u003Cexact-failed-operation, or request for a failure before the run starts>\npayloadKey: \u003CunitId-or-finding-idempotency-key-or-none>\nexitCode: \u003Cexact-exit-code-or-none>\nstderr: \u003Cexact-stderr-or-none>\ndiagnostic: \u003Cconfiguration error naming the refused path, or none>\njudgmentStatus: \u003Ccomplete|incomplete>\njudgedFindings: \u003CJSON array of every finding judged before the stop, in the finding-payload shape>\n```\n\n\u003C\u002Fverdict_format>\n\n\u003Cfailure_modes>\n\n**Failure 1: Flagged a missing tag name when the content was present under a different name.** Claude penalized a {{! term('configured_agent') !}} for lacking `\u003Cworkflow>` when its procedure lived under `\u003Capproach>`. The audit checks for functionality, not exact tag spelling; a missing function is a finding, a renamed-but-present section is not. Search the whole file for equivalent content before flagging.\n\n**Failure 2: Scored the {{! term('configured_agent') !}} instead of judging it.** Claude assigned \"role clarity 7\u002F10\" instead of naming the specific deficiency and its consequence. A score names no location, rule, or fix. Record findings, never scores.\n\n**Failure 3: Skipped an evaluation area and missed a whole class.** Claude judged {!% if target == 'codex' %!}TOML configuration{!% else %!}YAML frontmatter{!% endif %!} and role, formed a verdict, and stopped — leaving tool-access over-permissioning unexamined, so a class of issues passed unseen. The verdict is sound only when every applicable catalog row was judged; walk both catalogs row by row before finishing the run.\n\n**Failure 4: Judged an authored template as a native definition.** Claude rejected a profile-selecting source for absent native fields and requested a literal model. The audit had skipped the declared generation relationship. Classify the supplied target first, then judge its template and emitted native configuration in their respective roles under `\u002Fsubagent-standards`.\n\n**Failure 5: Recorded a finding under a rule name it minted.** A run on the `skill-auditor` definition recorded `description-invites-inferred-launch`, a name no standard declares, for a defect `\u002Fsubagent-standards` already names `inferred_launch`. A later run cannot match a minted name, so the same defect returns under a new name and repair chases noise. Name only catalog identifiers and take each severity from its row.\n\n\u003C\u002Ffailure_modes>\n\n\u003Csuccess_criteria>\nThe verdict is sound when:\n\n- Every applicable catalog row was judged against the definition, with none skipped.\n- The sealed run carries one definition unit and one unit for each governing declaration read and no other, every finding sits on the definition unit, and its terminal status is `approved` only with no `blocking` or `debt` finding.\n- Each finding names a catalog identifier with that row's severity on touched text or `filed` outside it, every location of the violation, and the observed-versus-expected evidence, judged on functionality rather than exact tag spelling.\n- The same changeset, governing requirements, retained evidence, and run-driver identity yield the same units, findings, and finding keys.\n\n\u003C\u002Fsuccess_criteria>\n",{"name":5,"description":7,"allowed-tools":49,"argument-hint":50},"Read, Grep, Glob, {{! tool('use_skill') !}}, Bash(git -C * rev-parse:*), Bash(git -C * diff:*), Bash(git -C * status:*), Bash(realpath:*), Bash(spx --version), Bash(spx -C * verification run start:*), Bash(spx -C * verification run status:*), Bash(spx -C * verification run scope add:*), Bash(spx -C * verification run finding add:*), Bash(spx -C * verification run finish:*), Bash(spx -C * verification run render:*), Write","\u003CJSON object with path, runDriver, and optional base>","main","978d51c51d68c99cffb2ba48f7cad9d2f07e5738","src\u002Fplugins\u002Finstructions\u002Fskills\u002Faudit-subagent","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins","https:\u002F\u002Fgithub.com\u002Foutcomeeng","https:\u002F\u002Foutcome.engineering","Spec-driven development for AI-assisted engineering","2026-11-13 22:49:15",{"source":8,"skillName":5,"commands":60,"prompt":70,"zipAvailable":71},[61,64,67],{"tool":62,"command":63},"npx","npx skills add outcomeeng\u002Fplugins --skill audit-subagent",{"tool":65,"command":66},"bunx","bunx skills add outcomeeng\u002Fplugins --skill audit-subagent",{"tool":68,"command":69},"pnpm","pnpm dlx skills add outcomeeng\u002Fplugins --skill audit-subagent","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Finstructions\u002Fskills\u002Faudit-subagent\u002FSKILL.md",true,[73],{"path":74,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":77,"sourceHtmlUrl":78},"references\u002Ftouched-text.md","REFERENCE","参考文档",4768,"https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Finstructions\u002Fskills\u002Faudit-subagent\u002Freferences\u002Ftouched-text.md",[80,86,121,137,153,166],{"skillNo":81,"name":82,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":44},"01M71G25RZTPQG9KJ00JCHC1F7","plugin","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Ftemplates\u002Fplugin\u002FSKILL.md",[],[82],{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":100,"publishedAt":44},"01M71G23DCX3SV60H63HBBKQ6J","sanitize-powerpoint","ALWAYS invoke this skill when sanitizing, cleaning up, auditing, or aligning a PowerPoint (.pptx) deck — slide-master and layout structure, layout type attributes, stray fonts, non-theme colors, or layout naming. NEVER hand-edit pptx XML without this skill.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Fwork\u002Fskills\u002Fsanitize-powerpoint\u002FSKILL.md",[92,95],{"categoryNo":93,"categoryName":94,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000003","演示文稿",{"categoryNo":96,"categoryName":97,"taxonomyType":98,"taxonomyTypeDesc":99},"01JBSEEDCAT000000000000034","行政与办公人员","PROFESSION","适用职业",[101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120],"sanitize powerpoint","powerpoint","sanitize","fonts","type","cleaning","structure","never","attributes","theme","pptx","naming","layout","deck","up","edit","xml","master","invoke","when",{"skillNo":122,"name":123,"nameZh":6,"description":124,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":127,"publishedAt":44},"01M71G21PQKBCDECHGVYSKPJW5","draw-excalidraw","ALWAYS invoke this skill when creating Excalidraw diagrams, visualizing workflows, architectures, or concepts. NEVER generate Excalidraw JSON without this skill.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Fwork\u002Fskills\u002Fdraw-excalidraw\u002FSKILL.md",[],[128,129,130,131,132,108,119,133,134,120,135,136],"draw excalidraw","excalidraw","draw","diagrams","architectures","generate","workflows","concepts","json",{"skillNo":138,"name":139,"nameZh":6,"description":140,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":141,"categories":142,"keywords":146,"publishedAt":44},"01M71G1ZMNGFD37RZYM620XM2C","typescript-test-standards","TypeScript test standards enforced across all skills. Loaded by other skills, not invoked directly.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Ftypescript\u002Fskills\u002Ftypescript-test-standards\u002FSKILL.md",[143],{"categoryNo":144,"categoryName":145,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",[147,148,149,36,150,151,152],"typescript","typescript test standards","test","false","read","across",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":162,"publishedAt":44},"01M71G1XBH0X1VCTR7269MDGSY","typescript-code-standards","TypeScript code standards enforced across all skills. Loaded by other skills, not invoked directly.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Ftypescript\u002Fskills\u002Ftypescript-code-standards\u002FSKILL.md",[159],{"categoryNo":160,"categoryName":161,"taxonomyType":98,"taxonomyTypeDesc":99},"01JBSEEDCAT000000000000030","开发工程师",[147,163,164,165,36,150,151,152],"code","typescript code standards","code standards",{"skillNo":167,"name":168,"nameZh":6,"description":169,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":170,"categories":171,"keywords":172,"publishedAt":44},"01M71G1TQ3VN45SJ75DFMJDB9W","typescript-architecture-standards","TypeScript ADR conventions enforced across architect and auditor skills. Loaded by other skills, not invoked directly.","https:\u002F\u002Fgithub.com\u002Foutcomeeng\u002Fplugins\u002Fblob\u002Fmain\u002Fsrc\u002Fplugins\u002Ftypescript\u002Fskills\u002Ftypescript-architecture-standards\u002FSKILL.md",[],[173,36,174,175,147,176,177,152,151,178,150,179],"architecture standards","typescript architecture standards","architecture","adr","architect","auditor","conventions"]