User Story
As a developer, in order to quickly locate every LLM integration point and understand each service's public interface, I want the catalog to surface LLM touchpoints explicitly and each service to "scream" its intent through a clear public entrypoint that the catalog can link to on GitHub.
Preconditions
- Architecture principles (P1–P4) documented in
catalog/architecture/software-architecture.md
- Services currently under
src/services/* with per-service types.ts but no consistent "public API" file
- Catalog already has architecture, decisions, and experiments sections
Acceptance Criteria
Success Metrics
- A developer new to the project can list every LLM call site from the catalog in under 5 minutes
- Service directories read as a list of intents (one entrypoint per service), not a flat pile of files
- Cross-service imports reference only the public entrypoint of the target service
Notes
- Framing: this is a "screaming architecture" pass focused on service public interfaces, not a rewrite. Prefer moving/renaming and re-exports over refactors.
- Consider whether the convention is
src/services/<name>/index.ts (re-exports) or a named file like src/services/<name>/<name>.ts. Pick one and document why.
- Good candidate services to audit first:
forms/ (many files — resolver, session, submission, shaping, filling, etc.), extraction/, evaluation/, data-collection/
- LLM-integrations catalog page should cross-reference the experiment roadmap (
catalog/experiments/_roadmap.md) so readers can trace from a variant back to the code that runs it
- GitHub links should use the
flexion/forms-lab repo with line ranges; prefer permalinks to main unless pinning to a commit is needed
- Consider adding a dependency-rule test that forbids deep imports across service boundaries once the entrypoint convention is established
- Start this work after the first round of experiment stories merges to main
Definition of Done
User Story
As a developer, in order to quickly locate every LLM integration point and understand each service's public interface, I want the catalog to surface LLM touchpoints explicitly and each service to "scream" its intent through a clear public entrypoint that the catalog can link to on GitHub.
Preconditions
catalog/architecture/software-architecture.mdsrc/services/*with per-servicetypes.tsbut no consistent "public API" fileAcceptance Criteria
catalog/architecture/llm-integrations.md) enumerates every LLM touchpoint (extraction, shaping, evaluation/judge, conversational filling, future RAG) with deep links to the relevant GitHub source linessrc/services/*has a single, obvious public-interface entrypoint (e.g.index.tsre-exports, or a documented convention) so a reader sees the service's intent without scanning every filetest/architecture/dependency-rule.test.tsor a sibling test)bun run checkpassSuccess Metrics
Notes
src/services/<name>/index.ts(re-exports) or a named file likesrc/services/<name>/<name>.ts. Pick one and document why.forms/(many files — resolver, session, submission, shaping, filling, etc.),extraction/,evaluation/,data-collection/catalog/experiments/_roadmap.md) so readers can trace from a variant back to the code that runs itflexion/forms-labrepo with line ranges; prefer permalinks tomainunless pinning to a commit is neededDefinition of Done