Skip to content

Commit a09b333

Browse files
feat(instructions)!: disclaimer SSOT migration (stacked on #1497) (#1639)
# Pull Request ## Description This PR migrates the planner disclaimer single-source-of-truth (SSOT) from the standalone YAML config at `.github/config/disclaimers.yml` to a markdown authoring contract embedded in `.github/instructions/shared/disclaimer-language.instructions.md`. It stacks on **#1497** (`feat/sssc-planner-rai-parity`) because removing `disclaimers.yml` would conflict with any branch in the stack that does not include this migration. The instruction file now defines the disclaimer corpus as H2 sections whose slugified headings (for example, *RAI Planning* → `rai-planner`) are the parser-derived keys. Each section carries a CAUTION blockquote that captures the session-start disclaimer, plus prose paragraphs joined into a single string by the parser. A short *Authoring Contract* preamble documents the rules so future edits stay machine-readable without referring to the validator source. The validator, **`scripts/linting/Validate-PlannerArtifacts.ps1`**, swaps its YAML loader for `Import-DisclaimerSource`, which parses the new markdown SSOT, derives planner keys from heading slugs, extracts CAUTION blockquotes (stripping the `> [!CAUTION]` prefix), and joins multi-line prose. The function's `-DisclaimerConfigPath` parameter is renamed to `-DisclaimerSourcePath` to reflect the markdown origin. A new contract suite, **`scripts/tests/linting/Test-DisclaimerArtifacts.Tests.ps1`** (8 cases), asserts that: * the SSOT instruction file parses into the expected planner keys with non-empty CAUTION blockquotes and prose; and * every planner identity file (RAI and Security) carries the required *Session Start Display* literal and an *Exit Point Reminder* section that references each named exit point. To satisfy the second assertion, this PR also adds the *Disclaimer and Attribution Protocol* section to **`.github/instructions/security/identity.instructions.md`**, sourced verbatim from the snapshot. The hunks in **`scripts/tests/linting/Validate-PlannerArtifacts.Tests.ps1`** are trimmed to disclaimer-related coverage only; the SSSC-parity hunks are deferred to a later PR in the stack. The three regenerated **`plugins/*/README.md`** files reflect the disclaimer SSOT description text and are produced by `npm run plugin:generate`. ## Related Issue(s) Stacks on #1497. No other issue references in commits or branch name. ## Type of Change Select all that apply: **Code & Documentation:** * [ ] Bug fix (non-breaking change fixing an issue) * [ ] New feature (non-breaking change adding functionality) * [x] Breaking change (fix or feature causing existing functionality to change) * [x] Documentation update **Infrastructure & Configuration:** * [ ] GitHub Actions workflow * [x] Linting configuration (markdown, PowerShell, etc.) * [ ] Security configuration * [ ] DevContainer configuration * [ ] Dependency update **AI Artifacts:** * [ ] Reviewed contribution with `prompt-builder` agent and addressed all feedback * [x] Copilot instructions (`.github/instructions/*.instructions.md`) * [ ] Copilot prompt (`.github/prompts/*.prompt.md`) * [ ] Copilot agent (`.github/agents/*.agent.md`) * [ ] Copilot skill (`.github/skills/*/SKILL.md`) > Note for AI Artifact Contributors: > > * Agents: Research, indexing/referencing other project (using standard VS Code GitHub Copilot/MCP tools), planning, and general implementation agents likely already exist. Review `.github/agents/` before creating new ones. > * Skills: Must include both bash and PowerShell scripts. See [Skills](../docs/contributing/skills.md). > * Model Versions: Only contributions targeting the **latest Anthropic and OpenAI models** will be accepted. Older model versions (e.g., GPT-3.5, Claude 3) will be rejected. > * See [Agents Not Accepted](../docs/contributing/custom-agents.md#agents-not-accepted) and [Model Version Requirements](../docs/contributing/ai-artifacts-common.md#model-version-requirements). **Other:** * [x] Script/automation (`.ps1`, `.sh`, `.py`) * [ ] Other (please describe): ## Sample Prompts (for AI Artifact Contributions) <!-- Not applicable as a workflow trigger: the instruction file is a passive SSOT consumed by the validator and is referenced by planner agents at session-start. --> For detailed contribution requirements, see: * Common Standards: [docs/contributing/ai-artifacts-common.md](../docs/contributing/ai-artifacts-common.md) - Shared standards for XML blocks, markdown quality, RFC 2119, validation, and testing * Agents: [docs/contributing/custom-agents.md](../docs/contributing/custom-agents.md) - Agent configurations with tools and behavior patterns * Prompts: [docs/contributing/prompts.md](../docs/contributing/prompts.md) - Workflow-specific guidance with template variables * Instructions: [docs/contributing/instructions.md](../docs/contributing/instructions.md) - Technology-specific standards with glob patterns * Skills: [docs/contributing/skills.md](../docs/contributing/skills.md) - Task execution utilities with cross-platform scripts ## Testing Automated validation performed by the agent: * `npm run lint:md` — markdown linting: **Passed** (211 files, 0 errors). * `npm run lint:frontmatter` — frontmatter validation: **Passed** (541 files, 0 errors). * `npm run lint:ps` — PowerShell analysis: **Passed**. * `npm run lint:yaml` — YAML validation: **Passed** (50 files). * `npm run plugin:validate` — plugin metadata: **Passed**. * `npm run plugin:generate` — plugin outputs regenerated and committed. * `npm run test:ps -- -TestPath scripts/tests/linting/Test-DisclaimerArtifacts.Tests.ps1` — **8/8 passed**. * `npm run test:ps -- -TestPath scripts/tests/linting/Validate-PlannerArtifacts.Tests.ps1` — **34/34 passed**. * `grep -r "config/disclaimers" .github docs scripts collections plugins` — **empty**, confirming no orphan references. Security analysis findings: * No secrets, credentials, or customer data in the diff. * No new runtime dependencies introduced. The validator uses only built-in PowerShell cmdlets to parse markdown. * No changes that broaden privilege boundaries. Diff-based assessments: * All changed files match expected paths derived from the commit subject and the migration scope documented in the stack plan. * The markdown SSOT, validator, and tests follow the existing `.github/instructions/`, `scripts/linting/`, and `scripts/tests/linting/` conventions. > [!NOTE] > Manual testing was not performed. ## Checklist ### Required Checks * [x] Documentation is updated (if applicable) — instruction file gains an authoring contract and the SSOT corpus. * [x] Files follow existing naming conventions. * [x] Changes are backwards compatible (if applicable) — *(N/A — this PR is a BREAKING change. `.github/config/disclaimers.yml` is removed; consumers must reference `disclaimer-language.instructions.md`. Tree-wide grep confirms zero in-codebase consumers of the deleted path; all internal callers are updated in this PR.)* * [x] Tests added for new functionality (if applicable). ### AI Artifact Contributions * [ ] Used `/prompt-analyze` to review contribution * [ ] Addressed all feedback from `prompt-builder` review * [ ] Verified contribution follows common standards and type-specific requirements ### Required Automated Checks The following validation commands must pass before merging: * [x] Markdown linting: `npm run lint:md` * [ ] Spell checking: `npm run spell-check` * [x] Frontmatter validation: `npm run lint:frontmatter` * [ ] Skill structure validation: `npm run validate:skills` * [ ] Link validation: `npm run lint:md-links` * [x] PowerShell analysis: `npm run lint:ps` * [x] Plugin freshness: `npm run plugin:generate` * [ ] Docusaurus tests: `npm run docs:test` ## Security Considerations <!-- ⚠️ WARNING: Do not commit sensitive information such as API keys, passwords, or personal data --> * [x] This PR does not contain any sensitive or NDA information * [x] Any new dependencies have been reviewed for security issues — *(N/A — no new dependencies.)* * [x] Security-related scripts follow the principle of least privilege — *(N/A — no security-related scripts modified.)* ## Additional Notes This PR is the second stacked increment in the post-#1497 stack (PR C in plan ordering). The base will switch from `feat/sssc-planner-rai-parity` to `main` after #1497 merges. The companion PRs in the stack are: * **PR A (#1638)** — Security Planner state schema and fixtures. * **PR B** — Security Planner agent and phase-gate parity (depends on PR A). * **PR D** — Planner linter hardening (sibling off `main`). * **PR E** — Dev environment alignment (sibling off `main`, optional). A small *Disclaimer and Attribution Protocol* section is added to `.github/instructions/security/identity.instructions.md` (sourced verbatim from the snapshot) so the new contract test passes for both planner identities. The SSSC-parity hunks in `Validate-PlannerArtifacts.Tests.ps1` are intentionally deferred to **PR B**, which lands them alongside the Security Planner content they exercise. ## Merge Order This PR is part of a stack derived from PR #1497. Required merge sequence: 1. #1638 (PR A — `stack/security-state-schema`) — adds `disclaimerShownAt` to canonical schemas 2. #1639 (PR C — this PR) — relocates disclaimer protocol to shared instructions 3. #1642 (PR B — `stack/security-planner-parity`) — consumes both #1640 and #1641 are siblings and may merge in any order independent of this chain.
1 parent 2bdcb8d commit a09b333

8 files changed

Lines changed: 322 additions & 210 deletions

File tree

.github/config/disclaimers.yml

Lines changed: 0 additions & 52 deletions
This file was deleted.

.github/instructions/security/backlog-handoff.instructions.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,10 @@ Generate formatted work items from security model mitigations and standards gaps
1818

1919
## ADO Work Item Template
2020

21+
> **Note:** This work item was generated by the Security Planner AI agent. Review for accuracy and adjust before assigning to a person.
22+
23+
- [ ] Reviewed by a human security professional before execution
24+
2125
Assign sequential IDs within the security plan using the format `WI-SEC-{NNN}` (for example, WI-SEC-001, WI-SEC-002). Order work items by type hierarchy: Epic, Feature, User Story, Task, Bug.
2226

2327
Required fields per work item:
@@ -60,6 +64,10 @@ Five MCP tool categories support ADO operations: work item creation, work item u
6064

6165
## GitHub Issue Template
6266

67+
> **Note:** This work item was generated by the Security Planner AI agent. Review for accuracy and adjust before assigning to a person.
68+
69+
- [ ] Reviewed by a human security professional before execution
70+
6371
Assign temporary IDs using the format `{{SEC-TEMP-N}}`, replaced with real issue numbers on creation. Order operations by type: create, update, comment, label, close.
6472

6573
Required fields per issue:

.github/instructions/security/identity.instructions.md

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,23 @@ Core responsibilities:
1616

1717
Voice: clear, methodical, and security-focused. Communicate with professional authority while keeping guidance accessible and actionable.
1818

19+
## Disclaimer and Attribution Protocol
20+
21+
### Session Start Display
22+
23+
On the first turn of any Security Planner session, display the canonical Security Planning disclaimer block defined in [.github/instructions/shared/disclaimer-language.instructions.md](../shared/disclaimer-language.instructions.md) verbatim. Record the display by setting `state.disclaimerShownAt` to an ISO 8601 timestamp. Do not advance to any phase work before the disclaimer is shown for the session.
24+
25+
### Exit Point Reminder
26+
27+
At each of the following exit points, re-surface a brief one-line professional-review reminder. Use the canonical wording in [.github/instructions/shared/disclaimer-language.instructions.md](../shared/disclaimer-language.instructions.md) (Security Planning section) for the reminder text.
28+
29+
1. **Phase 6 completion (handoff success path)** — Display the reminder immediately before presenting the final handoff summary.
30+
2. **Compact handoff** — Display the reminder when the orchestrator hands off to ADO or GitHub backlog workflows.
31+
3. **Error exit** — Display the reminder on any unrecoverable error path before terminating the session.
32+
4. **User-initiated exit** — Display the reminder when the user explicitly stops the session or switches agents.
33+
34+
Each reminder must state that the generated plan is AI-assisted and requires professional security review before execution.
35+
1936
## Six-Phase Definitions
2037

2138
Each phase has entry criteria, activities, exit criteria, artifacts produced, and a defined transition.

.github/instructions/shared/disclaimer-language.instructions.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,20 @@ applyTo: '**/.copilot-tracking/rai-plans/**, **/.copilot-tracking/security-plans
77

88
Planning agents that generate assessments requiring professional review display a CAUTION block during startup. Each section contains the verbatim disclaimer for the corresponding planner. Prompt files and agents reference the appropriate section via `#file:` to ensure consistent presentation across all entry points.
99

10+
<!--
11+
Authoring contract (parsed by scripts/linting/Validate-PlannerArtifacts.ps1):
12+
13+
- Each planner gets exactly one H2 section. The first whitespace-delimited word of the heading, lowercased, is the slug. Examples: "RAI Planning" -> "rai"; "Security Planning" -> "security"; "SSSC Planning" -> "sssc".
14+
- The slug derives three downstream identifiers used by ai-artifact footer validation:
15+
- planner key: `{slug}-planner`
16+
- disclaimer id: `{slug}-full-disclaimer`
17+
- disclaimer label: `{heading} Disclaimer` (full heading, not slug)
18+
- Each H2 section must contain exactly one `> [!CAUTION]` blockquote. Only the first CAUTION block in a section is extracted; additional CAUTION blocks within the same H2 are ignored.
19+
- The CAUTION block's prose should begin with `**Disclaimer:**` (the trailing colon is optional). This prefix is stripped before the text is matched against artifact footers; prose without it is retained verbatim.
20+
- Multi-line blockquote prose is joined with single spaces. Keep wrapping natural for source readability.
21+
-->
22+
23+
1024
## RAI Planning
1125

1226
> [!CAUTION]

scripts/agents/activation-harness/baseline.json

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"CleanWorkspace": {
33
"ScenarioName": "CleanWorkspace",
44
"AgentBytes": 10096,
5-
"ColdStartBytes": 38409,
5+
"ColdStartBytes": 39456,
66
"LoadedFiles": [
77
{
88
"Path": ".github/agents/project-planning/adr-creation.agent.md",
@@ -14,15 +14,15 @@
1414
},
1515
{
1616
"Path": ".github/instructions/shared/disclaimer-language.instructions.md",
17-
"Bytes": 4181
17+
"Bytes": 5228
1818
}
1919
],
20-
"Hash": "9fd83b5a9113bfa50d1e8bd4cc24808331bfc038194468c96d8bdf5e11e12ad8"
20+
"Hash": "040ed800dd6635ef75de95bb8a201441d8c59194f8b9a547ba64719ee836376a"
2121
},
2222
"SteadyState": {
2323
"ScenarioName": "SteadyState",
2424
"AgentBytes": 10096,
25-
"ColdStartBytes": 78751,
25+
"ColdStartBytes": 79798,
2626
"LoadedFiles": [
2727
{
2828
"Path": ".github/agents/project-planning/adr-creation.agent.md",
@@ -46,15 +46,15 @@
4646
},
4747
{
4848
"Path": ".github/instructions/shared/disclaimer-language.instructions.md",
49-
"Bytes": 4181
49+
"Bytes": 5228
5050
}
5151
],
52-
"Hash": "8efde478be60b8ea9ce7c4d7f380f7f6a3d2d623170cfa0ed66ec15b003ce4fb"
52+
"Hash": "296bb1a41437c68ea6e656b0c84cc6a6cd452054a0776d37004a8a2029df4e9e"
5353
},
5454
"GovernEntry": {
5555
"ScenarioName": "GovernEntry",
5656
"AgentBytes": 10096,
57-
"ColdStartBytes": 92147,
57+
"ColdStartBytes": 93194,
5858
"LoadedFiles": [
5959
{
6060
"Path": ".github/agents/project-planning/adr-creation.agent.md",
@@ -78,19 +78,19 @@
7878
},
7979
{
8080
"Path": ".github/instructions/shared/disclaimer-language.instructions.md",
81-
"Bytes": 4181
81+
"Bytes": 5228
8282
},
8383
{
8484
"Path": ".github/skills/project-planning/adr-author/SKILL.md",
8585
"Bytes": 13396
8686
}
8787
],
88-
"Hash": "24970f60a8fa20ed7f3f97d6e51464420f8ee9ee1972d638c1304fa1ef30f84e"
88+
"Hash": "4f18403391012bd6b84c2b6a832afb146b7ac139fc28370eec72d7d543eae6e8"
8989
},
9090
"AdoptTemplate": {
9191
"ScenarioName": "AdoptTemplate",
9292
"AgentBytes": 10096,
93-
"ColdStartBytes": 99141,
93+
"ColdStartBytes": 100188,
9494
"LoadedFiles": [
9595
{
9696
"Path": ".github/agents/project-planning/adr-creation.agent.md",
@@ -114,7 +114,7 @@
114114
},
115115
{
116116
"Path": ".github/instructions/shared/disclaimer-language.instructions.md",
117-
"Bytes": 4181
117+
"Bytes": 5228
118118
},
119119
{
120120
"Path": ".github/skills/project-planning/adr-author/scripts/normalize_template.py",
@@ -125,6 +125,6 @@
125125
"Bytes": 13396
126126
}
127127
],
128-
"Hash": "2293d95cd4862e6d8fabaa31ecaf5b303b2fc9826c8ea2faf04e205c7bc17d1c"
128+
"Hash": "c3eefe020ece450eaea370fcdfd492fa36d75ba7d8d5078210ed647af4ccce2b"
129129
}
130130
}

scripts/linting/Validate-PlannerArtifacts.ps1

Lines changed: 66 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,9 @@
99
Validates AI artifact footer and disclaimer presence in instruction templates.
1010
1111
.DESCRIPTION
12-
Reads footer-with-review.yml and disclaimers.yml config files as the single source
13-
of truth, then scans instruction files for required footer text based on artifact
12+
Reads footer-with-review.yml for footer text and artifact-classification rules, and
13+
parses shared/disclaimer-language.instructions.md as the canonical disclaimer source.
14+
Scans instruction files for required footer and disclaimer text based on artifact
1415
classification rules. Outputs results as JSON and sets CI environment variables on
1516
failure.
1617
@@ -23,8 +24,9 @@
2324
.PARAMETER FooterConfigPath
2425
Path to the footer-with-review.yml config file.
2526
26-
.PARAMETER DisclaimerConfigPath
27-
Path to the disclaimers.yml config file.
27+
.PARAMETER DisclaimerSourcePath
28+
Path to the shared disclaimer-language instructions markdown file. The validator
29+
parses H2 sections and their CAUTION blockquote bodies to derive disclaimer text.
2830
2931
.PARAMETER FailOnMissing
3032
When specified, treats missing footers and disclaimers as validation failures.
@@ -51,7 +53,7 @@ param(
5153
[string]$FooterConfigPath = '.github/config/footer-with-review.yml',
5254

5355
[Parameter(Mandatory = $false)]
54-
[string]$DisclaimerConfigPath = '.github/config/disclaimers.yml',
56+
[string]$DisclaimerSourcePath = '.github/instructions/shared/disclaimer-language.instructions.md',
5557

5658
[Parameter(Mandatory = $false)]
5759
[switch]$FailOnMissing,
@@ -107,40 +109,78 @@ function Import-FooterConfig {
107109
return $config
108110
}
109111

110-
function Import-DisclaimerConfig {
112+
function Import-DisclaimerSource {
111113
<#
112114
.SYNOPSIS
113-
Loads and validates disclaimers.yml.
115+
Parses the shared disclaimer-language instructions markdown as the canonical disclaimer source.
114116
115-
.PARAMETER ConfigPath
116-
Absolute path to the disclaimer config YAML file.
117+
.DESCRIPTION
118+
Reads the markdown file, splits on H2 headings to identify planner sections,
119+
and extracts the verbatim disclaimer prose from each section's CAUTION blockquote.
120+
The first word of each heading (lowercased) maps to the planner key and disclaimer id
121+
convention: 'RAI Planning' -> 'rai-planner' / 'rai-full-disclaimer'.
122+
123+
.PARAMETER SourcePath
124+
Absolute path to the disclaimer-language.instructions.md markdown file.
117125
118126
.OUTPUTS
119-
[hashtable] Parsed disclaimer config.
127+
[hashtable] Parsed config shaped as @{ version; source; disclaimers = @{ key = @{ id; label; text } } }.
120128
#>
121129
[CmdletBinding()]
122130
[OutputType([hashtable])]
123131
param(
124132
[Parameter(Mandatory = $true)]
125133
[ValidateNotNullOrEmpty()]
126-
[string]$ConfigPath
134+
[string]$SourcePath
127135
)
128136

129-
if (-not (Test-Path $ConfigPath)) {
130-
throw "Disclaimer config not found: $ConfigPath"
137+
if (-not (Test-Path $SourcePath)) {
138+
throw "Disclaimer source not found: $SourcePath"
131139
}
132140

133-
$content = Get-Content -Path $ConfigPath -Raw -Encoding utf8
134-
$config = ConvertFrom-Yaml -Yaml $content
141+
$raw = Get-Content -Path $SourcePath -Raw -Encoding utf8
142+
# Strip YAML frontmatter
143+
$body = $raw -replace '(?s)\A---.*?\r?\n---\s*\r?\n', ''
135144

136-
if (-not $config.version) {
137-
throw "Disclaimer config missing 'version' field: $ConfigPath"
145+
$disclaimers = @{}
146+
$sectionRegex = [regex]'(?ms)^##[ \t]+(?<heading>[^\r\n]+?)[ \t]*\r?\n(?<body>.*?)(?=^##[ \t]|\z)'
147+
$cautionRegex = [regex]'(?m)^>[ \t]*\[!CAUTION\][ \t]*\r?\n(?<block>(?:^>.*\r?\n?)+)'
148+
$prefixRegex = [regex]'^\*\*Disclaimer:?\*\*[\s:\-\u2014]*'
149+
150+
foreach ($match in $sectionRegex.Matches($body)) {
151+
$heading = $match.Groups['heading'].Value.Trim()
152+
$sectionBody = $match.Groups['body'].Value
153+
154+
$cautionMatch = $cautionRegex.Match($sectionBody)
155+
if (-not $cautionMatch.Success) { continue }
156+
157+
$blockLines = $cautionMatch.Groups['block'].Value -split '\r?\n'
158+
$proseParts = foreach ($line in $blockLines) {
159+
$stripped = $line -replace '^>[ \t]?', ''
160+
if ($stripped.Trim().Length -gt 0) { $stripped.Trim() }
161+
}
162+
$prose = ($proseParts -join ' ').Trim()
163+
$prose = $prefixRegex.Replace($prose, '', 1)
164+
if ([string]::IsNullOrWhiteSpace($prose)) { continue }
165+
166+
$slug = ($heading -split '\s+' | Select-Object -First 1).ToLowerInvariant()
167+
$key = "$slug-planner"
168+
$disclaimers[$key] = @{
169+
id = "$slug-full-disclaimer"
170+
label = "$heading Disclaimer"
171+
text = $prose
172+
}
138173
}
139-
if (-not $config.disclaimers) {
140-
throw "Disclaimer config missing 'disclaimers' section: $ConfigPath"
174+
175+
if ($disclaimers.Count -eq 0) {
176+
throw "No disclaimer sections found in source: $SourcePath"
141177
}
142178

143-
return $config
179+
return @{
180+
version = 'markdown-source'
181+
source = $SourcePath
182+
disclaimers = $disclaimers
183+
}
144184
}
145185

146186
function Get-FooterSearchText {
@@ -318,7 +358,7 @@ function Test-AIArtifactCompliance {
318358
Parsed footer-with-review.yml config.
319359
320360
.PARAMETER DisclaimerConfig
321-
Parsed disclaimers.yml config.
361+
Parsed disclaimer source (see Import-DisclaimerSource).
322362
323363
.PARAMETER RepoRoot
324364
Repository root for relative path display.
@@ -422,8 +462,8 @@ function Test-AIArtifactValidation {
422462
.PARAMETER FooterConfigPath
423463
Path to footer-with-review.yml relative to repo root.
424464
425-
.PARAMETER DisclaimerConfigPath
426-
Path to disclaimers.yml relative to repo root.
465+
.PARAMETER DisclaimerSourcePath
466+
Path to the shared disclaimer-language instructions markdown file, relative to repo root.
427467
428468
.PARAMETER FailOnMissing
429469
When set, missing footers cause a non-zero exit code.
@@ -447,7 +487,7 @@ function Test-AIArtifactValidation {
447487
[string]$FooterConfigPath,
448488

449489
[Parameter(Mandatory = $true)]
450-
[string]$DisclaimerConfigPath,
490+
[string]$DisclaimerSourcePath,
451491

452492
[Parameter(Mandatory = $false)]
453493
[switch]$FailOnMissing,
@@ -464,7 +504,7 @@ function Test-AIArtifactValidation {
464504

465505
# Load configs
466506
$footerConfig = Import-FooterConfig -ConfigPath (Join-Path $repoRoot $FooterConfigPath)
467-
$disclaimerConfig = Import-DisclaimerConfig -ConfigPath (Join-Path $repoRoot $DisclaimerConfigPath)
507+
$disclaimerConfig = Import-DisclaimerSource -SourcePath (Join-Path $repoRoot $DisclaimerSourcePath)
468508

469509
# Collect instruction files
470510
$allFiles = @()
@@ -616,7 +656,7 @@ if ($MyInvocation.InvocationName -ne '.') {
616656
-Paths $Paths `
617657
-ExcludePaths $ExcludePaths `
618658
-FooterConfigPath $FooterConfigPath `
619-
-DisclaimerConfigPath $DisclaimerConfigPath `
659+
-DisclaimerSourcePath $DisclaimerSourcePath `
620660
-FailOnMissing:$FailOnMissing `
621661
-OutputPath $OutputPath
622662

0 commit comments

Comments
 (0)