@vibe-agent-toolkit/agent-schema 0.1.41-rc.7 → 0.1.41

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -23,14 +23,22 @@ export declare const CODE_REGISTRY: {
23
23
  readonly LINK_OUTSIDE_PROJECT: CodeRegistryEntry;
24
24
  readonly LINK_TARGETS_DIRECTORY: CodeRegistryEntry;
25
25
  readonly LINK_TO_NAVIGATION_FILE: CodeRegistryEntry;
26
+ readonly LINK_TO_AGENT_INSTRUCTION_FILE: CodeRegistryEntry;
26
27
  readonly LINK_TO_GITIGNORED_FILE: CodeRegistryEntry;
27
28
  readonly LINK_MISSING_TARGET: CodeRegistryEntry;
28
29
  readonly LINK_DEFERRED_ARTIFACT: CodeRegistryEntry;
29
30
  readonly LINK_TO_SKILL_DEFINITION: CodeRegistryEntry;
30
31
  readonly LINK_DROPPED_BY_DEPTH: CodeRegistryEntry;
31
32
  readonly PACKAGED_UNREFERENCED_FILE: CodeRegistryEntry;
33
+ readonly PACKAGED_AGENT_INSTRUCTION_FILE: CodeRegistryEntry;
34
+ readonly TREE_PROVENANCE_INDETERMINATE: CodeRegistryEntry;
35
+ readonly FILES_GLOB_DROPPED_NEVER_PACKAGED: CodeRegistryEntry;
36
+ readonly FILES_GLOB_MATCHED_ONLY_NEVER_PACKAGED: CodeRegistryEntry;
37
+ readonly FILES_GLOB_MATCHED_NOTHING: CodeRegistryEntry;
32
38
  readonly PACKAGED_TEST_INPUT: CodeRegistryEntry;
33
39
  readonly PACKAGED_BROKEN_LINK: CodeRegistryEntry;
40
+ readonly FILENAME_COLLISION: CodeRegistryEntry;
41
+ readonly PLUGIN_EXCLUDE_PATTERN_UNUSED: CodeRegistryEntry;
34
42
  readonly DUPLICATE_RESOURCE_ID: CodeRegistryEntry;
35
43
  readonly SKILL_LENGTH_EXCEEDS_RECOMMENDED: CodeRegistryEntry;
36
44
  readonly SKILL_TOTAL_SIZE_LARGE: CodeRegistryEntry;
@@ -69,6 +77,7 @@ export declare const CODE_REGISTRY: {
69
77
  readonly COMPONENT_PRESENT_BUT_UNDECLARED: CodeRegistryEntry;
70
78
  readonly REFERENCE_TARGET_MISSING: CodeRegistryEntry;
71
79
  readonly MARKETPLACE_PLUGIN_SOURCE_MISSING: CodeRegistryEntry;
80
+ readonly REGISTRY_SHAPE_DRIFT: CodeRegistryEntry;
72
81
  readonly LINK_BROKEN_FILE: CodeRegistryEntry;
73
82
  readonly LINK_BROKEN_ANCHOR: CodeRegistryEntry;
74
83
  readonly LINK_UNKNOWN: CodeRegistryEntry;
@@ -92,9 +101,9 @@ export declare const CODE_REGISTRY: {
92
101
  readonly LINK_AUTH_UNVERIFIED: CodeRegistryEntry;
93
102
  };
94
103
  export type IssueCode = keyof typeof CODE_REGISTRY;
95
- export declare const IssueCodeSchema: z.ZodEnum<["LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED", ...("LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED")[]]>;
104
+ export declare const IssueCodeSchema: z.ZodEnum<["LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_AGENT_INSTRUCTION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_AGENT_INSTRUCTION_FILE" | "TREE_PROVENANCE_INDETERMINATE" | "FILES_GLOB_DROPPED_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_ONLY_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_NOTHING" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "FILENAME_COLLISION" | "PLUGIN_EXCLUDE_PATTERN_UNUSED" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "REGISTRY_SHAPE_DRIFT" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED", ...("LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_AGENT_INSTRUCTION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_AGENT_INSTRUCTION_FILE" | "TREE_PROVENANCE_INDETERMINATE" | "FILES_GLOB_DROPPED_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_ONLY_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_NOTHING" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "FILENAME_COLLISION" | "PLUGIN_EXCLUDE_PATTERN_UNUSED" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "REGISTRY_SHAPE_DRIFT" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED")[]]>;
96
105
  /** Codes outside the overridable framework — structural reports. */
97
106
  export type InfoCode = 'FILE_STRUCTURE_REPORT' | 'RESOURCE_INVENTORY' | 'METADATA_SUMMARY' | 'SKILL_IMPLICIT_REFERENCE' | 'SKILL_UNREFERENCED_FILE';
98
107
  /** Codes outside the overridable framework — structural prerequisites / errors that are not subject to severity overrides. */
99
- export type NonOverridableCode = 'SKILL_MISSING_FRONTMATTER' | 'SKILL_MISSING_NAME' | 'SKILL_MISSING_DESCRIPTION' | 'SKILL_NAME_INVALID' | 'SKILL_NAME_XML_TAGS' | 'SKILL_DESCRIPTION_XML_TAGS' | 'SKILL_DESCRIPTION_TOO_LONG' | 'SKILL_DESCRIPTION_EMPTY' | 'SKILL_MISCONFIGURED_LOCATION' | 'LINK_INTEGRITY_BROKEN' | 'PATH_STYLE_WINDOWS' | 'FILENAME_COLLISION' | 'DUPLICATE_FILES_DEST' | 'PLUGIN_MISSING_MANIFEST' | 'PLUGIN_INVALID_JSON' | 'PLUGIN_INVALID_SCHEMA' | 'PLUGIN_MISSING_VERSION' | 'MARKETPLACE_MISSING_MANIFEST' | 'MARKETPLACE_INVALID_JSON' | 'MARKETPLACE_INVALID_SCHEMA' | 'MARKETPLACE_MISSING_LICENSE' | 'MARKETPLACE_MISSING_README' | 'MARKETPLACE_MISSING_CHANGELOG' | 'MARKETPLACE_MISSING_VERSION' | 'REGISTRY_MISSING_FILE' | 'REGISTRY_INVALID_JSON' | 'REGISTRY_INVALID_SCHEMA' | 'UNKNOWN_FORMAT' | 'SKILL_TOO_LONG' | 'REFERENCE_MISSING_TOC' | 'DESCRIPTION_FIRST_PERSON' | 'RESOURCE_UNREACHABLE';
108
+ export type NonOverridableCode = 'SKILL_MISSING_FRONTMATTER' | 'SKILL_MISSING_NAME' | 'SKILL_MISSING_DESCRIPTION' | 'SKILL_NAME_INVALID' | 'SKILL_NAME_XML_TAGS' | 'SKILL_DESCRIPTION_XML_TAGS' | 'SKILL_DESCRIPTION_TOO_LONG' | 'SKILL_DESCRIPTION_EMPTY' | 'SKILL_MISCONFIGURED_LOCATION' | 'LINK_INTEGRITY_BROKEN' | 'PATH_STYLE_WINDOWS' | 'DUPLICATE_FILES_DEST' | 'PLUGIN_MISSING_MANIFEST' | 'PLUGIN_INVALID_JSON' | 'PLUGIN_INVALID_SCHEMA' | 'PLUGIN_MISSING_VERSION' | 'MARKETPLACE_MISSING_MANIFEST' | 'MARKETPLACE_INVALID_JSON' | 'MARKETPLACE_INVALID_SCHEMA' | 'MARKETPLACE_MISSING_LICENSE' | 'MARKETPLACE_MISSING_README' | 'MARKETPLACE_MISSING_CHANGELOG' | 'MARKETPLACE_MISSING_VERSION' | 'REGISTRY_MISSING_FILE' | 'REGISTRY_INVALID_JSON' | 'REGISTRY_INVALID_SCHEMA' | 'UNKNOWN_FORMAT' | 'SKILL_TOO_LONG' | 'REFERENCE_MISSING_TOC' | 'DESCRIPTION_FIRST_PERSON' | 'RESOURCE_UNREACHABLE';
100
109
  //# sourceMappingURL=validation-codes.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation-codes.d.ts","sourceRoot":"","sources":["../src/validation-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpE,2DAA2D;AAC3D,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAC;CACnB;AASD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA2a4B,CAAC;AAEvD,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,aAAa,CAAC;AAEnD,eAAO,MAAM,eAAe,s7HAE3B,CAAC;AAEF,oEAAoE;AACpE,MAAM,MAAM,QAAQ,GAChB,uBAAuB,GACvB,oBAAoB,GACpB,kBAAkB,GAClB,0BAA0B,GAC1B,yBAAyB,CAAC;AAE9B,8HAA8H;AAC9H,MAAM,MAAM,kBAAkB,GAC1B,2BAA2B,GAC3B,oBAAoB,GACpB,2BAA2B,GAC3B,oBAAoB,GACpB,qBAAqB,GACrB,4BAA4B,GAC5B,4BAA4B,GAC5B,yBAAyB,GACzB,8BAA8B,GAC9B,uBAAuB,GACvB,oBAAoB,GACpB,oBAAoB,GACpB,sBAAsB,GACtB,yBAAyB,GACzB,qBAAqB,GACrB,uBAAuB,GACvB,wBAAwB,GACxB,8BAA8B,GAC9B,0BAA0B,GAC1B,4BAA4B,GAC5B,6BAA6B,GAC7B,4BAA4B,GAC5B,+BAA+B,GAC/B,6BAA6B,GAC7B,uBAAuB,GACvB,uBAAuB,GACvB,yBAAyB,GACzB,gBAAgB,GAChB,gBAAgB,GAChB,uBAAuB,GACvB,0BAA0B,GAC1B,sBAAsB,CAAC"}
1
+ {"version":3,"file":"validation-codes.d.ts","sourceRoot":"","sources":["../src/validation-codes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,MAAM,aAAa,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpE,2DAA2D;AAC3D,MAAM,MAAM,eAAe,GAAG,OAAO,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC;AAE/D,MAAM,WAAW,iBAAiB;IAChC,eAAe,EAAE,eAAe,CAAC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,GAAG,EAAE,MAAM,CAAC;IACZ,kFAAkF;IAClF,SAAS,EAAE,MAAM,CAAC;CACnB;AASD,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+jB4B,CAAC;AAEvD,MAAM,MAAM,SAAS,GAAG,MAAM,OAAO,aAAa,CAAC;AAEnD,eAAO,MAAM,eAAe,4gJAE3B,CAAC;AAEF,oEAAoE;AACpE,MAAM,MAAM,QAAQ,GAChB,uBAAuB,GACvB,oBAAoB,GACpB,kBAAkB,GAClB,0BAA0B,GAC1B,yBAAyB,CAAC;AAE9B,8HAA8H;AAC9H,MAAM,MAAM,kBAAkB,GAC1B,2BAA2B,GAC3B,oBAAoB,GACpB,2BAA2B,GAC3B,oBAAoB,GACpB,qBAAqB,GACrB,4BAA4B,GAC5B,4BAA4B,GAC5B,yBAAyB,GACzB,8BAA8B,GAC9B,uBAAuB,GACvB,oBAAoB,GAMpB,sBAAsB,GACtB,yBAAyB,GACzB,qBAAqB,GACrB,uBAAuB,GACvB,wBAAwB,GACxB,8BAA8B,GAC9B,0BAA0B,GAC1B,4BAA4B,GAC5B,6BAA6B,GAC7B,4BAA4B,GAC5B,+BAA+B,GAC/B,6BAA6B,GAC7B,uBAAuB,GACvB,uBAAuB,GACvB,yBAAyB,GACzB,gBAAgB,GAChB,gBAAgB,GAChB,uBAAuB,GACvB,0BAA0B,GAC1B,sBAAsB,CAAC"}
@@ -14,14 +14,122 @@ export const CODE_REGISTRY = {
14
14
  LINK_OUTSIDE_PROJECT: entry('error', 'Markdown link points to a file outside the project root.', 'Move the target inside the project or remove the link. Use validation.allow if the reference is intentional and cross-project.', 'link_outside_project'),
15
15
  LINK_TARGETS_DIRECTORY: entry('error', 'A typed single-file reference (e.g. a packaging `files:` source entry) resolves to a directory instead of a file.', 'Point the `files:` source (or other single-file reference) at a specific file, not a directory. Navigational prose links to a directory are valid and do not trigger this code.', 'link_targets_directory'),
16
16
  LINK_TO_NAVIGATION_FILE: entry('warning', 'Markdown link targets a navigation file (README.md, index.md, etc.) which was excluded from the bundle.', 'Link to the specific content instead of the navigation file, or set severity.LINK_TO_NAVIGATION_FILE to ignore if this is intentional.', 'link_to_navigation_file'),
17
- LINK_TO_GITIGNORED_FILE: entry('error', 'Markdown link targets a gitignored file; risks leaking ignored data into the bundle.', 'Link to a non-ignored file or adjust .gitignore. Allow the specific path via validation.allow if the risk has been reviewed.', 'link_to_gitignored_file'),
17
+ LINK_TO_AGENT_INSTRUCTION_FILE: entry('error',
18
+ // "excluded from the bundle" used to be asserted unconditionally, and it was
19
+ // FALSE in the one configuration the fix string recommended: with an explicit
20
+ // files: entry naming the file, the file shipped. The description now states
21
+ // the precondition that makes it true, and names the consequence the old
22
+ // wording left silent — the link is stripped, so the packaged prose points at
23
+ // nothing.
24
+ 'Markdown link targets a repo-internal agent-instruction file (CLAUDE.md, AGENTS.md, GEMINI.md) that no explicit files: entry declares; it is not bundled and the link is stripped from the packaged content.',
25
+ // Three real remedies, then the declaration route. The absolute-URL route is
26
+ // listed because it is the cheapest correct fix for the dominant population —
27
+ // links that point UPWARD out of the skill dir at a file whose canonical home
28
+ // is a repository the reader can open.
29
+ //
30
+ // The declaration route is stated as EXPLICIT (non-glob) deliberately: it used
31
+ // to read "declare it under skills.config.<name>.files" and doing exactly that
32
+ // changed nothing, because the walker refused the link whatever the config
33
+ // said. The remedy told you to do the thing you had already done. It is now
34
+ // honoured, and the qualifier is load-bearing — a glob is a net, not a
35
+ // declaration, and never packages one of these files.
36
+ "Link the specific content the file describes; point the link at the file's canonical home as an absolute URL; or extract the shared part into a document intended for distribution. To ship the file deliberately, name it in an explicit (non-glob) skills.config.<name>.files entry — the file is then bundled and this link is rewritten to the declared dest.", 'link_to_agent_instruction_file'),
37
+ LINK_TO_GITIGNORED_FILE: entry('error', 'Markdown link targets a gitignored file; risks leaking ignored data into the bundle.', 'Link to a non-ignored file or adjust .gitignore. Allow the specific path via validation.allow if the risk has been reviewed. If the target is a build artifact, declare it under skills.config.<name>.files instead.', 'link_to_gitignored_file'),
18
38
  LINK_MISSING_TARGET: entry('error', 'Markdown link target does not exist on disk and is not a declared build artifact.', 'Fix the link path, create the file, or declare it under skills.config.<name>.files as a build artifact.', 'link_missing_target'),
19
39
  LINK_DEFERRED_ARTIFACT: entry('info', 'Link targets a deferred build artifact declared in the skill files: config; it will exist after the build materializes it.', 'No action needed if the files: entry is correct. To silence, set validation.severity.LINK_DEFERRED_ARTIFACT: ignore.', 'link_deferred_artifact'),
20
40
  LINK_TO_SKILL_DEFINITION: entry('error', "Markdown link targets another skill's SKILL.md; bundling it creates duplicate skill definitions.", 'Link to a specific resource inside the other skill, or reference the other skill by name.', 'link_to_skill_definition'),
21
41
  LINK_DROPPED_BY_DEPTH: entry('warning', 'Walker stopped following links at the configured linkFollowDepth; this link was not bundled.', 'Raise linkFollowDepth, bundle the file via files config, declare the drop intentional with validation.allow, or exclude via excludeReferencesFromBundle.rules.', 'link_dropped_by_depth'),
22
42
  PACKAGED_UNREFERENCED_FILE: entry('error', 'File in the packaged output is not referenced from any packaged markdown.', 'Add a markdown link or code-block mention in SKILL.md or a linked resource. A file consumed programmatically belongs in skills.config.<name>.files as a source/dest pair — a declared dest is exempt, so do NOT restate it in validation.allow.', 'packaged_unreferenced_file'),
43
+ PACKAGED_AGENT_INSTRUCTION_FILE: entry('warning', 'A repo-internal agent-instruction file (CLAUDE.md, AGENTS.md, GEMINI.md) is present in the scanned tree — a built skill bundle, an installed plugin, or a plugin source directory.',
44
+ // Two lanes hand this detector different trees, and one remediation has to be
45
+ // true for both. In a DIST tree the file demonstrably shipped, so removing it
46
+ // is the fix. In a repo SOURCE tree the build already excludes it from the
47
+ // plugin tree-copy and from files: globs, so it does not ship unless an
48
+ // explicit files: entry names it — prescribing deletion there told adopters to
49
+ // delete a useful repo-internal doc to silence a warning about a file that no
50
+ // longer travels.
51
+ //
52
+ // The last clause is for the third lane: `vat audit <path>` resolves a subject
53
+ // by PATH, and a built bundle's path is not its source skill's declared path,
54
+ // so that lane cannot reach the `files:` block that may have sanctioned the
55
+ // file. `vat build` and `vat verify` CAN, and they honour it by not reporting
56
+ // at all — so a reader who sees this from audit alone must not conclude the
57
+ // declaration failed.
58
+ 'In a distributed tree (a built bundle or an installed plugin) remove the file, or move it outside the directory that is packaged. In a repo source tree, confirm first whether it ships: the build excludes agent-instruction files from the plugin tree-copy and from files: globs, so only an explicit files: entry naming it puts it in the output. If it must ship, set severity.PACKAGED_AGENT_INSTRUCTION_FILE to ignore so the exception is recorded in config. If an explicit files: entry already names this dest, vat build and vat verify honour it and stay silent; vat audit reports it anyway because a path-addressed scan cannot see the config that declared it.', 'packaged_agent_instruction_file'),
59
+ // The companion PACKAGED_AGENT_INSTRUCTION_FILE needs in order to be allowed to
60
+ // stay silent. Its audit lane only reports files in a DISTRIBUTED tree, and the
61
+ // distributed/source question is answered from git — so anything that stops git
62
+ // answering (no binary on PATH, a corrupt or unreadable `.git`) used to collapse
63
+ // to "not ignored", i.e. source, i.e. silence, with `status: success` and no
64
+ // trace anywhere that the detector had been switched off.
65
+ //
66
+ // A missing answer is therefore reported as a missing answer. Deliberately NOT
67
+ // resolved by assuming `distributed`: that manufactures a substantive claim
68
+ // about the artifact ("this file shipped to consumers") that nothing observed,
69
+ // and its remediation — remove the file — is wrong advice for the ordinary
70
+ // source tree in a container with no git.
71
+ //
72
+ // `warning`, matching the code it stands in for, so a CI gate counting warnings
73
+ // cannot be quietly zeroed by breaking git. Emitted only when the tree actually
74
+ // holds agent-instruction files: with none there, nothing was left unclassified
75
+ // and healthy git would have said nothing either.
76
+ TREE_PROVENANCE_INDETERMINATE: entry('warning', 'Could not determine whether a scanned skill tree is repository source or a distributed artifact, because `git` could not be consulted; agent-instruction files present in the tree were left unclassified rather than silently accepted.', 'Make `git` runnable for this tree — install it, put it on PATH, or repair the repository whose `.git` directory could not be read — then re-run the audit. Set severity.TREE_PROVENANCE_INDETERMINATE to ignore if this environment deliberately has no git and the unclassified files are known to be repository source.', 'tree_provenance_indeterminate'),
77
+ FILES_GLOB_DROPPED_NEVER_PACKAGED: entry('warning', 'A `files:` glob matched a file that is never packaged into a skill bundle (an agent-instruction file such as CLAUDE.md, or a navigation file such as README.md); it was dropped and did not ship.', 'No action needed if the drop is intended — a glob is a net, not a declaration. To ship that specific file deliberately, add an explicit `files:` entry naming it (`source: <path>`); to stop matching it at all, narrow the glob.', 'files_glob_dropped_never_packaged'),
78
+ // The third of three verdicts a pre-build gate can reach about one glob entry
79
+ // (partial drop / nothing shippable / nothing matched). This one: the glob
80
+ // matched, and the never-package list refused EVERY match, so the entry ships
81
+ // nothing and `copyGlobEntry` raises its own distinct error.
82
+ //
83
+ // A separate code rather than a widened FILES_GLOB_MATCHED_NOTHING because the
84
+ // two have different causes and therefore different remedies: "produce the
85
+ // artifact first" is useless advice for a glob that netted only files VAT never
86
+ // packages, and "name the file explicitly" is useless for one whose directory
87
+ // is empty. One code would have to carry both, and a reader would have to work
88
+ // out which half applied to them.
89
+ //
90
+ // `warning`, not `error`: a pre-build tree can be a PARTIAL artifact just as it
91
+ // can be an absent one — a stale `dist/` holding only a README.md is the same
92
+ // phenomenon that makes the zero-match `info` — so blocking CI here can be
93
+ // wrong. Louder than `info` because, unlike an empty directory, a directory
94
+ // containing only never-packaged files is not the ordinary pre-build state.
95
+ FILES_GLOB_MATCHED_ONLY_NEVER_PACKAGED: entry('warning', 'A `files:` glob matched only files that are never packaged into a skill bundle (agent-instruction files such as CLAUDE.md, navigation files such as README.md), so the entry ships nothing and `vat skills build` fails on it.',
96
+ // Deliberately does NOT say "widen the glob": the never-package filter matches
97
+ // on basename and applies at any width, so a wider glob clears the error while
98
+ // still shipping none of these files — advice that looks like it worked.
99
+ 'Name the file you intend to ship in an explicit (non-glob) `files:` entry (`source: <path>`), or point the glob at a directory that holds files which can be packaged. Widening the glob does not help — the never-package filter matches on basename at any width. Set severity.FILES_GLOB_MATCHED_ONLY_NEVER_PACKAGED to ignore if the entry is deliberately inert.', 'files_glob_matched_only_never_packaged'),
100
+ // Distinct from FILES_GLOB_DROPPED_NEVER_PACKAGED, which is about a glob that
101
+ // MATCHED and then had a match refused, and from
102
+ // FILES_GLOB_MATCHED_ONLY_NEVER_PACKAGED, where it matched and none survived.
103
+ // This one is about a glob that matched nothing at all — the other input
104
+ // `vat skills build` dies on.
105
+ //
106
+ // `info`, not `warning`: a pre-build gate runs before the artifact exists, so a
107
+ // glob over an unbuilt `dist/` matching nothing is the expected state and must
108
+ // not fail anyone's CI. But "expected state" and "the build will die on this"
109
+ // are both true at once, and the gate used to report NEITHER — reporting the
110
+ // drop that is harmless by design while staying silent about the zero-match
111
+ // that is fatal.
112
+ FILES_GLOB_MATCHED_NOTHING: entry('info', 'A `files:` glob currently matches no files; `vat skills build` fails on a glob that matches nothing, so the build will fail unless that artifact is produced first.', 'No action needed if the glob points at a build artifact your project produces before `vat skills build` runs — matching nothing beforehand is expected. Otherwise correct the pattern (a `files:` source resolves relative to the project root) or drop the entry. Set severity.FILES_GLOB_MATCHED_NOTHING to ignore to silence it everywhere.', 'files_glob_matched_nothing'),
23
113
  PACKAGED_TEST_INPUT: entry('warning', "A link or files: entry pointed into the skill's declared test input (its test.evals path) and was NOT packaged; test input — including the expected_output answer key — never ships to consumers.", 'No action needed — the build already excluded it. Remove the link or files: entry to silence this, or move the target out of the test.evals directory if it is genuinely a shipped resource.', 'packaged_test_input'),
24
- PACKAGED_BROKEN_LINK: entry('error', 'Link in the packaged output resolves to a file that is not present in the output (likely a link-rewriter bug).', 'Report the issue — this indicates a VAT bug. As a temporary workaround, set severity.PACKAGED_BROKEN_LINK to ignore while the underlying bug is fixed.', 'packaged_broken_link'),
114
+ PACKAGED_BROKEN_LINK: entry('error',
115
+ // The CAUSE deliberately lives in `fix`, not here. This code has two
116
+ // populations — a link-rewriter bug, and a target the never-package filter
117
+ // dropped on purpose — and only the emitting lane knows which one it is
118
+ // holding, so only the per-issue `fix` can name it. When the cause was
119
+ // asserted in the description ("likely a link-rewriter bug"), the
120
+ // policy-drop branch shipped one issue whose message blamed VAT and whose
121
+ // `fix` said "Nothing to report — VAT dropped this file on purpose": the two
122
+ // halves of a single finding contradicting each other. The description now
123
+ // states only what every emission observed — the link does not resolve in
124
+ // the output — and each lane supplies its own remediation.
125
+ 'Link in the packaged output resolves to a file that is not present in the output.', 'Report the issue — this indicates a VAT bug. As a temporary workaround, set severity.PACKAGED_BROKEN_LINK to ignore while the underlying bug is fixed.', 'packaged_broken_link'),
126
+ FILENAME_COLLISION: entry('error', 'Two source files package to the same destination path in the bundle; one would overwrite the other.', "Rename one of the files, or switch resourceNaming to a path-based strategy ('resource-id' or 'preserve-path') so the sources map to distinct destinations.", 'filename_collision'),
127
+ PLUGIN_EXCLUDE_PATTERN_UNUSED: entry('warning', 'A plugin `exclude:` pattern matched no file in the plugin source tree; it excluded nothing from the built bundle.',
128
+ // Names only what the author can act on. A dead pattern has no "correct"
129
+ // resolution VAT can pick — the path may be a typo, or the junk it used to
130
+ // catch may simply be gone — so the fix is to check it against the source
131
+ // dir and then either correct it or delete the line.
132
+ "Check the pattern against the plugin source directory (patterns are relative to it, and a bare directory name covers its whole subtree), then correct the path — or drop the entry from the marketplace plugin entry's exclude: list if what it targeted no longer exists.", 'plugin_exclude_pattern_unused'),
25
133
  DUPLICATE_RESOURCE_ID: entry('error', 'Two files resolve to the same resource id after path normalization.', 'Rename one of the files so they produce distinct resource ids.', 'duplicate_resource_id'),
26
134
  SKILL_LENGTH_EXCEEDS_RECOMMENDED: entry('warning', 'SKILL.md line count exceeds the recommended limit; longer files degrade skill triggering.', 'Split content into linked resources (progressive disclosure) or allow if the length is justified.', 'skill_length_exceeds_recommended'),
27
135
  SKILL_TOTAL_SIZE_LARGE: entry('warning', 'Total packaged line count exceeds the recommended limit.', 'Reduce bundled content, move references out of the bundle, or allow if the size is justified.', 'skill_total_size_large'),
@@ -39,14 +147,14 @@ export const CODE_REGISTRY = {
39
147
  NON_PORTABLE_ASSET_REFERENCE: entry('warning', 'A skill document (SKILL.md or a reachable bundled reference file) references a bundled script/asset via a non-portable anchor (CLAUDE_PLUGIN_ROOT). It is a Claude Code plugin-only variable that points at the plugin, not the skill, so the path breaks when the skill is mounted standalone (claude.ai upload, API container).', 'Reference bundled files by a path relative to the skill directory (e.g. `scripts/run.mjs`), never via CLAUDE_PLUGIN_ROOT, an absolute path, or an env-var anchor. See the vibe-agent-toolkit:vat-skill-authoring skill.', 'non_portable_asset_reference'),
40
148
  NON_PORTABLE_COMMAND: entry('warning', 'A skill document (SKILL.md or a reachable bundled reference file) instructs an agent to run a shell command that hard-codes a GNU/Linux-only utility or flag (e.g. `timeout`, `grep -P`, `sed -i` with no suffix, `readlink -f`, `date -d`). These fail, or behave differently, on macOS/BSD where the agent may execute them.', 'Use a portable equivalent: `grep -E` for PCRE, `sed -i.bak`/an explicit suffix, a temp file instead of bare `-i`, a portable resolve instead of `readlink -f`, and `date -v`/`-j -f` instead of `date -d`. Gate or avoid `timeout` (absent on macOS by default). See the vibe-agent-toolkit:vat-skill-review skill.', 'non_portable_command'),
41
149
  SKILL_FRONTMATTER_EXTRA_FIELDS: entry('warning', 'SKILL.md frontmatter contains a field outside the standard agentskills.io + Claude Code key set.', 'Move custom data under `metadata.<key>`, or remove the field. Per-project config belongs in vibe-agent-toolkit.config.yaml, not SKILL.md frontmatter.', 'skill_frontmatter_extra_fields'),
42
- SKILL_CROSS_SKILL_AUTH_UNDECLARED: entry('warning', 'SKILL.md body declares a dependency on a sibling skill or ANTHROPIC_*_KEY environment variable that is not mentioned in the description.', 'Name the dependency in the description (e.g. "Requires ado skill for auth" or "Requires ANTHROPIC_ADMIN_API_KEY") so agents loading the skill discover it without reading the body.', 'skill_cross_skill_auth_undeclared'),
150
+ SKILL_CROSS_SKILL_AUTH_UNDECLARED: entry('warning', 'SKILL.md body declares a dependency on a sibling skill or ANTHROPIC_*_KEY environment variable that is not mentioned in the description.', 'Name the dependency in the description (e.g. "Requires ado skill for auth" or "Requires ANTHROPIC_ADMIN_API_KEY") so agents loading the skill discover it without reading the body. Allow via validation.allow with a reason when the dependency is genuinely runtime-optional.', 'skill_cross_skill_auth_undeclared'),
43
151
  SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE: entry('warning', 'Sibling skills in the same package use mixed YAML scalar styles for their `description` frontmatter (e.g., folded `>-` alongside inline double-quoted).', 'Pick one YAML style and apply it to every skill in the package.', 'skill_description_style_mixed_in_package'),
44
152
  PLUGIN_MISSING_DESCRIPTION: entry('info', 'plugin.json is missing the recommended `description` field.', 'Add a "description" field to plugin.json so users see what the plugin does in the listing.', 'plugin_missing_description'),
45
153
  PLUGIN_MISSING_AUTHOR: entry('info', 'plugin.json is missing the recommended `author` field.', 'Add an "author" object (e.g. { "name": "..." }) to plugin.json so downstream consumers can attribute the plugin.', 'plugin_missing_author'),
46
154
  PLUGIN_MISSING_LICENSE: entry('info', 'plugin.json is missing the recommended `license` field.', 'Add a "license" SPDX identifier (e.g. "MIT") to plugin.json so redistribution terms are explicit.', 'plugin_missing_license'),
47
155
  PLUGIN_NAME_NOT_KEBAB_CASE: entry('info', 'Plugin name does not match the kebab-case convention required by Claude Code (lowercase alphanumeric with single hyphens).', 'Rename the plugin to kebab-case (e.g. "my-plugin"). Schema parse already errors; this code surfaces the same finding with a more actionable message.', 'plugin_name_not_kebab_case'),
48
156
  SKILL_NAME_NOT_KEBAB_CASE: entry('info', 'Skill frontmatter `name` does not match the kebab-case convention.', 'Rename the skill to kebab-case (e.g. "my-skill"). Schema parse already errors; this code surfaces the same finding with a more actionable message.', 'skill_name_not_kebab_case'),
49
- SKILL_REFERENCES_BUT_NO_LINKS: entry('info', 'Skill directory contains scripts/, references/, or assets/ subdirectories but the SKILL.md body has zero markdown links into them.', 'Add explicit markdown links from SKILL.md (or a linked file) into the bundled subdirectories, or remove the unreferenced directory. Allow via validation.allow if the assets are consumed programmatically.', 'skill_references_but_no_links'),
157
+ SKILL_REFERENCES_BUT_NO_LINKS: entry('info', 'Skill directory contains scripts/, references/, or assets/ subdirectories but the SKILL.md body has zero markdown links into them.', 'Add explicit markdown links from SKILL.md (or a linked file) into the bundled subdirectories, or remove the unreferenced directory. Assets consumed programmatically belong in skills.config.<name>.files as source/dest pairs a declared dest is exempt, so do NOT restate them in validation.allow.', 'skill_references_but_no_links'),
50
158
  SKILL_BODY_NOT_IMPERATIVE: entry('info', 'SKILL.md body contains second-person instructional openers (e.g. "You should…", "You need to…", "You can…").', 'Rewrite as imperative ("Configure the MCP server…" instead of "You should configure…"). Skill bodies read more cleanly as instructions to the agent rather than to a human reader. Allow via validation.allow if the heuristic misfires on quoted prompts or user dialog.', 'skill_body_not_imperative'),
51
159
  CAPABILITY_LOCAL_SHELL: entry('info', 'Skill references a local-shell tool (Bash/Edit/Write/NotebookEdit) or invokes a shell.', 'Informational. Declare a plugin target that provides shell (claude-code, claude-cowork) so this observation resolves to an expected verdict.', 'capability_local_shell'),
52
160
  CAPABILITY_EXTERNAL_CLI: entry('info', 'Skill invokes an external CLI binary not bundled with the skill.', 'Informational. Ensure the declared target guarantees the binary or document the prerequisite.', 'capability_external_cli'),
@@ -60,6 +168,7 @@ export const CODE_REGISTRY = {
60
168
  COMPONENT_PRESENT_BUT_UNDECLARED: entry('info', 'A component is present under the canonical layout but the manifest declares an explicit list that omits it; the runtime may silently skip it at install.', 'Add the component to the appropriate manifest field, or remove the file if unintended. Skipped when the manifest omits the field entirely (auto-discovery is intentional).', 'component_present_but_undeclared'),
61
169
  REFERENCE_TARGET_MISSING: entry('error', 'A cross-component reference resolved from the manifest points to a path that does not exist.', 'Add the referenced file or correct the path in the manifest.', 'reference_target_missing'),
62
170
  MARKETPLACE_PLUGIN_SOURCE_MISSING: entry('error', 'A marketplace declares a plugin with a path-based source that does not exist.', 'Correct the source path or remove the entry from marketplace.plugins[].', 'marketplace_plugin_source_missing'),
171
+ REGISTRY_SHAPE_DRIFT: entry('info', "An installed-plugins registry written by Claude Code carries a field or scope value VAT's model does not recognize; the registry shape is newer than the model reading it. The value was preserved, not rejected.", "No action needed — VAT reads registries it does not own liberally, so the unknown value passed through untouched. Report the field so VAT's model can catch up, or set severity.REGISTRY_SHAPE_DRIFT to ignore.", 'registry_shape_drift'),
63
172
  // Resources path — link / frontmatter / external-URL codes
64
173
  // Promotions of existing resources-package validator behavior (formerly free-form
65
174
  // lowercase `type` strings). Severities are locked by the design spec and reflect
@@ -68,7 +177,7 @@ export const CODE_REGISTRY = {
68
177
  LINK_BROKEN_FILE: entry('error', 'Local file link points to a non-existent file.', 'Fix the path or create the target.', 'link_broken_file'),
69
178
  LINK_BROKEN_ANCHOR: entry('error', 'Anchor link points to a non-existent heading/id.', 'Fix the fragment or the target heading.', 'link_broken_anchor'),
70
179
  LINK_UNKNOWN: entry('warning', 'Link type could not be classified.', 'Use a recognized link form.', 'link_unknown'),
71
- LINK_TO_GITIGNORED: entry('error', 'A tracked file links to a gitignored file.', 'Link a tracked target or un-ignore it.', 'link_to_gitignored'),
180
+ LINK_TO_GITIGNORED: entry('error', 'A tracked file links to a gitignored file.', 'Link a tracked target or un-ignore it. If the target is a build artifact, declare it under skills.config.<name>.files instead.', 'link_to_gitignored'),
72
181
  LINK_UNRESOLVED_REFERENCE: entry('warning', 'A reference-style link ([text][label] or collapsed [label][]) has no matching [label]: url definition anywhere in the document.', 'Add the missing [label]: url definition, or rewrite as an inline link [text](url).', 'link_unresolved_reference'),
73
182
  MALFORMED_HTML: entry('info', 'HTML resource has well-formedness issues reported by the parser.', 'Fix the malformed markup (unclosed tags, stray characters). Informational by default; raise severity via validation.severity to enforce.', 'malformed_html'),
74
183
  FRONTMATTER_MISSING: entry('error', 'Schema requires frontmatter but the file has none.', 'Add the required frontmatter.', 'frontmatter_missing'),
@@ -1 +1 @@
1
- {"version":3,"file":"validation-codes.js","sourceRoot":"","sources":["../src/validation-codes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation-codes.js","sourceRoot":"","sources":["../src/validation-codes.ts"],"names":[],"mappings":"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"}
@@ -16,8 +16,8 @@ export declare const AllowEntrySchema: z.ZodObject<{
16
16
  }>;
17
17
  export type AllowEntry = z.infer<typeof AllowEntrySchema>;
18
18
  export declare const ValidationConfigSchema: z.ZodObject<{
19
- severity: z.ZodOptional<z.ZodRecord<z.ZodEnum<["LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED", ...("LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED")[]]>, z.ZodEnum<["error", "warning", "info", "ignore"]>>>;
20
- allow: z.ZodOptional<z.ZodRecord<z.ZodEnum<["LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED", ...("LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED")[]]>, z.ZodArray<z.ZodObject<{
19
+ severity: z.ZodOptional<z.ZodRecord<z.ZodEnum<["LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_AGENT_INSTRUCTION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_AGENT_INSTRUCTION_FILE" | "TREE_PROVENANCE_INDETERMINATE" | "FILES_GLOB_DROPPED_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_ONLY_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_NOTHING" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "FILENAME_COLLISION" | "PLUGIN_EXCLUDE_PATTERN_UNUSED" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "REGISTRY_SHAPE_DRIFT" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED", ...("LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_AGENT_INSTRUCTION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_AGENT_INSTRUCTION_FILE" | "TREE_PROVENANCE_INDETERMINATE" | "FILES_GLOB_DROPPED_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_ONLY_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_NOTHING" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "FILENAME_COLLISION" | "PLUGIN_EXCLUDE_PATTERN_UNUSED" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "REGISTRY_SHAPE_DRIFT" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED")[]]>, z.ZodEnum<["error", "warning", "info", "ignore"]>>>;
20
+ allow: z.ZodOptional<z.ZodRecord<z.ZodEnum<["LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_AGENT_INSTRUCTION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_AGENT_INSTRUCTION_FILE" | "TREE_PROVENANCE_INDETERMINATE" | "FILES_GLOB_DROPPED_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_ONLY_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_NOTHING" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "FILENAME_COLLISION" | "PLUGIN_EXCLUDE_PATTERN_UNUSED" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "REGISTRY_SHAPE_DRIFT" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED", ...("LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_AGENT_INSTRUCTION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_AGENT_INSTRUCTION_FILE" | "TREE_PROVENANCE_INDETERMINATE" | "FILES_GLOB_DROPPED_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_ONLY_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_NOTHING" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "FILENAME_COLLISION" | "PLUGIN_EXCLUDE_PATTERN_UNUSED" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "REGISTRY_SHAPE_DRIFT" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED")[]]>, z.ZodArray<z.ZodObject<{
21
21
  paths: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
22
22
  reason: z.ZodString;
23
23
  expires: z.ZodOptional<z.ZodString>;
@@ -31,15 +31,15 @@ export declare const ValidationConfigSchema: z.ZodObject<{
31
31
  expires?: string | undefined;
32
32
  }>, "many">>>;
33
33
  }, "strict", z.ZodTypeAny, {
34
- severity?: Partial<Record<"LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED", "error" | "warning" | "info" | "ignore">> | undefined;
35
- allow?: Partial<Record<"LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED", {
34
+ severity?: Partial<Record<"LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_AGENT_INSTRUCTION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_AGENT_INSTRUCTION_FILE" | "TREE_PROVENANCE_INDETERMINATE" | "FILES_GLOB_DROPPED_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_ONLY_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_NOTHING" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "FILENAME_COLLISION" | "PLUGIN_EXCLUDE_PATTERN_UNUSED" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "REGISTRY_SHAPE_DRIFT" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED", "error" | "warning" | "info" | "ignore">> | undefined;
35
+ allow?: Partial<Record<"LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_AGENT_INSTRUCTION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_AGENT_INSTRUCTION_FILE" | "TREE_PROVENANCE_INDETERMINATE" | "FILES_GLOB_DROPPED_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_ONLY_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_NOTHING" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "FILENAME_COLLISION" | "PLUGIN_EXCLUDE_PATTERN_UNUSED" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "REGISTRY_SHAPE_DRIFT" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED", {
36
36
  paths: string[];
37
37
  reason: string;
38
38
  expires?: string | undefined;
39
39
  }[]>> | undefined;
40
40
  }, {
41
- severity?: Partial<Record<"LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED", "error" | "warning" | "info" | "ignore">> | undefined;
42
- allow?: Partial<Record<"LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED", {
41
+ severity?: Partial<Record<"LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_AGENT_INSTRUCTION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_AGENT_INSTRUCTION_FILE" | "TREE_PROVENANCE_INDETERMINATE" | "FILES_GLOB_DROPPED_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_ONLY_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_NOTHING" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "FILENAME_COLLISION" | "PLUGIN_EXCLUDE_PATTERN_UNUSED" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "REGISTRY_SHAPE_DRIFT" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED", "error" | "warning" | "info" | "ignore">> | undefined;
42
+ allow?: Partial<Record<"LINK_OUTSIDE_PROJECT" | "LINK_TARGETS_DIRECTORY" | "LINK_TO_NAVIGATION_FILE" | "LINK_TO_AGENT_INSTRUCTION_FILE" | "LINK_TO_GITIGNORED_FILE" | "LINK_MISSING_TARGET" | "LINK_DEFERRED_ARTIFACT" | "LINK_TO_SKILL_DEFINITION" | "LINK_DROPPED_BY_DEPTH" | "PACKAGED_UNREFERENCED_FILE" | "PACKAGED_AGENT_INSTRUCTION_FILE" | "TREE_PROVENANCE_INDETERMINATE" | "FILES_GLOB_DROPPED_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_ONLY_NEVER_PACKAGED" | "FILES_GLOB_MATCHED_NOTHING" | "PACKAGED_TEST_INPUT" | "PACKAGED_BROKEN_LINK" | "FILENAME_COLLISION" | "PLUGIN_EXCLUDE_PATTERN_UNUSED" | "DUPLICATE_RESOURCE_ID" | "SKILL_LENGTH_EXCEEDS_RECOMMENDED" | "SKILL_TOTAL_SIZE_LARGE" | "SKILL_TOO_MANY_FILES" | "REFERENCE_TOO_DEEP" | "DESCRIPTION_TOO_VAGUE" | "NO_PROGRESSIVE_DISCLOSURE" | "SKILL_DESCRIPTION_OVER_CLAUDE_CODE_LIMIT" | "SKILL_DESCRIPTION_FILLER_OPENER" | "SKILL_DESCRIPTION_WRONG_PERSON" | "SKILL_CLAUDE_PLUGIN_NAME_MISMATCH" | "SKILL_NAME_MISMATCHES_DIR" | "RESERVED_WORD_IN_NAME" | "SKILL_TIME_SENSITIVE_CONTENT" | "NON_PORTABLE_ASSET_REFERENCE" | "NON_PORTABLE_COMMAND" | "SKILL_FRONTMATTER_EXTRA_FIELDS" | "SKILL_CROSS_SKILL_AUTH_UNDECLARED" | "SKILL_DESCRIPTION_STYLE_MIXED_IN_PACKAGE" | "PLUGIN_MISSING_DESCRIPTION" | "PLUGIN_MISSING_AUTHOR" | "PLUGIN_MISSING_LICENSE" | "PLUGIN_NAME_NOT_KEBAB_CASE" | "SKILL_NAME_NOT_KEBAB_CASE" | "SKILL_REFERENCES_BUT_NO_LINKS" | "SKILL_BODY_NOT_IMPERATIVE" | "CAPABILITY_LOCAL_SHELL" | "CAPABILITY_EXTERNAL_CLI" | "CAPABILITY_BROWSER_AUTH" | "COMPAT_TARGET_INCOMPATIBLE" | "COMPAT_TARGET_NEEDS_REVIEW" | "COMPAT_TARGET_UNDECLARED" | "ALLOW_EXPIRED" | "ALLOW_UNUSED" | "COMPONENT_DECLARED_BUT_MISSING" | "COMPONENT_PRESENT_BUT_UNDECLARED" | "REFERENCE_TARGET_MISSING" | "MARKETPLACE_PLUGIN_SOURCE_MISSING" | "REGISTRY_SHAPE_DRIFT" | "LINK_BROKEN_FILE" | "LINK_BROKEN_ANCHOR" | "LINK_UNKNOWN" | "LINK_TO_GITIGNORED" | "LINK_UNRESOLVED_REFERENCE" | "MALFORMED_HTML" | "FRONTMATTER_MISSING" | "FRONTMATTER_INVALID_YAML" | "FRONTMATTER_SCHEMA_ERROR" | "FRONTMATTER_LINK_BROKEN" | "FRONTMATTER_ANCHOR_MISSING" | "FRONTMATTER_LINK_TO_GITIGNORED" | "FRONTMATTER_UNKNOWN_LINK" | "EXTERNAL_URL_DEAD" | "EXTERNAL_URL_TIMEOUT" | "EXTERNAL_URL_ERROR" | "LINK_AUTH_DEAD" | "LINK_AUTH_DEAD_OR_UNAUTHORIZED" | "LINK_AUTH_FORBIDDEN" | "LINK_AUTH_UNAUTHORIZED" | "LINK_AUTH_UNVERIFIED", {
43
43
  reason: string;
44
44
  paths?: string[] | undefined;
45
45
  expires?: string | undefined;
@@ -4,11 +4,15 @@
4
4
  * Three composable stages that turn raw validator issues into the final
5
5
  * emitted set:
6
6
  * - `applyAllowFilter` — suppress issues matched by `validation.allow`
7
- * entries, tracking expired/unused allowances.
7
+ * entries, reporting per-entry usage and expired allowances.
8
8
  * - `resolveSeverity` — resolve each registry code's severity against
9
9
  * `validation.severity` overrides (falling back to the registry default).
10
10
  * - `runValidationFramework` — orchestrates the two above, drops `ignore`d
11
- * issues, and synthesizes ALLOW_EXPIRED / ALLOW_UNUSED meta-issues.
11
+ * issues, and synthesizes ALLOW_EXPIRED meta-issues.
12
+ *
13
+ * ALLOW_UNUSED is deliberately NOT in that list. `validation.allow` is declared
14
+ * once per PACKAGE while validation runs once per SKILL, so "this entry matched
15
+ * nothing" is only answerable across a whole run — see {@link AllowUsageLedger}.
12
16
  *
13
17
  * Non-registry codes (InfoCode / NonOverridableCode) deliberately bypass
14
18
  * severity resolution and pass through unchanged.
@@ -26,11 +30,22 @@ export interface AllowRecord {
26
30
  reason: string;
27
31
  expires?: string | undefined;
28
32
  }
29
- export interface UnusedRecord {
33
+ /**
34
+ * One `validation.allow` entry's usage during ONE call of the filter.
35
+ *
36
+ * `used` is deliberately not named `unused`: a single call sees a single unit of
37
+ * work (one skill), and `used: false` therefore means "this unit did not match
38
+ * it", NOT "the entry is dead". Only {@link AllowUsageLedger} can answer the
39
+ * latter. The negative name invited exactly that misreading — it was read as a
40
+ * verdict and emitted as ALLOW_UNUSED once per non-matching skill.
41
+ */
42
+ export interface AllowEntryUsage {
30
43
  code: IssueCode;
31
44
  paths: string[];
32
45
  reason: string;
33
46
  expires?: string | undefined;
47
+ /** True iff at least one issue in THIS call matched the entry. */
48
+ used: boolean;
34
49
  }
35
50
  export interface ExpiredRecord {
36
51
  code: IssueCode;
@@ -43,11 +58,53 @@ export interface AllowFilterResult {
43
58
  emitted: ValidationIssue[];
44
59
  allowed: AllowRecord[];
45
60
  expired: ExpiredRecord[];
46
- unused: UnusedRecord[];
61
+ /** Per-entry usage for THIS call — a contribution to a run, not a verdict. */
62
+ usage: AllowEntryUsage[];
47
63
  }
48
64
  export declare function applyAllowFilter(issues: readonly ValidationIssue[], config: AllowConfig, now?: Date): AllowFilterResult;
65
+ /**
66
+ * Run-level record of which `validation.allow` entries anything matched.
67
+ *
68
+ * The unit of DECLARATION for an allow entry is the package (`skills.defaults.
69
+ * validation.allow`); the unit of ANALYSIS is one skill. So an entry scoped to
70
+ * two files is not matched by any of the package's other skills — and reporting
71
+ * that per skill produced 78 ALLOW_UNUSED warnings from 3 legitimate entries on
72
+ * this repo's own tree. "Matched nothing" is a property of the RUN.
73
+ *
74
+ * The ledger makes that structural rather than remembered:
75
+ * - it is monotone — `runValidationFramework` can only ADD to `matched`, so no
76
+ * single call can conclude an entry is dead, in any call order;
77
+ * - it is the ONLY producer of ALLOW_UNUSED (see {@link allowUnusedIssues}),
78
+ * so there is no code path by which per-skill semantics can come back.
79
+ *
80
+ * A caller whose run really is one unit of work uses
81
+ * {@link runSingleUnitValidation}, whose name states that claim.
82
+ */
83
+ export interface AllowUsageLedger {
84
+ /**
85
+ * Entry key → the finalized ALLOW_UNUSED issue to emit if the run never
86
+ * matches it. Populated on first sight of an unmatched entry.
87
+ */
88
+ readonly candidates: Map<string, ValidationIssue>;
89
+ /** Keys matched by at least one unit of work anywhere in the run. */
90
+ readonly matched: Set<string>;
91
+ }
92
+ export declare function createAllowUsageLedger(): AllowUsageLedger;
93
+ /**
94
+ * ALLOW_UNUSED issues for entries NO unit of work in the run matched.
95
+ *
96
+ * Call once, after the last unit. Severity was already resolved (and `ignore`
97
+ * already applied) when each candidate was recorded, so this needs no config.
98
+ */
99
+ export declare function allowUnusedIssues(ledger: AllowUsageLedger): ValidationIssue[];
49
100
  export interface FrameworkResult {
50
- /** Issues the consumer should surface (severity resolved; ignores dropped). */
101
+ /**
102
+ * Issues the consumer should surface (severity resolved; ignores dropped).
103
+ *
104
+ * Excludes ALLOW_UNUSED, which is not knowable from one unit of work — drain
105
+ * the run's {@link AllowUsageLedger} with {@link allowUnusedIssues} once the
106
+ * last unit has been validated.
107
+ */
51
108
  emitted: ValidationIssue[];
52
109
  /** Issues suppressed by an allow entry (for verbose display). */
53
110
  allowed: Array<{
@@ -59,5 +116,23 @@ export interface FrameworkResult {
59
116
  /** True when any emitted issue has resolved severity 'error'. */
60
117
  hasErrors: boolean;
61
118
  }
62
- export declare function runValidationFramework(rawIssues: readonly ValidationIssue[], config: ValidationConfig, now?: Date): FrameworkResult;
119
+ /**
120
+ * Run the framework over ONE unit of work (typically one skill).
121
+ *
122
+ * `ledger` is required, not optional-with-a-default, so the compiler asks each
123
+ * caller the question the per-skill call site could not answer on its own:
124
+ * *whose run is this?* Drain it once with {@link allowUnusedIssues} after the
125
+ * last unit; a caller whose run is a single unit should use
126
+ * {@link runSingleUnitValidation} instead.
127
+ */
128
+ export declare function runValidationFramework(rawIssues: readonly ValidationIssue[], config: ValidationConfig, ledger: AllowUsageLedger, now?: Date): FrameworkResult;
129
+ /**
130
+ * Run the framework where the RUN IS THIS ONE CALL — a whole-registry validate,
131
+ * or a command that validates exactly one skill.
132
+ *
133
+ * The name is the claim: using it inside a loop over skills asserts something
134
+ * false, and is the defect this module's ledger exists to prevent. Multi-unit
135
+ * callers create one {@link AllowUsageLedger} for the run instead.
136
+ */
137
+ export declare function runSingleUnitValidation(rawIssues: readonly ValidationIssue[], config: ValidationConfig, now?: Date): FrameworkResult;
63
138
  //# sourceMappingURL=validation-framework.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation-framework.d.ts","sourceRoot":"","sources":["../src/validation-framework.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAIH,OAAO,EAAiB,KAAK,SAAS,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAC1F,OAAO,KAAK,EAAc,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC3E,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAK7D,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAC/D,MAAM,MAAM,cAAc,GAAG,IAAI,CAAC,gBAAgB,EAAE,UAAU,CAAC,CAAC;AAChE,MAAM,MAAM,WAAW,GAAG,IAAI,CAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;AAM1D,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,cAAc,GAAG,aAAa,CAMtF;AAMD,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,SAAS,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC9B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,SAAS,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,mFAAmF;IACnF,gBAAgB,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,MAAM,EAAE,YAAY,EAAE,CAAC;CACxB;AAoED,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,SAAS,eAAe,EAAE,EAClC,MAAM,EAAE,WAAW,EACnB,GAAG,GAAE,IAAiB,GACrB,iBAAiB,CAuCnB;AAMD,MAAM,WAAW,eAAe;IAC9B,+EAA+E;IAC/E,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,iEAAiE;IACjE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;IACpG,iEAAiE;IACjE,SAAS,EAAE,OAAO,CAAC;CACpB;AA8DD,wBAAgB,sBAAsB,CACpC,SAAS,EAAE,SAAS,eAAe,EAAE,EACrC,MAAM,EAAE,gBAAgB,EACxB,GAAG,GAAE,IAAiB,GACrB,eAAe,CAyBjB"}
1
+ {"version":3,"file":"validation-framework.d.ts","sourceRoot":"","sources":["../src/validation-framework.ts"],"names":[],"mappings":"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"}
@@ -4,11 +4,15 @@
4
4
  * Three composable stages that turn raw validator issues into the final
5
5
  * emitted set:
6
6
  * - `applyAllowFilter` — suppress issues matched by `validation.allow`
7
- * entries, tracking expired/unused allowances.
7
+ * entries, reporting per-entry usage and expired allowances.
8
8
  * - `resolveSeverity` — resolve each registry code's severity against
9
9
  * `validation.severity` overrides (falling back to the registry default).
10
10
  * - `runValidationFramework` — orchestrates the two above, drops `ignore`d
11
- * issues, and synthesizes ALLOW_EXPIRED / ALLOW_UNUSED meta-issues.
11
+ * issues, and synthesizes ALLOW_EXPIRED meta-issues.
12
+ *
13
+ * ALLOW_UNUSED is deliberately NOT in that list. `validation.allow` is declared
14
+ * once per PACKAGE while validation runs once per SKILL, so "this entry matched
15
+ * nothing" is only answerable across a whole run — see {@link AllowUsageLedger}.
12
16
  *
13
17
  * Non-registry codes (InfoCode / NonOverridableCode) deliberately bypass
14
18
  * severity resolution and pass through unchanged.
@@ -45,9 +49,9 @@ function buildMatchers(allowByCode) {
45
49
  }
46
50
  return matchers;
47
51
  }
48
- function collectExpiredAndUnused(matchers, allowed, now) {
52
+ function collectExpiredAndUsage(matchers, allowed, now) {
49
53
  const expired = [];
50
- const unused = [];
54
+ const usage = [];
51
55
  for (const [code, list] of matchers) {
52
56
  for (const m of list) {
53
57
  if (isExpired(m.entry.expires, now)) {
@@ -61,20 +65,19 @@ function collectExpiredAndUnused(matchers, allowed, now) {
61
65
  matchedLocations,
62
66
  });
63
67
  }
64
- if (!m.used) {
65
- const unusedRecord = {
66
- code,
67
- paths: m.entry.paths,
68
- reason: m.entry.reason,
69
- };
70
- if (m.entry.expires !== undefined) {
71
- unusedRecord.expires = m.entry.expires;
72
- }
73
- unused.push(unusedRecord);
68
+ const record = {
69
+ code,
70
+ paths: m.entry.paths,
71
+ reason: m.entry.reason,
72
+ used: m.used,
73
+ };
74
+ if (m.entry.expires !== undefined) {
75
+ record.expires = m.entry.expires;
74
76
  }
77
+ usage.push(record);
75
78
  }
76
79
  }
77
- return { expired, unused };
80
+ return { expired, usage };
78
81
  }
79
82
  export function applyAllowFilter(issues, config, now = new Date()) {
80
83
  const emitted = [];
@@ -110,8 +113,36 @@ export function applyAllowFilter(issues, config, now = new Date()) {
110
113
  emitted.push(issue);
111
114
  }
112
115
  }
113
- const { expired, unused } = collectExpiredAndUnused(matchers, allowed, now);
114
- return { emitted, allowed, expired, unused };
116
+ const { expired, usage } = collectExpiredAndUsage(matchers, allowed, now);
117
+ return { emitted, allowed, expired, usage };
118
+ }
119
+ export function createAllowUsageLedger() {
120
+ return { candidates: new Map(), matched: new Set() };
121
+ }
122
+ /**
123
+ * Identity of an allow entry across the calls of one run.
124
+ *
125
+ * Keyed on the declared content rather than on object identity, because a
126
+ * batching caller may re-parse or re-merge config per skill (and `vat audit`
127
+ * spans several governing configs in one run — entries that differ there are
128
+ * different entries, and must be judged separately).
129
+ */
130
+ function allowEntryKey(usage) {
131
+ return JSON.stringify([usage.code, usage.paths, usage.reason, usage.expires ?? null]);
132
+ }
133
+ /**
134
+ * ALLOW_UNUSED issues for entries NO unit of work in the run matched.
135
+ *
136
+ * Call once, after the last unit. Severity was already resolved (and `ignore`
137
+ * already applied) when each candidate was recorded, so this needs no config.
138
+ */
139
+ export function allowUnusedIssues(ledger) {
140
+ const issues = [];
141
+ for (const [key, issue] of ledger.candidates) {
142
+ if (!ledger.matched.has(key))
143
+ issues.push(issue);
144
+ }
145
+ return issues;
115
146
  }
116
147
  function finalize(issue, config) {
117
148
  const code = issue.code;
@@ -155,16 +186,38 @@ function emitExpiredMeta(expired, config, emitted) {
155
186
  emitted.push(final);
156
187
  }
157
188
  }
158
- function emitUnusedMeta(unused, config, emitted) {
159
- for (const u of unused) {
189
+ /**
190
+ * Fold this call's per-entry usage into the run's ledger.
191
+ *
192
+ * Matched entries record usage; unmatched ones only park a CANDIDATE issue. The
193
+ * two operations are asymmetric on purpose: usage is a run-level union that any
194
+ * later call can still complete, so nothing here can decide an entry is dead.
195
+ */
196
+ function recordAllowUsage(usage, config, ledger) {
197
+ for (const u of usage) {
198
+ const key = allowEntryKey(u);
199
+ if (u.used) {
200
+ ledger.matched.add(key);
201
+ continue;
202
+ }
203
+ if (ledger.candidates.has(key))
204
+ continue;
160
205
  const msg = `Allow entry for ${u.code} matched no issues (paths: ${u.paths.join(', ')}).`;
161
- const raw = metaIssue('ALLOW_UNUSED', msg, `validation.allow.${u.code}`);
162
- const final = finalize(raw, config);
206
+ const final = finalize(metaIssue('ALLOW_UNUSED', msg, `validation.allow.${u.code}`), config);
163
207
  if (final)
164
- emitted.push(final);
208
+ ledger.candidates.set(key, final);
165
209
  }
166
210
  }
167
- export function runValidationFramework(rawIssues, config, now = new Date()) {
211
+ /**
212
+ * Run the framework over ONE unit of work (typically one skill).
213
+ *
214
+ * `ledger` is required, not optional-with-a-default, so the compiler asks each
215
+ * caller the question the per-skill call site could not answer on its own:
216
+ * *whose run is this?* Drain it once with {@link allowUnusedIssues} after the
217
+ * last unit; a caller whose run is a single unit should use
218
+ * {@link runSingleUnitValidation} instead.
219
+ */
220
+ export function runValidationFramework(rawIssues, config, ledger, now = new Date()) {
168
221
  // 1. Allow filter against raw issues (before severity resolution — allow is
169
222
  // indifferent to severity).
170
223
  const filtered = applyAllowFilter(rawIssues, config, now);
@@ -176,9 +229,11 @@ export function runValidationFramework(rawIssues, config, now = new Date()) {
176
229
  emitted.push(final);
177
230
  }
178
231
  // 3. Emit ALLOW_EXPIRED for each expired entry (severity from config).
232
+ // Expiry is a property of the entry's own `expires` date, so unlike
233
+ // unused-ness it IS answerable from one unit of work.
179
234
  emitExpiredMeta(filtered.expired, config, emitted);
180
- // 4. Emit ALLOW_UNUSED for entries that matched nothing.
181
- emitUnusedMeta(filtered.unused, config, emitted);
235
+ // 4. Contribute this unit's allow-entry usage to the run.
236
+ recordAllowUsage(filtered.usage, config, ledger);
182
237
  const allowed = filtered.allowed;
183
238
  return {
184
239
  emitted,
@@ -186,4 +241,18 @@ export function runValidationFramework(rawIssues, config, now = new Date()) {
186
241
  hasErrors: emitted.some(i => i.severity === 'error'),
187
242
  };
188
243
  }
244
+ /**
245
+ * Run the framework where the RUN IS THIS ONE CALL — a whole-registry validate,
246
+ * or a command that validates exactly one skill.
247
+ *
248
+ * The name is the claim: using it inside a loop over skills asserts something
249
+ * false, and is the defect this module's ledger exists to prevent. Multi-unit
250
+ * callers create one {@link AllowUsageLedger} for the run instead.
251
+ */
252
+ export function runSingleUnitValidation(rawIssues, config, now = new Date()) {
253
+ const ledger = createAllowUsageLedger();
254
+ const result = runValidationFramework(rawIssues, config, ledger, now);
255
+ const emitted = [...result.emitted, ...allowUnusedIssues(ledger)];
256
+ return { ...result, emitted, hasErrors: emitted.some(i => i.severity === 'error') };
257
+ }
189
258
  //# sourceMappingURL=validation-framework.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"validation-framework.js","sourceRoot":"","sources":["../src/validation-framework.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"validation-framework.js","sourceRoot":"","sources":["../src/validation-framework.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vibe-agent-toolkit/agent-schema",
3
- "version": "0.1.41-rc.7",
3
+ "version": "0.1.41",
4
4
  "description": "JSON Schema definitions and TypeScript types for VAT agent manifest format",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -39,7 +39,7 @@
39
39
  },
40
40
  "devDependencies": {
41
41
  "@types/picomatch": "^4.0.2",
42
- "@vibe-agent-toolkit/utils": "0.1.41-rc.7",
42
+ "@vibe-agent-toolkit/utils": "0.1.41",
43
43
  "tsx": "^4.21.0",
44
44
  "typescript": "^5.9.3",
45
45
  "vitest": "^3.2.4"
@@ -20,14 +20,22 @@
20
20
  "LINK_OUTSIDE_PROJECT",
21
21
  "LINK_TARGETS_DIRECTORY",
22
22
  "LINK_TO_NAVIGATION_FILE",
23
+ "LINK_TO_AGENT_INSTRUCTION_FILE",
23
24
  "LINK_TO_GITIGNORED_FILE",
24
25
  "LINK_MISSING_TARGET",
25
26
  "LINK_DEFERRED_ARTIFACT",
26
27
  "LINK_TO_SKILL_DEFINITION",
27
28
  "LINK_DROPPED_BY_DEPTH",
28
29
  "PACKAGED_UNREFERENCED_FILE",
30
+ "PACKAGED_AGENT_INSTRUCTION_FILE",
31
+ "TREE_PROVENANCE_INDETERMINATE",
32
+ "FILES_GLOB_DROPPED_NEVER_PACKAGED",
33
+ "FILES_GLOB_MATCHED_ONLY_NEVER_PACKAGED",
34
+ "FILES_GLOB_MATCHED_NOTHING",
29
35
  "PACKAGED_TEST_INPUT",
30
36
  "PACKAGED_BROKEN_LINK",
37
+ "FILENAME_COLLISION",
38
+ "PLUGIN_EXCLUDE_PATTERN_UNUSED",
31
39
  "DUPLICATE_RESOURCE_ID",
32
40
  "SKILL_LENGTH_EXCEEDS_RECOMMENDED",
33
41
  "SKILL_TOTAL_SIZE_LARGE",
@@ -66,6 +74,7 @@
66
74
  "COMPONENT_PRESENT_BUT_UNDECLARED",
67
75
  "REFERENCE_TARGET_MISSING",
68
76
  "MARKETPLACE_PLUGIN_SOURCE_MISSING",
77
+ "REGISTRY_SHAPE_DRIFT",
69
78
  "LINK_BROKEN_FILE",
70
79
  "LINK_BROKEN_ANCHOR",
71
80
  "LINK_UNKNOWN",
@@ -127,14 +136,22 @@
127
136
  "LINK_OUTSIDE_PROJECT",
128
137
  "LINK_TARGETS_DIRECTORY",
129
138
  "LINK_TO_NAVIGATION_FILE",
139
+ "LINK_TO_AGENT_INSTRUCTION_FILE",
130
140
  "LINK_TO_GITIGNORED_FILE",
131
141
  "LINK_MISSING_TARGET",
132
142
  "LINK_DEFERRED_ARTIFACT",
133
143
  "LINK_TO_SKILL_DEFINITION",
134
144
  "LINK_DROPPED_BY_DEPTH",
135
145
  "PACKAGED_UNREFERENCED_FILE",
146
+ "PACKAGED_AGENT_INSTRUCTION_FILE",
147
+ "TREE_PROVENANCE_INDETERMINATE",
148
+ "FILES_GLOB_DROPPED_NEVER_PACKAGED",
149
+ "FILES_GLOB_MATCHED_ONLY_NEVER_PACKAGED",
150
+ "FILES_GLOB_MATCHED_NOTHING",
136
151
  "PACKAGED_TEST_INPUT",
137
152
  "PACKAGED_BROKEN_LINK",
153
+ "FILENAME_COLLISION",
154
+ "PLUGIN_EXCLUDE_PATTERN_UNUSED",
138
155
  "DUPLICATE_RESOURCE_ID",
139
156
  "SKILL_LENGTH_EXCEEDS_RECOMMENDED",
140
157
  "SKILL_TOTAL_SIZE_LARGE",
@@ -173,6 +190,7 @@
173
190
  "COMPONENT_PRESENT_BUT_UNDECLARED",
174
191
  "REFERENCE_TARGET_MISSING",
175
192
  "MARKETPLACE_PLUGIN_SOURCE_MISSING",
193
+ "REGISTRY_SHAPE_DRIFT",
176
194
  "LINK_BROKEN_FILE",
177
195
  "LINK_BROKEN_ANCHOR",
178
196
  "LINK_UNKNOWN",