- Copy the block below to the end of the
## Decisionssection. - Use the next free four-digit ID. IDs are never reused and never renumbered.
- Date the record the day the decision was actually made (
YYYY-MM-DD). - Record the alternatives you rejected and why. A decision without context is a rumour, not a record.
- Never rewrite history. If a decision changes, append a superseding record.
### D-0001 — Short imperative title
- **Date:** YYYY-MM-DD
- **Status:** Accepted
- **Context:** the situation and the constraint that forced a choice
- **Alternatives Considered:** option A (rejected because ...), option B (rejected because ...)
- **Decision:** what was decided, in one or two sentences
- **Rationale:** why this option wins, including what it costs
- **Consequences:** what follows from it — new constraints, follow-up work, risks
- **Supersedes:** NoneAllowed statuses: Proposed, Accepted, Superseded, Deprecated, Rejected.
- Date: 2026-10-16
- Status: Accepted
- Context: PR #1 moves
feat/git-that-shit-v2-hardeningintomaster. The release candidate is bound to a specific verified commit6069f916a0fac14439c3335e682f994466961851, and the release evidence (Docker plugin lab) names that SHA. All three merge methods are enabled on the repository and no prior PR merge establishes a convention. - Alternatives Considered: Squash and merge (rejected: the verified commit
SHA would not appear in
master, breaking SHA-level traceability to the evidence). Rebase and merge (rejected: replays commits with new SHAs, so the verified commit would no longer exist inmaster). - Decision: Merge PR #1 with a merge commit.
- Rationale: A merge commit preserves
6069f91as an ancestor of the released history, so the release evidence remains verifiable against a real commit. The cost is a non-linear history, which is acceptable for a release branch. - Consequences: The tag
v0.3.0points at the merge commit, and the release notes must name both the merge SHA and the verified source SHA6069f91. - Supersedes: None
- Date: 2026-10-16
- Status: Accepted
- Context:
package.jsonand the README declare Apache-2.0, but noLICENSEfile existed in the repository, its history, or the npm tarball (0.2.2 shipped none either). Apache-2.0 section 4 requires redistributors to include a copy of the licence, so a public release without it is a compliance gap. - Alternatives Considered: Release without a LICENSE file to match the 0.2.2 precedent (rejected: perpetuates the compliance gap and cannot satisfy the release requirement that licence and attribution be correct). Defer to a later release (rejected: the release is the moment of distribution).
- Decision: Add the standard, unmodified Apache-2.0
LICENSEfile at the repository root; npm includes it in the tarball automatically. - Rationale: Removes the compliance gap at the point of distribution at negligible cost and with no functional change.
- Consequences: One additional release-metadata commit is added on top of the
verified commit; the verified commit
6069f91remains an ancestor and is not rewritten. - Supersedes: None
- Date: 2026-10-16
- Status: Accepted
- Context:
.github/workflows/publish.ymltriggered onrelease: [published]and rannpm publish. Creating thev0.3.0GitHub release would therefore have triggered an automatic npm publication, which this release explicitly must not do. The workflow also carriesid-token: write, so Trusted Publishing could have made that push succeed. - Alternatives Considered: Publish the GitHub release and accept the workflow run (rejected: risks an unauthorised npm publication). Create a draft release only (rejected: leaves the release page unpublished, failing the release goal).
- Decision: Change the trigger to
workflow_dispatchonly, so npm publication is always an explicit, separately authorised action. - Rationale: Keeps distribution to npm deliberate while still allowing a normal GitHub release. Cost: releasing to npm now needs a manual workflow run.
- Consequences:
v0.3.0will be GitHub-released but not npm-published; npm publication remains an outstanding blocker until separately authorised. - Supersedes: None
- Date: 2026-10-16
- Status: Accepted
- Context: npm
latestfor@gitdamnit/opencode-git-that-shitis0.2.2;0.3.0is unpublished. The README's only install command isnpm install, which resolves to0.2.2until npm publication. The release machine is not authenticated to npm (ENEEDAUTH). - Alternatives Considered: Publish to npm as part of this release (rejected: not authorised and not authenticated). Re-describe the release as complete (rejected: a GitHub release does not make a package available through npm).
- Decision: Treat the release as
GITHUB-RELEASED / NPM-PENDINGand document the npm gap explicitly in the README, CHANGELOG and release notes. - Rationale: Honest state beats an unsupported "fully released" claim.
- Consequences: Installation instructions must not imply that
0.3.0is installable from npm; a follow-up npm publication is required. - Supersedes: None
- Date: 2026-10-16
- Status: Accepted
- Context: The repository had no durable, in-repo record of requirements, decisions or verified status; release context lived only in conversation.
- Alternatives Considered: Rely on README/CHANGELOG alone (rejected: they describe the product, not the project's verified state or decision history).
- Decision: Adopt
PRODUCT_REQUIREMENTS.md,DECISION_LOG.mdandPROJECT_STATUS.mdas the canonical project documents. - Rationale: Requirements, decisions and evidence stay in Git and survive session loss. Cost: three more documents to keep current.
- Consequences: Substantial work must reconcile these documents with the repository before progress is reported.
- Supersedes: None