IntentGuard

Decisions · explorer

Architecture Decision Records

5 decision records discovered in the repository — four system ADRs in the authoritative specification and one FPAT scope decision. Alternatives and consequences below are exactly what each record states; nothing is reconstructed.

Why does this exist?

Each record traces problem → decision → consequences, and lists the requirements and capabilities it explicitly names. Follow “affected nodes” into the graph to continue the chain to tests and evidence.
System ADR

ADR-0001: DistilBERT with Hugging Face Transformers and PyTorch

Accepted2026-07-31

Context

The portfolio project must demonstrate modern NLP model work, PyTorch or TensorFlow, Hugging Face, reproducible evaluation, and local execution on an RTX 5060 Mobile with 24 GB RAM. It must also finish in one weekend. The improved method needs to be substantial enough to compare against a lexical baseline but small enough to fine-tune and serve locally.

Decision

Use `distilbert-base-uncased` through Hugging Face Transformers with PyTorch and a 77-class sequence-classification head. Use two epochs initially, sequence length 96, train batch size 16, validation macro-F1 for epoch selection, and one documented OOM fallback to batch size 8.

Alternatives considered · 5

  • TF-IDF onlyFast and credible as a baseline, but insufficient to demonstrate Hugging Face/PyTorch fine-tuning.
  • Frozen sentence embeddings plus logistic regressionLower implementation risk and valid as a fallback, but demonstrates less end-to-end transformer training.
  • BERT-base, RoBERTa or DeBERTaPotentially stronger but larger/slower. Additional performance is not required to prove the engineering point.
  • Small generative LLMWould make classification slower, harder to calibrate, and harder to evaluate without adding business value.
  • TensorFlowTechnically valid, but the user’s local workflow and target portfolio benefit more from a straightforward PyTorch/Hugging Face path. Suppor…

Reconsideration trigger

Reconsider only if: - the checkpoint cannot load or make a forward pass on the target environment; - fine-tuning cannot produce a valid artifact by Hour 9 after the documented fallback; - measured latency or memory exceeds the hardware budget; - the target role explicitly requir…

System ADR

ADR-0002: BANKING77 as the single primary dataset

Accepted2026-07-31

Context

The project needs a public, laptop-sized dataset with enough class granularity to make evaluation meaningful. It must not require scraping, manual annotation, private support data, or multiple dataset pipelines.

Decision

Use one pinned revision of `PolyAI/banking77` under CC BY 4.0. - Preserve the upstream train/test split. - Derive a stratified 15% validation split from training data with seed 42. - Record revision, licence, label mapping, split metadata and hashes. - Use the untouched test split only for final comparison. - Maintain a small curated unsupported-query fixtu…

Alternatives considered · 4

  • CLINC150Offers explicit out-of-scope examples and more domains, but broadens the business context and adds taxonomy complexity.
  • Proprietary or scraped support ticketsWould be more realistic but introduces privacy, licence, cleaning and annotation problems that do not fit the weekend.
  • Fully synthetic datasetUseful as a fallback and for tests, but not credible as the primary source for portfolio performance claims.
  • Multiple support datasetsCould improve domain-shift analysis, but violates the one-primary-dataset constraint and increases normalization work.

Reconsideration trigger

Reconsider if: - the pinned revision or licence becomes unavailable or ambiguous; - the loader cannot reproduce the upstream split; - the target job is explicitly non-NLP or requires another domain; - a real, legally usable employer dataset is later supplied. Changing the primar…

System ADR

ADR-0003: One FastAPI inference interface

Accepted2026-07-31

Context

The project needs a small but genuine inference boundary demonstrating typed validation, model loading, health behavior, error handling and latency. It must remain easy to run in an interview.

Decision

Expose: - `GET /health` - `POST /v1/predict` Use FastAPI and Pydantic. Treat abstention as a successful HTTP 200 model decision. Training and evaluation remain operator commands; no second inference CLI is added.

Alternatives considered · 4

  • CLI onlySimplest implementation, but shows less boundary validation and is less representative of how a model becomes part of a system.
  • CLI plus FastAPIConvenient but duplicates inference presentation and testing. Training/eval commands already provide sufficient CLI operation.
  • Gradio or StreamlitMore visual, but a frontend would consume time without improving evaluation or engineering evidence.
  • Multiple servicesUnjustified for one model and one local process.

Reconsideration trigger

Reconsider if: - API implementation threatens the Sunday Hour 13 gate; - the target environment explicitly prohibits HTTP serving; - a later consumer requires batch-file inference or a specific protocol. A future batch interface must reuse the predictor module and receive its ow…

System ADR

ADR-0004: `uv` environment and local artifacts; no weekend Docker

Accepted2026-07-31

Context

The system must reproduce locally on Linux or WSL without paid infrastructure. The user has Docker capability, but GPU container setup, image size and artifact distribution could consume time that should be spent on evaluation and tests.

Decision

- Use Python 3.11. - Declare dependencies in `pyproject.toml`. - Commit `uv.lock`. - Use a Makefile as the documented command layer. - Store generated model artifacts in a gitignored local directory. - Run CI on CPU using the lockfile and tiny fixtures. - Exclude Docker from guaranteed MVP.

Alternatives considered · 5

  • `requirements.txt` and virtualenvSimple, but weaker lock resolution and grouped development dependencies.
  • PoetryValid, but adds no advantage over the selected lightweight workflow.
  • DockerfileUseful for deployment, but GPU pass-through and model-weight handling increase weekend risk. A CPU inference image would not validate the t…
  • Docker ComposeNo second service exists, so Compose would be decorative.
  • Model registry or object storageUnnecessary for one local artifact.

Reconsideration trigger

Reconsider after the MVP when: - all MUST evaluation and tests pass; - a deployment target is known; - a repeatable CPU or NVIDIA container can be validated without embedding model weights or secrets; - an interviewer or employer specifically requests container packaging.

FPAT decision

Decision 0001: Keep FPAT Lite as a shared modular core

Accepted2026-07-31

Context

The original FPAT design combines safe agent behavior with a GitHub-specific issue hierarchy, Project v2 synchronization, rollup enforcement, scheduled audits, and fixed five-subtask decomposition. The target user is a solo developer or small team that needs the governance benefits without operating a delivery platform. Current Codex and Claude Code both su…

Decision

Use six shared command contracts, three shared rule documents, optional templates and knowledge, and one thin skill router in each platform's documented repository skill location. Keep GitHub governance removable and nonessential.

Reconsideration trigger

Revisit if the platforms adopt a common repository skill location or either platform removes the discovery behavior on which an adapter depends.