---
id: 01-ast-manifest-source
epic: conformance-hardening-v1
title: Replace regex manifest source parser with AST
type: technical-story
status: done
feature: core-eslint
depends-on: []
blocks: [02-dev-seed-assertion]
---

## Goal
`readManifestSource` in `_manifest-source.js` returns the same shape but
uses `@typescript-eslint/parser` AST traversal instead of regex.

## In scope
- Rewrite `readManifestSource` to delegate to a new `parseManifestFully`
  in `_manifest-ast.js` that returns `{ name, requiredCores, useCases }`
- Existing 4 tests for `readManifestSource` must still pass
- Add tests covering the previously-fragile cases: `name:` in JSDoc,
  single-quoted strings, manifest declared with `let` instead of `const`

## Out of scope
- Changing the `_manifest-source.js` exports surface (filesystem helpers
  `manifestPathForFeature` and `featureRootForFile` stay untouched)
- Changing any rule's behaviour beyond the parsing path

## Tasks
- [x] Epic + story scaffold
- [x] Extend `_manifest-ast.js` with `parseManifestFully`
- [x] Switch `readManifestSource` to delegate to `parseManifestFully`
- [x] Add edge-case tests
- [x] Verify all rules still pass; commit
