- Updated FdsSqlOptions to accept an optional ILogger parameter for improved error logging. - Modified FdsMfr and FdsMfrClient classes to pass the logger instance to FdsSqlOptions. - Added detailed error logging in various methods to capture SQL execution issues and file handling errors. - Improved documentation for FdsSqlOptions to clarify logging behavior. - Updated Archive class to log compression errors, enhancing traceability of failures. - Adjusted project configuration to suppress specific warnings related to transitive dependencies. - Added NuGet.config to define package sources for dependency management. - Updated submodule references for OCORE and related projects.
72 lines
2.5 KiB
Markdown
72 lines
2.5 KiB
Markdown
# Decisions
|
|
|
|
This folder holds **Architecture Decision Records (ADRs)** — short, immutable
|
|
records of a specific technical choice, why it was made, and what it implies
|
|
going forward.
|
|
|
|
## What belongs here
|
|
|
|
A decision, not a how-to. If it answers "why do we do X this way, and what
|
|
else did we consider," it's a decision. If it explains "how subsystem X
|
|
currently works," that belongs in [`../Concepts`](../Concepts/README.md)
|
|
instead (and a decision often triggers a concept doc to be created/updated).
|
|
|
|
## File naming
|
|
|
|
`NNNN-kebab-case-title.md`, four-digit zero-padded, sequential across the
|
|
whole folder (`0001-...`, `0002-...`). Never reuse or renumber.
|
|
|
|
## Required YAML frontmatter
|
|
|
|
Every decision file starts with:
|
|
|
|
```yaml
|
|
---
|
|
status: Accepted # Proposed | Accepted | Superseded
|
|
date: 2026-07-03 # date the decision was accepted
|
|
applyTo: # glob(s) — files/areas this decision governs
|
|
- "Fuchs/Notifications/**"
|
|
supersededBy: "" # filename of the decision that replaced this one, if any
|
|
---
|
|
```
|
|
|
|
**Agents (Claude, Copilot, Codex) must scan the YAML frontmatter of every file
|
|
in this folder first** (cheap — no need to read the body) and only read the
|
|
full body of decisions whose `applyTo` glob matches the files they're about
|
|
to touch, or whose subject is otherwise clearly relevant to the task. This
|
|
keeps decision-following cheap even as the folder grows.
|
|
|
|
## Body template
|
|
|
|
```markdown
|
|
# NNNN — Title
|
|
|
|
## Context
|
|
What problem/situation forced a choice.
|
|
|
|
## Decision
|
|
What was decided, stated plainly.
|
|
|
|
## Consequences
|
|
What this implies for future code — constraints, follow-ups, trade-offs
|
|
accepted knowingly.
|
|
|
|
## Alternatives considered
|
|
Options that were rejected and why (optional but preferred).
|
|
```
|
|
|
|
## Rules
|
|
|
|
- **Decisions are immutable once `Accepted`.** Do not edit the Decision/
|
|
Consequences of an existing file to reverse it. Instead, write a new
|
|
decision, set its `applyTo`/subject accordingly, and set the old file's
|
|
`status: Superseded` + `supersededBy: NNNN-new-file.md`.
|
|
- **Follow existing decisions.** Before implementing anything in an area
|
|
covered by an `Accepted` decision, read it and conform to it. If you
|
|
believe a decision is wrong, raise it with the user rather than silently
|
|
deviating.
|
|
- **Capture new decisions as they happen.** Whenever the user (or the code
|
|
you're writing) settles a non-obvious architectural or cross-cutting
|
|
choice — not a routine implementation detail — add a decision here in the
|
|
same change, and create/update the matching concept doc in `../Concepts`.
|