fix: Restore validate_v16.py doc paths after CURRENT/CATALOGS reorg (AGENTS.md §3)
ci / backend (push) Failing after 1s
Build & Test with Secrets / build (push) Failing after 1s
ci / static (push) Failing after 6s
Build & Test with Secrets / security-scan (push) Failing after 5s
Build & Test with Secrets / frontend (push) Failing after 59s
ci / frontend (push) Failing after 1m2s
Build & Test with Secrets / notification (push) Failing after 1s
ci / backend (push) Failing after 1s
Build & Test with Secrets / build (push) Failing after 1s
ci / static (push) Failing after 6s
Build & Test with Secrets / security-scan (push) Failing after 5s
Build & Test with Secrets / frontend (push) Failing after 59s
ci / frontend (push) Failing after 1m2s
Build & Test with Secrets / notification (push) Failing after 1s
Changes: - Update CSV references from docs/v16_0/ to docs/CURRENT/CATALOGS/ - Rename 08_DETAILED_WBS_MASTER.csv → WBS_MASTER.csv - Rename FE_COMPONENT_CATALOGUE.csv → FE_COMPONENT.csv - Add explicit UTF-8 encoding to JSON read (fixes cp949 decode error on Windows) CI was failing at static/validate_v16.py step due to docs reorganization not reflected in validator. Local test (python tools/validate_v16.py): - Before: FAIL=18 (missing CSV paths) - After: FAIL=2 (unrelated source archive issues, pre-existing) Fixes AGENTS.md rule 20 'Never claim build/test passed without evidence'. Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -20,17 +20,17 @@ for p in root.rglob('*.json'):
|
||||
for p in (root/'frontend/src').rglob('*.vue'):
|
||||
t=p.read_text(encoding='utf-8')
|
||||
if t.count('<template')!=t.count('</template>'): fail(f'unbalanced SFC template {p.relative_to(root)}')
|
||||
for base in [root/'frontend/src',root/'src',root/'db/migrations',root/'docs/v16_0']:
|
||||
for base in [root/'frontend/src',root/'src',root/'db/migrations',root/'docs/CURRENT']:
|
||||
for p in base.rglob('*'):
|
||||
if p.is_file() and p.suffix.lower() in {'.ts','.vue','.cs','.sql','.md'} and re.search(r'__[A-Z][A-Z0-9_]+__',p.read_text(encoding='utf-8')): fail(f'unresolved token {p.relative_to(root)}')
|
||||
checks={'docs/v16_0/08_DETAILED_WBS_MASTER.csv':(664,'WBS_ID'),'docs/v16_0/TECH_DEBT_REGISTER.csv':(148,'ID'),'docs/v16_0/DECISION_LOG.csv':(96,'Decision_ID'),'docs/v16_0/TRACEABILITY_MATRIX.csv':(121,'Requirement_ID'),'docs/v16_0/FE_COMPONENT_CATALOGUE.csv':(58,'ID'),'docs/v16_0/JOB_CATALOGUE.csv':(28,'Job_ID'),'docs/v16_0/SOURCE_COVERAGE_MATRIX.csv':(4,'File')}
|
||||
checks={'docs/CURRENT/CATALOGS/WBS_MASTER.csv':(664,'WBS_ID'),'docs/CURRENT/CATALOGS/TECH_DEBT_REGISTER.csv':(148,'ID'),'docs/CURRENT/CATALOGS/DECISION_LOG.csv':(96,'Decision_ID'),'docs/CURRENT/CATALOGS/TRACEABILITY_MATRIX.csv':(121,'Requirement_ID'),'docs/CURRENT/CATALOGS/FE_COMPONENT.csv':(58,'ID'),'docs/CURRENT/CATALOGS/JOB_CATALOGUE.csv':(28,'Job_ID'),'docs/CURRENT/CATALOGS/SOURCE_COVERAGE_MATRIX.csv':(4,'File')}
|
||||
for rel,(count,key) in checks.items():
|
||||
_,data=rows(rel)
|
||||
if len(data)!=count: fail(f'{rel} count {len(data)} != {count}')
|
||||
vals=[x.get(key,'').strip() for x in data]
|
||||
if any(not x for x in vals): fail(f'{rel} blank {key}')
|
||||
if key!='Requirement_ID' and len(vals)!=len(set(vals)): fail(f'{rel} duplicate {key}')
|
||||
_,wbs=rows('docs/v16_0/08_DETAILED_WBS_MASTER.csv')
|
||||
_,wbs=rows('docs/CURRENT/CATALOGS/WBS_MASTER.csv')
|
||||
for col in ['Task','Artifact','Acceptance_Evidence','Primary_Owner','Secondary','PD','Dependency','Gate','Evidence_Class','Risk','Status']:
|
||||
if any(not x.get(col,'').strip() for x in wbs): fail(f'blank WBS {col}')
|
||||
if sum(x['WBS_ID'].startswith('AEG-V16-') for x in wbs)!=88: fail('v16 WBS delta must be 88')
|
||||
@@ -56,7 +56,7 @@ for rel in ['src/KArtSell.Host/appsettings.json','src/KArtSell.Host/appsettings.
|
||||
idx=root/'attachments/current_session/SOURCE_INDEX_V16_0.json'
|
||||
if not idx.exists(): fail('missing source index')
|
||||
else:
|
||||
data=json.loads(idx.read_text())
|
||||
data=json.loads(idx.read_text(encoding='utf-8'))
|
||||
if len(data.get('files',[]))!=4 or data.get('all_match') is not True: fail('source index incomplete')
|
||||
for item in data.get('files',[]):
|
||||
p=root/item['Relative_Path']
|
||||
|
||||
Reference in New Issue
Block a user