feat(cli): StrayMark self-adoption — decision (AIDEC) + distribution-source guard (cli-3.34.0)#358
Merged
Merged
Conversation
…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>
d22957d to
34cd344
Compare
…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>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 yourstraymark 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/--pathinsidedist/treats the shipped template as an installed project (writes AILOGs/AIDECs intodist/, validates the source, …).resolve_project_rootnow skips a.straymark/whose directory holds adist-manifest.yml, falling through to the real git-root install or reporting not-installed. Pure helperutils::is_distribution_source; 3 unit tests.S6 — CI hygiene backstop
dist-hygieneworkflow fails a PR/push touchingdist/**if a dated governance artifact (AILOG-2*,AIDEC-2*,ADR-2*,*.telemetry.yaml,CHARTER-<n>*) appears underdist/.straymark/. Patterns verified (no false positives onCHARTER-CHAIN-EVOLUTION.md/TEMPLATE-*).NOT here (by design)
initchanges, 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