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
6 changes: 4 additions & 2 deletions .abcd/README.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
# .abcd/

abcd's development namespace. Everything here is dev material — it stays in the
repo (transparent) but is excluded from the release artifact. `docs/` (not here)
holds user-facing documentation and is the only dev-adjacent tree that ships.
repo (transparent) and is present in every repository checkout, marketplace
installs and release source archives included, but never in the released
binaries. `docs/` (not here) holds user-facing documentation and is the only
dev-adjacent tree the release artifact carries.

Three tiers, on two axes (durability × sharing):

Expand Down
7 changes: 4 additions & 3 deletions .abcd/development/README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,10 @@
# Development record

The abcd design record — the durable "what / why" the build works from. Kept in the
repo (transparent) but excluded from the release artifact; user-facing docs live
under [`../../docs/`](../../docs/). Organised **flat by artefact type**, one
canonical home per concept:
repo (transparent) and present in every repository checkout, marketplace installs
and release source archives included, but never in the released binaries;
user-facing docs live under [`../../docs/`](../../docs/). Organised **flat by
artefact type**, one canonical home per concept:

| Folder | What it holds |
|--------|---------------|
Expand Down
4 changes: 2 additions & 2 deletions .abcd/development/brief/01-product/02-context.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ abcd ships these user-facing commands:
- **`/abcd:ahoy install`** — install / update abcd in any project (bootstraps configuration, gitignore, marker blocks, PATH symlink). Bare `/abcd:ahoy` shows status+help.
- **`/abcd:disembark <source-repo> to <dest>`** — *pack* a lifeboat by **reading** `<source-repo>` — any repository, including one abcd has never touched — and writing the artefact **out-of-tree** to the operator-chosen `<dest>`. The source is never written to; the destination must be absent, an empty directory, or one carrying a parseable `_provenance.json` ([adr-35](../../decisions/adrs/0035-lifeboat-as-coverage-experiment.md)). Bare `/abcd:disembark` shows status+help; `probe <source-repo>` and `dry-run` sub-verbs preview without writing — `probe` reports **coverage** (which brief sections a repository can ground, and which come back blank).
- **`/abcd:embark from <dest>`** — *unpack* the lifeboat at `<dest>` (wherever a disembark wrote it) into a (typically empty) target project. Bare `/abcd:embark` shows status+help; `scan` and `probe <path>` sub-verbs discover/inspect without unpacking.
- **`/abcd:launch ship`** — cut a curated release from the single repo (`.abcd/**` excluded from the artifact by packaging), scrub for PII/secrets, stamp the version, update the marketplace entry. Bare `/abcd:launch` shows status+help; `dry-run` sub-verb runs the full pre-flight gate suite without writing the release artifact.
- **`/abcd:launch ship`** — cut a curated release from the single repo (the packaging filter denies `.abcd/**`, so the released binaries do not carry it), scrub for PII/secrets, stamp the version, update the marketplace entry. Bare `/abcd:launch` shows status+help; `dry-run` sub-verb runs the full pre-flight gate suite without writing the release artifact.
- **`/abcd:intent`** — bare quoted `/abcd:intent "<text>"` is the canonical create (spc-30/itd-46), plus the `plan` / `ready` / `review` / `link` sub-verbs that ship (alongside the deprecated `new` alias), with `refine` / `grill` / `ship` / `consistency` / `shape` / `reclassify` remaining design targets (`consistency` per itd-48, which superseded itd-31). There is no plain `list` sub-verb — it is folded into the bare render per SD001. Manages **intents** (press-release-format intent docs at `.abcd/development/intents/{drafts,planned,shipped,disciplines,superseded}/`). `plan` promotes an intent to `planned/` and plans the work as a spec on the native spec store ([adr-26](../../decisions/adrs/0026-native-spec-layer-ccpm-backend.md); the companion harness `ccpm` as the deeper backend); `ship` drives that spec to completion (or the full pipeline if from drafts/); a spec-close hook reconciles standalone/bundle intents planned → shipped automatically on a successful close (spc-28 `intent_lifecycle.reconcile`); disciplines move from drafts/ to disciplines/ on plan and stay there. Bare `/abcd:intent` shows status+help.
- **`/abcd:capture`** — capture / list / promote / resolve / wontfix issues (the structured `.abcd/work/issues/` ledger). Issues live at `.abcd/work/issues/{open,resolved,wontfix}/iss-N-<slug>.md`. See itd-4. The cross-corpus synthesist (`/abcd:dredge`) comes in a later phase as itd-25.
- **`/abcd:memory`** — curate a queryable knowledge substrate (`ingest` external sources / `ask` queries / `lint` health-checks) from specs, ADRs, reviews, and memory. See itd-36 and [`05-internals/07-memory.md`](../05-internals/07-memory.md).
Expand Down Expand Up @@ -42,7 +42,7 @@ Lifeboats are portable directories; share by copy/tar/git, not by global archive

**Repo:**

- abcd lives in **one repository** ([adr-28](../../decisions/adrs/0028-single-repo-curated-release.md)) — this directory. The Go binary, its user documentation, and the design record share one tree; `.abcd/**` stays in-tree but is excluded from the curated release artifact by packaging. `/abcd:launch ship` cuts that release from this repo, and the repo is the marketplace. There is no dev→public mirror. `abcdSubZero/` (an earlier CLI) is skimmed in Phase 0 for patterns to learn from — reference only, not a port target.
- abcd lives in **one repository** ([adr-28](../../decisions/adrs/0028-single-repo-curated-release.md)) — this directory. The Go binary, its user documentation, and the design record share one tree; `.abcd/**` stays in-tree and is present in every repository checkout — marketplace installs and release source archives included — never in the released binaries. `/abcd:launch ship` cuts that release from this repo, and the repo is the marketplace. There is no dev→public mirror. `abcdSubZero/` (an earlier CLI) is skimmed in Phase 0 for patterns to learn from — reference only, not a port target.

**Validation corpus:** user-maintained list in `.abcd/corpus.json`, seeded with:

Expand Down
2 changes: 1 addition & 1 deletion .abcd/development/brief/02-constraints/01-platform.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ This file holds locked decisions about *where* abcd runs and *how it ships*. The

abcd lives in **one repository** and ships a **curated release artifact** cut from it — there is no dev→public mirror ([adr-28](../../decisions/adrs/0028-single-repo-curated-release.md)). The Go binary is the product ([adr-21](../../decisions/adrs/0021-rebuild-in-go.md)); its source, its user-facing documentation, and the design record all share this one tree. The design record (this brief, the roadmap, intents, ADRs, research) lives in-tree at `.abcd/development/`; shared working material is committed under `.abcd/work/`, and `.abcd/.work.local/` is the gitignored local-only surface. See [`../../../../CLAUDE.md`](../../../../CLAUDE.md) for the canonical "where things live" map.

**`.abcd/**` stays in-tree but is excluded from the release artifact by packaging** — exclusion is a build-time filter over the one tree, not a copy between two repos. `/abcd:launch` cuts a curated GitHub Release from this repo; **the repo is the marketplace**, so discovery, install, and the design record share one location.
**`.abcd/**` stays in-tree and is present in every repository checkout — marketplace installs and release source archives included — never in the released binaries** — exclusion is a build-time filter over the one tree, not a copy between two repos; the launch bundler implements it as a structural namespace deny, which no cut release has run yet. `/abcd:launch` cuts a curated GitHub Release from this repo; **the repo is the marketplace**, so discovery, install, and the design record share one location.

## Front doors

Expand Down
2 changes: 1 addition & 1 deletion .abcd/development/brief/05-internals/03-configuration.md
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ Because the lifeboat lands out-of-tree, `embark` reads it from wherever disembar

| Tier | Path | Committed? | Holds |
|---|---|---|---|
| **record** | `.abcd/development/` | committed — excluded from the release artefact by packaging | the durable design record: brief, roadmap, intents, ADRs, research |
| **record** | `.abcd/development/` | committed — in every repository checkout, never in the released binaries | the durable design record: brief, roadmap, intents, ADRs, research |
| **shared work** | `.abcd/work/` | committed | shared working files — `CONTEXT.md` + `DECISIONS.md` |
| **local ephemeral** | `.abcd/.work.local/` | gitignored | machine-local scratch — `NEXT.md`, `scratch/`, `logs/` |

Expand Down
5 changes: 3 additions & 2 deletions .abcd/development/brief/glossary/distribution/release.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,9 @@ versions: null
A **release** is a published, version-tagged snapshot of abcd — both the act of
cutting a curated release from the single repo
([adr-28](../../../decisions/adrs/0028-single-repo-curated-release.md)) and the
resulting artefact, a GitHub Release with `.abcd/**` excluded by packaging,
carrying a [version](version.md), a changelog entry, and a git tag.
resulting artefact, a GitHub Release whose published binaries do not carry
`.abcd/**` (the packaging filter's structural deny, which no cut release has
run yet), carrying a [version](version.md), a changelog entry, and a git tag.

As with [version](version.md), [phase](../core/phase.md) forbids "release" as a
synonym *in the core context* — abcd does not organise development by releases.
Expand Down
5 changes: 3 additions & 2 deletions .abcd/development/roadmap/phases/phase-1-ahoy.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,9 @@ classified (managed-repo / unmanaged-repo / unmanaged-folder), registered in
the history store's `~/.abcd/history/index.json`, given its CLAUDE.md marker
block, and wired with the modular rules loader; re-running is idempotent. `/abcd:launch` cuts a **curated
single-repo release** — a release artifact built from the one repository, with
`.abcd/**` excluded by packaging so the design record never ships in the
artifact (per [adr-28](../../decisions/adrs/0028-single-repo-curated-release.md)).
the packaging filter denying `.abcd/**` so the design record is not carried by
the released binaries (per
[adr-28](../../decisions/adrs/0028-single-repo-curated-release.md)).
There is no separate public repository to promote into: the repo *is* the
marketplace, and launch is the packaging-and-scrub step that produces the
distributable.
Expand Down
5 changes: 4 additions & 1 deletion .abcd/work/CONTEXT.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,5 +39,8 @@ Python reference implementation.
manifest and tiered by release impact), which runs at a release, not
continuously. So a brief sentence about behaviour can be wrong between
releases.
- Single repo, curated release (no dev→public mirror). `.abcd/**` never ships.
- Single repo, curated release (no dev→public mirror). `.abcd/**` is in every
repository checkout — marketplace installs and release source archives
included — and never in the released binaries. The launch bundler denies the
namespace structurally, but that filter has not yet run on a cut release.
- Never commit/push without the maintainer asking; new deps need sign-off.
30 changes: 30 additions & 0 deletions .abcd/work/DECISIONS.md
Original file line number Diff line number Diff line change
Expand Up @@ -956,3 +956,33 @@ parallel-agent merge contention bites.
Repro: `internal/core/rules/rules_test.go`,
`TestMergeNilBaseDomainsAddsNewKeys`, watched failing on pre-fix code for the
claimed reason (panic: assignment to entry in nil map) and passing after.
- 2026-08-06 — iss-183: of the two fix directions the issue offered, REWORD is
taken and wiring is not. The descriptive instances now carry the
channel-truthful phrasing iss-43 established in the README — `.abcd/**` is
present in every repository checkout, marketplace installs and release source
archives included, and never in the released binaries — with the launch
bundler named as the implemented structural namespace deny that no cut release
has yet run, rather than as an operating packaging filter. Wiring the launch
publish path so the deny actually runs on a real release stays open feature
work with its own design questions (the marketplace manifest schema has no
per-path exclusion, and `release.yml` uploads the binaries without invoking the
verb), and is deliberately not assumed by this wording. Two candidate sites are
classified exempt on genre rather than reworded: `01-press-release.md`, which
states the intended product in press-release voice throughout, and
`04-surfaces/04-launch.md`, whose mention sits inside its explicit "full-cut
design" framing and is already truthful. One instance the issue body's list
missed surfaced only under a case-insensitive re-enumeration — AGENTS.md's
working-tree-layout line, capitalised "Excluded from the release artifact" —
which is why the closing sweep runs the three phrases with `-i`.
- 2026-08-06 — attribution epoch: the full git history (main, all release
tags, and the open work branch) is rewritten to normalise commit
attribution — AI-tool author/committer identities and two misconfigured
machine-local identities all map to the maintainer's account, AI
co-author trailers are removed, and every commit that had AI involvement
carries an `Assisted-by` trailer (the disclosure convention; added where
missing). Every rewritten commit's tree is byte-identical to its
predecessor — content is untouched; only hashes and attribution change.
Consequence for the record: any commit SHA cited in records, receipts,
or issue threads dated before 2026-08-06 refers to the pre-rewrite
history and no longer resolves from a current checkout; treat those
citations as historical, keyed to the old epoch.
32 changes: 32 additions & 0 deletions .abcd/work/attribution-rewrite-2026-08-06/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# Attribution rewrite, 2026-08-06 — commit-id translation

On 2026-08-06 the repository's full history was rewritten to normalise commit
attribution: an AI-tool identity and two machine-derived identities (one of them
an identity git had auto-derived from the host, never typed by anyone) were
mapped onto the maintainer's account, AI co-author trailers were removed, and
the `Assisted-by` disclosure trailer was added wherever it was missing. Every
commit tree came through byte-identical — no file content changed, only
attribution metadata and, consequently, every commit id.

`.abcd/work/DECISIONS.md` carries the dated entry that declares the boundary.

## What this directory is for

Records, receipts, and issue threads written before that date cite commit ids
from the old history. Those ids no longer resolve in a checkout. The tables here
translate them, so an old citation stays readable instead of becoming a dead end:

- `sha-map-old-to-new.tsv` — every commit on the default branch: old id, new id,
subject. 725 rows, validated position-by-position against tree and subject.
- `tag-map-old-to-new.tsv` — the six release tags, with the commit each pointed
at before and after.

To translate an id, match it as a prefix:

```sh
grep ^3377980 .abcd/work/attribution-rewrite-2026-08-06/sha-map-old-to-new.tsv
```

Both tables are historical and complete. Nothing appends to them: they describe
one event, and a second rewrite would need its own directory rather than
extending these.
Loading