Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .abcd/docs-lint.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
"rules": {
"links_resolve": {"enabled": true, "severity": "blocker"},
"stray_root_docs": {"enabled": true, "severity": "blocker",
"allowlist": ["README","AGENTS","CHANGELOG","CONTRIBUTING","SECURITY","LICENSE"]}
"allowlist": ["README","AGENTS","CHANGELOG","CONTRIBUTING","SECURITY","LICENSE","ACKNOWLEDGEMENTS"]}
},
"exempt_paths": [],
"exempt_if_status": []
Expand Down
7 changes: 7 additions & 0 deletions .mailmap
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Consolidate author identities for display in `git shortlog`, `git log`, and the
# GitHub contributor graph. This is display-only — it does not rewrite history.
#
# Canonical <canonical-email> <commit-email> — fold by email
# Canonical <canonical-email> Commit Name <commit-email> — fold a specific author
Alex Reppel <77722411+REPPL@users.noreply.github.com> <77722411+REPPL@users.noreply.github.com>
Alex Reppel <77722411+REPPL@users.noreply.github.com> t <t@t>
37 changes: 37 additions & 0 deletions ACKNOWLEDGEMENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Acknowledgements

abcd stands on ideas, tools, and writing from many sources. This file records them
in three parts: the **development** that built abcd, the **inspirations** that
shaped its design, and the **references** it draws on. Each entry is added in the
same change that lands what it records — the pull request that adopts a pattern,
cites a source in an ADR, or integrates a tool — so the list grows with the work
rather than being reconstructed later. Runtime dependencies are not listed here;
they live in `go.mod` and the licence notices they carry.

## Development

Development of abcd has been assisted by Claude Code (Anthropic). Per-commit
disclosure uses an `Assisted-by:` trailer; the human contributor is the author of
record and is responsible for all AI-assisted output — its correctness, licensing,
and fit for the project. See [`CONTRIBUTING.md`](CONTRIBUTING.md).

## Inspirations

Ideas and methodologies that shaped the design — not code abcd depends on.

- **Amazon "Working Backwards"** — the press-release format of abcd's intents.
- **Architecture Decision Records (MADR)** — the shape of the decision record.
- **Diátaxis** — the four-type model behind the user documentation.
- **Domain-Driven Design (bounded contexts)** — the surface boundaries.
- **The Linux kernel's coding-assistants policy** — the `Assisted-by:` attribution
model abcd adopts for AI-assisted commits.

## References & sources

Books, articles, and papers cited in the design record.

- Eric Evans, *Domain-Driven Design* (Addison-Wesley, 2003).
- A. Mavin, P. Wilkinson, A. Harwood, M. Novak, "Easy Approach to Requirements
Syntax (EARS)" (RE, 2009).
- U.S. Copyright Office, *Copyright and Artificial Intelligence, Part 2:
Copyrightability* (2025).
18 changes: 18 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,3 +59,21 @@ Development material lives under `.abcd/`; `docs/` is user-facing only.
`go test ./...`, and `go test -race ./internal/...`).
- Every new behaviour has a test watched fail before the change and pass after.
- A CHANGELOG entry accompanies any user-facing change.

## Attribution and acknowledgements

- **AI-assisted commits carry an `Assisted-by:` trailer**, kernel format
(`Assisted-by: Claude:claude-opus-4-8`) — disclosure, not authorship. Never
`Co-Authored-By:` for AI (it asserts an authorship the tool does not hold and
inflates the contributor graph). A human-only `Signed-off-by:` (DCO) is deferred
to the public flip or the first outside contribution. The human is the author of
record, responsible for all AI-assisted output. See `CONTRIBUTING.md`.
- **Naming a tool is confined to credit.** User-facing prose (`README.md`,
`docs/`) stays host-agnostic — the `harness/*` docs-lint rules enforce it. The
one sanctioned place to name a tool is attribution: the README badge and
`ACKNOWLEDGEMENTS.md`, using the `<!-- docs-lint: allow -->` escape where a lint
root is involved. Private, unpublished tool names never appear in any committed
file.
- **`ACKNOWLEDGEMENTS.md`** credits ideas, tools, and writing in three parts —
development, inspirations, references. Add an entry in the same change that lands
it (adopts a pattern, cites a source in an ADR, integrates a tool), never later.
24 changes: 24 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,27 @@ abcd is a private incubation repo for now; it flips public at maturity. See
- A **CHANGELOG** entry accompanies any user-facing change.
- **Docs** are Diátaxis (one type per page, present tense); the design record lives
under `.abcd/`, never in `docs/`.

## AI assistance and authorship

Development of abcd is assisted by an AI coding assistant. Two rules keep that
honest:

- **Human author of record.** The human contributor is the author of every change
they submit and is responsible for all AI-assisted output — its correctness, its
licensing, and its fit for the project. AI assistance never transfers that
responsibility.
- **Disclosure by trailer, not co-authorship.** AI-assisted commits carry an
`Assisted-by: Claude:<model-version>` trailer (the Linux kernel format) —
disclosure only. abcd never uses `Co-Authored-By:` for AI: it asserts an
authorship the tool does not hold and inflates the contributor graph. A
human-only `Signed-off-by:` (DCO) is deferred until the repo is public or takes
its first outside contribution.

## Acknowledgements

[`ACKNOWLEDGEMENTS.md`](ACKNOWLEDGEMENTS.md) credits the ideas, tools, and writing
behind abcd in three parts — development, inspirations, and references. Add an entry
**in the same change that lands it**: the PR that adopts an external pattern, cites
a source in an ADR, or integrates a tool. Adding it at the moment it lands is what
keeps the file from going stale — it is never reconstructed after the fact.
12 changes: 7 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,16 @@

<p>An opinionated, intent-driven development framework for <a href="https://x.com/signulll/status/2030404483897815089">product thinkers</a>.</p>

<a href="https://github.com/REPPL/abcd-cli/releases"><img src="https://img.shields.io/github/v/release/REPPL/abcd-cli?cacheSeconds=300" alt="Release"></a>
<a href="https://github.com/REPPL/abcd-cli/blob/main/LICENSE"><img src="https://img.shields.io/github/license/REPPL/abcd-cli?cacheSeconds=300" alt="License"></a>
<img src="https://img.shields.io/github/last-commit/REPPL/abcd-cli?cacheSeconds=300" alt="Last commit">
<!-- Static badges only: shields.io cannot read a private repo's API, so dynamic
github/* badges (release, last-commit) render as errors while private. Re-add
them at the public flip, when the API is readable. -->
<a href="https://github.com/REPPL/abcd-cli/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="License: MIT"></a>
<img src="https://img.shields.io/badge/status-experimental-orange" alt="Status: experimental">
<img src="https://img.shields.io/badge/Go-1.25-00ADD8?logo=go&logoColor=white" alt="Go 1.25">
<a href="https://claude.ai/claude-code"><img src="https://img.shields.io/badge/Built_with-Claude_Code-3B5CE7?logo=anthropic&logoColor=white" alt="Built with Claude Code"></a> <!-- docs-lint: allow — attribution names the tool by design (see ACKNOWLEDGEMENTS.md) -->
<br />
<img src="https://img.shields.io/badge/macOS-000000?logo=apple&logoColor=white" alt="macOS">
<img src="https://img.shields.io/badge/Linux-core%20CI--tested-FCC624?logo=linux&logoColor=black" alt="Linux: core CI-tested">
<br />
<img src="https://img.shields.io/badge/status-experimental-orange" alt="Status: experimental">

</div>

Expand Down
Loading