> ## Documentation Index
> Fetch the complete documentation index at: https://defendable.science/llms.txt
> Use this file to discover all available pages before exploring further.

# defendable-science — Decision Log (ADRs)

> MADR-style Architecture Decision Records for the defendable-science plugin. Each records the context, the options considered, the rejected alternatives and why…

MADR-style Architecture Decision Records for the `defendable-science` plugin. Each records
the context, the options considered, the rejected alternatives **and why**, and
links to the spec section + grounding digest. Captured 2026-07-17 during the
design session; the reasoning here is not reconstructable from the specs alone.
Migrates to the plugin's `decisions/` alongside `resources/references/`.

> Purpose beyond the record: this log is the raw material for a planned blog
> post / paper explaining the skills and the reasoning behind them — the intent
> is eventually to write that *using* `defendable-science` (`paper-synthesis` + `defend`).

| ADR                                                        | Decision                                                                                                                                     | Status   |
| ---------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | -------- |
| [0001](/decisions/0001-separate-plugin-repo)               | Package the workflow as a standalone plugin, not in-mononet                                                                                  | accepted |
| [0002](/decisions/0002-scientific-scope-only)              | Scientific scope only; engineering delegated via a contract                                                                                  | accepted |
| [0003](/decisions/0003-agency-principle)                   | Agency principle — assistants, not researchers                                                                                               | accepted |
| [0004](/decisions/0004-understanding-principle-and-defend) | Understanding principle + the `defend` skill                                                                                                 | accepted |
| [0005](/decisions/0005-three-level-mirror)                 | Three-level mirror; thesis as a partial mirror                                                                                               | accepted |
| [0006](/decisions/0006-two-skills-per-level)               | Two pipeline skills per level (generate/resolve)                                                                                             | accepted |
| [0007](/decisions/0007-literature-one-skill-two-modes)     | `literature` = one skill, scout/position modes                                                                                               | accepted |
| [0008](/decisions/0008-literature-bib-plus-triage)         | Literature registry = standard bib + triage sidecar                                                                                          | accepted |
| [0009](/decisions/0009-dataset-thin-manifest)              | `dataset` one skill + thin `datasets.yml` (reject DVC/DataLad/lakeFS)                                                                        | accepted |
| [0010](/decisions/0010-storage-tiers)                      | Tiers A/B/C by (license × access); mirror ≠ redistribution grant                                                                             | accepted |
| [0011](/decisions/0011-rclone-mirror-sha256)               | rclone private mirror; SHA-256 authoritative fixity                                                                                          | accepted |
| [0012](/decisions/0012-shared-substrate)                   | Shared asset substrate — share the mechanism, not the file                                                                                   | accepted |
| [0013](/decisions/0013-experiment-backend-contract)        | Experiment-backend *contract* + pluggable backend                                                                                            | accepted |
| [0014](/decisions/0014-progress-cross-cutting)             | `progress` cross-cutting; semantic roll-up; anti-Goodhart                                                                                    | accepted |
| [0015](/decisions/0015-defend-cross-cutting)               | `defend` cross-cutting; guardrail stop-and-confirm; teaching; non-grading                                                                    | accepted |
| [0016](/decisions/0016-mentor-personas)                    | Mentor personas author-selectable; no personality inference                                                                                  | accepted |
| [0017](/decisions/0017-research-init-one-skill)            | `research-init` one skill, init/adopt modes                                                                                                  | accepted |
| [0018](/decisions/0018-git-native-source-of-truth)         | Git-native plain text as source of truth; cross-repo out of scope                                                                            | accepted |
| [0019](/decisions/0019-public-plugin-visibility)           | Public plugin, named `defendable-science`                                                                                                    | accepted |
| [0020](/decisions/0020-bib-format-csl-json)                | CSL-JSON source of truth; BibTeX exported on demand                                                                                          | accepted |
| [0021](/decisions/0021-thesis-gate-per-gap-confirmation)   | Thesis gate — per-gap acknowledged confirmation                                                                                              | accepted |
| [0022](/decisions/0022-license-apache-2.0)                 | License the plugin under Apache-2.0                                                                                                          | accepted |
| [0023](/decisions/0023-engineering-delegation-contract)    | Delegate engineering via a contract, not a named tool                                                                                        | accepted |
| [0024](/decisions/0024-tooling-package-and-bootstrap)      | Supporting tooling = one package (Typer CLI, optional MCP) + markdown `ensure-tooling` bootstrap                                             | accepted |
| [0025](/decisions/0025-disclosure-and-citation-growth)     | Honest AI-use disclosure + citation as the growth mechanism (auto-proposed by `paper-synthesis`)                                             | accepted |
| [0026](/decisions/0026-independent-versioning-compat-pin)  | Independent plugin/package versioning with a compatibility pin                                                                               | accepted |
| [0027](/decisions/0027-release-driven-oidc-publish)        | Publish via GitHub Releases + PyPI Trusted Publishing (OIDC, no tokens)                                                                      | accepted |
| [0028](/decisions/0028-100-percent-coverage-gate)          | 100% statement + branch coverage gate on the package                                                                                         | accepted |
| [0029](/decisions/0029-api-key-handling)                   | Unified API-key handling — a CLI-managed JSON store (not `.env`), stdin writes, scoped in-memory env for children                            | accepted |
| [0030](/decisions/0030-docs-site-mintlify)                 | Docs site on Mintlify, published from a generated docs repo to `defendable.science`                                                          | accepted |
| [0031](/decisions/0031-config-driven-cache-dir)            | Source the cache root from `config.yml` (`cache_dir:`), not a hardcoded literal                                                              | accepted |
| [0032](/decisions/0032-keys-store-outside-repo-by-default) | Key store defaults outside the repo (XDG); in-repo store is an explicit, gitignored opt-in with a committable-store runtime guardrail        | accepted |
| [0033](/decisions/0033-evidentiary-point-records)          | Evidentiary per-point accountability records (`points`, not a bare pass/fail), shared by `defend` and `digest`                               | accepted |
| [0034](/decisions/0034-digest-skill)                       | Dedicated `digest` skill for inbound paper comprehension, not a `defend` target                                                              | accepted |
| [0035](/decisions/0035-rename-to-defendable-science)       | Rename the project to Defendable Science — repo, plugin, distribution, CLI, config dir, env vars, and docs domain; old PyPI packages dropped | accepted |

Format: MADR (Markdown Any Decision Records). Deciders: Davor Runje (with Claude).
