Skip to content

feat(cli): StrayMark self-adoption — decision (AIDEC) + distribution-source guard (cli-3.34.0)#358

Merged
montfort merged 2 commits into
mainfrom
feat/cli-3.34.0-autoadoption-source-guard
Jul 13, 2026
Merged

feat(cli): StrayMark self-adoption — decision (AIDEC) + distribution-source guard (cli-3.34.0)#358
montfort merged 2 commits into
mainfrom
feat/cli-3.34.0-autoadoption-source-guard

Conversation

@montfort

@montfort montfort commented Jul 13, 2026

Copy link
Copy Markdown
Contributor

Formalizes the self-adoption decision and ships its first, non-negotiable safeguard.

Decision record

  • docs/decisions/AIDEC-2026-07-13-001-straymark-self-adoption.md — elevates the Spike B analysis to a first-class AIDEC alongside the project's ADRs. Records the alternatives (full-live ouroboros / scoped-lagged / no-adoption), the decision (scoped + lagged — "eat yesterday's tail", safeguards first, Control Center as pilot, external adopters preserved as the N=2 gate), consequences, and the S1–S6 implementation sequence. review_required: true (awaits your straymark approve).

S1 — distribution-source guard (the prerequisite)

The catastrophic path is mechanical and exists today: dist/.straymark/ is a valid .straymark/, so a command run with cwd/--path inside dist/ treats the shipped template as an installed project (writes AILOGs/AIDECs into dist/, validates the source, …). resolve_project_root now skips a .straymark/ whose directory holds a dist-manifest.yml, falling through to the real git-root install or reporting not-installed. Pure helper utils::is_distribution_source; 3 unit tests.

S6 — CI hygiene backstop

dist-hygiene workflow fails a PR/push touching dist/** if a dated governance artifact (AILOG-2*, AIDEC-2*, ADR-2*, *.telemetry.yaml, CHARTER-<n>*) appears under dist/.straymark/. Patterns verified (no false positives on CHARTER-CHAIN-EVOLUTION.md / TEMPLATE-*).

NOT here (by design)

  • S2 (provenance sentinel) — needs your review of the marker design (fields, how init changes, tolerating the absent-sentinel legacy case). Covered by the implementation plan; next step.

cli-3.34.0. Full workspace suite green; no new clippy. Not tagged — merge + tag are yours.

🤖 Generated with Claude Code

…ution source (S1+S6)

Prerequisite for StrayMark self-adopting StrayMark (see the self-adoption risk
analysis). The catastrophic path is mechanical and exists today: because
`dist/.straymark/` is a valid `.straymark/`, running any mutating command with
cwd or `--path` inside `dist/` makes `resolve_project_root` treat the shipped
framework template as an installed project — writing AILOGs/AIDECs into `dist/`,
validating the source as a project, etc.

S1 (mechanical guard): `resolve_project_root` now skips a `.straymark/` whose
directory holds a `dist-manifest.yml` (unique to StrayMark's own `dist/`; no
adopter ships one). Resolution falls through to the real git-root install or
reports not-installed, with a `note:` explaining the skip. Pure, testable
detection helper `utils::is_distribution_source`.

S6 (CI backstop): a `dist-hygiene` workflow fails a PR/push if a dated artifact
(AILOG-2*, AIDEC-2*, ADR-2*, *.telemetry.yaml, CHARTER-<n>*) appears under
`dist/.straymark/` — the pollution S1 prevents, caught in CI if it slips through.

S2 (provenance sentinel on install) is deliberately NOT included here: it touches
the shipped distribution + every command's resolution and warrants review of the
marker design first. Documented for a follow-up.

Bump cli-3.34.0. Full workspace suite green; new unit tests for the guard.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@montfort montfort force-pushed the feat/cli-3.34.0-autoadoption-source-guard branch from d22957d to 34cd344 Compare July 13, 2026 08:37
…ed, lagged)

Elevate the self-adoption decision (Spike B / analisis-autoadopcion) to a
first-class AIDEC alongside the project's ADRs. Records the alternatives
(full-live ouroboros / scoped-lagged / no-adoption), the decision (scoped +
lagged, safeguards first, Control Center as pilot, external adopters preserved
as the N=2 gate), and the S1-S6 implementation sequence. review_required: true.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@montfort montfort changed the title feat(cli): auto-adoption safeguard — refuse to operate on the distribution source (cli-3.34.0) feat(cli): StrayMark self-adoption — decision (AIDEC) + distribution-source guard (cli-3.34.0) Jul 13, 2026
@montfort montfort merged commit 5a498ae into main Jul 13, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant