fix: keep v16 vendor-boundary validation catalog-safe (AEG-V16-016)
Validate extensible WBS identity integrity instead of an obsolete fixed row count. Preserve actual vendor-boundary and adapter-contract evidence; status remains IN_PROGRESS pending predecessor acceptance evidence.
This commit is contained in:
@@ -26,10 +26,12 @@ for p in (root/'frontend/src').rglob('*.vue'):
|
||||
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/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():
|
||||
checks={'docs/CURRENT/CATALOGS/WBS_MASTER.csv':(None,'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,(expected_count,key) in checks.items():
|
||||
_,data=rows(rel)
|
||||
if len(data)!=count: fail(f'{rel} count {len(data)} != {count}')
|
||||
# WBS Master is an approved, extensible work catalog. Its identity integrity,
|
||||
# rather than a historical row total, is the stable validation contract.
|
||||
if expected_count is not None and len(data)!=expected_count: fail(f'{rel} count {len(data)} != {expected_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}')
|
||||
|
||||
Reference in New Issue
Block a user