From 1b1b6bec2effe5f566479ef94fcc5bc73a9fd609 Mon Sep 17 00:00:00 2001 From: Jens Tirsvad Nielsen Date: Thu, 8 Oct 2026 14:06:36 +0800 Subject: [PATCH 1/3] Accept MIL-009 after review RC-032 S02 gave the Go in chat on 2026-10-08 and waived the PlantUML render check (no PlantUML server is configured). Add the review record RC-032, set the latest Version History rows of MIL-009 and the changed documents to Accepted and the rows before them to Deprecated, and record the review in the traceability matrix. --- docs/artifact-registry.md | 2 +- docs/business-case.md | 4 +- docs/dcd.md | 4 +- docs/dictionary.md | 4 +- docs/domain-model.md | 4 +- .../mil-009-exclude-framework-files.md | 2 +- docs/project-plan.md | 4 +- .../reviews/rc-032-exclude-framework-files.md | 87 +++++++++++++++++++ docs/sqa/traceability-matrix.md | 30 +++---- docs/uc-001/dcd.md | 4 +- docs/uc-001/dm.md | 4 +- docs/uc-001/oc.md | 4 +- docs/uc-001/sd.md | 4 +- docs/uc-001/uc.md | 4 +- docs/user-stories.md | 4 +- 15 files changed, 126 insertions(+), 39 deletions(-) create mode 100644 docs/sqa/reviews/rc-032-exclude-framework-files.md diff --git a/docs/artifact-registry.md b/docs/artifact-registry.md index 5cc4abc..0392c0c 100644 --- a/docs/artifact-registry.md +++ b/docs/artifact-registry.md @@ -24,7 +24,7 @@ document of a type. `Primary File` may contain a glob (e.g. | DCD | Design Class Diagram | docs/dcd.md | 004 | | DICT | Domain Dictionary (PO and IT terms) | docs/dictionary.md | 002 | | UCD | Use Case Diagram | docs/use-case-diagram.md | 002 | -| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 032 | +| RC | SQA Review Record | docs/sqa/reviews/rc-*.md | 033 | | TM | Traceability Matrix | docs/sqa/traceability-matrix.md | 002 | ## Languages diff --git a/docs/business-case.md b/docs/business-case.md index a07de50..d858488 100644 --- a/docs/business-case.md +++ b/docs/business-case.md @@ -9,8 +9,8 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | Objective 4: the local project has one remote, origin; no github remote, because a push to origin reaches GitHub through the mirror (MIL-008) | [039a28c] | -| 2026-10-08 | Proposed | Jens Tirsvad Nielsen | S02 | Objective 5 and scope: the installed `.claude`, `.agents` and `AGENTS.md` are excluded from git in the new project (MIL-009) | [08cb484] | +| 2026-10-08 | Deprecated | Jens Tirsvad Nielsen | S02 | Objective 4: the local project has one remote, origin; no github remote, because a push to origin reaches GitHub through the mirror (MIL-008) | [039a28c] | +| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | Objective 5 and scope: the installed `.claude`, `.agents` and `AGENTS.md` are excluded from git in the new project (MIL-009) | [08cb484] | --- diff --git a/docs/dcd.md b/docs/dcd.md index 05f9550..5e90449 100644 --- a/docs/dcd.md +++ b/docs/dcd.md @@ -9,8 +9,8 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | LocalProjectBuilder.build() no longer takes the GitHub repository; a Local Project has one Remote, origin (MIL-008) | [039a28c] | -| 2026-10-08 | Proposed | Jens Tirsvad Nielsen | S02 | FrameworkInstaller.excludeFromGit() and InstallResult.trackedPaths: `.claude`, `.agents` and `AGENTS.md` are excluded from git; UC-001 P15 (MIL-009) | [08cb484] | +| 2026-10-08 | Deprecated | Jens Tirsvad Nielsen | S02 | LocalProjectBuilder.build() no longer takes the GitHub repository; a Local Project has one Remote, origin (MIL-008) | [039a28c] | +| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | FrameworkInstaller.excludeFromGit() and InstallResult.trackedPaths: `.claude`, `.agents` and `AGENTS.md` are excluded from git; UC-001 P15 (MIL-009) | [08cb484] | --- diff --git a/docs/dictionary.md b/docs/dictionary.md index c40273a..97128ca 100644 --- a/docs/dictionary.md +++ b/docs/dictionary.md @@ -9,8 +9,8 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-07 | Accepted | Jens Tirsvad Nielsen | S02 | `ConfigFiles` named as a system concept without a PO term | [0ab5006] | -| 2026-10-08 | Proposed | Jens Tirsvad Nielsen | S02 | Framework Setup and Template: the folders that hold the skills and the copy of AGENTS.md are ignored by git (MIL-009) | [08cb484] | +| 2026-10-07 | Deprecated | Jens Tirsvad Nielsen | S02 | `ConfigFiles` named as a system concept without a PO term | [0ab5006] | +| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | Framework Setup and Template: the folders that hold the skills and the copy of AGENTS.md are ignored by git (MIL-009) | [08cb484] | --- diff --git a/docs/domain-model.md b/docs/domain-model.md index 63edf81..c99cbbd 100644 --- a/docs/domain-model.md +++ b/docs/domain-model.md @@ -9,8 +9,8 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | A Local Project has one Remote, origin, no longer one or two (MIL-008) | [039a28c] | -| 2026-10-08 | Proposed | Jens Tirsvad Nielsen | S02 | Framework Setup and Template: the folders that hold the skills and the copy of AGENTS.md are ignored by git (UC-001, MIL-009) | [08cb484] | +| 2026-10-08 | Deprecated | Jens Tirsvad Nielsen | S02 | A Local Project has one Remote, origin, no longer one or two (MIL-008) | [039a28c] | +| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | Framework Setup and Template: the folders that hold the skills and the copy of AGENTS.md are ignored by git (UC-001, MIL-009) | [08cb484] | --- diff --git a/docs/milestones/mil-009-exclude-framework-files.md b/docs/milestones/mil-009-exclude-framework-files.md index 8fc20b5..02b6e45 100644 --- a/docs/milestones/mil-009-exclude-framework-files.md +++ b/docs/milestones/mil-009-exclude-framework-files.md @@ -9,7 +9,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-08 | Proposed | Jens Tirsvad Nielsen | S02 | Initial version | [08cb484] | +| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | Initial version | [08cb484] | --- diff --git a/docs/project-plan.md b/docs/project-plan.md index c44d82d..ef4153f 100644 --- a/docs/project-plan.md +++ b/docs/project-plan.md @@ -9,8 +9,8 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | Added phase MIL-008 (proposed dates 2026-12-14 to 2026-12-18): the local project has origin as its only remote | [039a28c] | -| 2026-10-08 | Proposed | Jens Tirsvad Nielsen | S02 | Added phase MIL-009 (proposed dates 2026-12-21 to 2026-12-23): the framework files .claude, .agents and AGENTS.md are excluded from git | [08cb484] | +| 2026-10-08 | Deprecated | Jens Tirsvad Nielsen | S02 | Added phase MIL-008 (proposed dates 2026-12-14 to 2026-12-18): the local project has origin as its only remote | [039a28c] | +| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | Added phase MIL-009 (proposed dates 2026-12-21 to 2026-12-23): the framework files .claude, .agents and AGENTS.md are excluded from git | [08cb484] | --- diff --git a/docs/sqa/reviews/rc-032-exclude-framework-files.md b/docs/sqa/reviews/rc-032-exclude-framework-files.md new file mode 100644 index 0000000..16dbb38 --- /dev/null +++ b/docs/sqa/reviews/rc-032-exclude-framework-files.md @@ -0,0 +1,87 @@ +# SQA Review Record: Framework files excluded from git + +## Metadata +| Key | Value | +| --- | --- | +| ID | RC-032 | +| CrossReference | [MIL-009], [QC-MIL-001], [MIL-003], [MIL-005], [BC-001], [US-001], [UC-001], [OC-001], [SD-001], [DCD-001], [DCD-002], [DM-001], [DM-002], [DICT-001], [PP-001] | + +## Version History +| Date | Status | Author | Reviewer | Change | Commit | +| --- | --- | --- | --- | --- | --- | +| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | Initial version: draft for S02's decision | pending | + +--- + +## Artifact Under Review + +- Instance reviewed: [MIL-009], and the changes it causes in [BC-001], [US-001], [UC-001], [OC-001], [SD-001], [DCD-001], [DCD-002], [DM-001], [DM-002], [DICT-001], [PP-001] and [TM-001]. +- Why: a new project gets `.claude` and `.agents` (the framework's skills, made by `install-skills.sh`) and `AGENTS.md` (copied from a framework template). The request is that git excludes these three in the new project after the framework is installed. The phase adds that step, using the `.git/info/exclude` mechanism that [MIL-005] already uses for the project's `.env`. +- Checklist used: [QC-MIL-001] for [MIL-009]. The other artifacts were changed, not created; their change is checked below. +- Review date: 2026-10-08 + +## Checklist Results (QC-MIL-001) + +| # | Criterion | Status | Evidence/Notes | +| --- | --- | --- | --- | +| 1 | A concrete deliverable is defined for every gate | Pass | The script with a new "Git excludes" step that writes `/.claude`, `/.agents` and `/AGENTS.md` to `.git/info/exclude`, shown in the dry-run plan and the summary; the documents that agree with it; the README; the tests; version 0.3.2 and release `v0.3.2`. The cases that are not excluded (framework steps skipped, a tracked path, `framework`, `.gitmodules`, the registry) are stated. | +| 2 | Explicit Go/No-Go criteria are stated for each gate | Pass | Eleven criteria, each with an objective Go and No-Go: ignored and absent from `git status`, only `.git/info/exclude` written, a second run and a file without a final newline, a tracked path, framework steps skipped, paths that must stay visible, dry run and summary, the `.env` exclusion unchanged, the documents in agreement, the acceptance criteria of US-001.03, and the version. Criteria 9 and 10 are "Reviewed by S02" and "Verified", as in [MIL-007] and [MIL-008]. | +| 3 | Dependencies on other milestones are explicitly mapped | Pass | [MIL-003] (the framework, skills and templates steps install the files) and [MIL-005] (the `.git/info/exclude` code is reused), each with its reason. | +| 4 | Each milestone is traceable to a Business Case objective or KPI | Pass | Objective 5 of [BC-001], which this phase extends, and US-001.03. No success criterion fits, so none is cited. | +| 5 | Milestone owner and approving reviewer are identified | Pass | Owner S01, approving reviewer S02. | +| 6 | Milestone has a defined target date consistent with project constraints | Pass | 2026-12-23, proposed in [PP-001]; the window 2026-12-21 (Monday) to 2026-12-23 (Wednesday) follows [MIL-008], which ends Friday 2026-12-18. The Business Case sets no deadline. | + +## Change checks on the other artifacts + +| Artifact | Change | Status | Evidence/Notes | +| --- | --- | --- | --- | +| [BC-001] | Objective 5 and one in-scope item name the exclusion | Pass | The out-of-scope list (no first commit) is consistent: nothing is committed. | +| [US-001] | US-001.03 acceptance criterion; [MIL-009] in the CrossReference and the Traces row | Pass | One given/when/then. No new story: the behavior belongs to the local-project story, so the count of seven stories is unchanged. | +| [UC-001] | Postcondition, step 9, extension 9f, and a rule for step 9 | Pass | The rule fixes the mechanism (`.git/info/exclude`, never `.gitignore`), the whole folders, the paths that stay visible, and a tracked path. | +| [OC-001] | P15 and two exceptions | Pass | P15 is appended, so P1 to P14 and the references to them in [SD-001], [DCD-001] and [DCD-002] still hold. | +| [SD-001] | Self-message `excludeFromGit(localProject)` in `install`, return `installResult (trackedPaths)`, coverage row P15 | Pass | The pattern is the one already used for `requestSync`. Diagram not rendered (see action items). | +| [DCD-001], [DCD-002] | `FrameworkInstaller.excludeFromGit`, `InstallResult.trackedPaths`, the class table, the method traceability and the DTO sentence | Pass | Names and signature match [SD-001]. Diagram not rendered (see action items). | +| [DM-001], [DM-002], [DICT-001] | Definitions of Framework Setup and Template | Pass | No new concept or attribute, as for Credentials File ("ignored by git"). The use-case model, the project model and the dictionary say the same. | +| [PP-001] | Phase [MIL-009], its window, the Gantt, the scope coverage, the dependency chain, "nine phases" and the end date | Pass | Proposed dates 2026-12-21 to 2026-12-23. | +| [TM-001] | Row for [MIL-009] and this record; Last Reviewed updated for each changed artifact | Pass | See the matrix. | + +Mechanical checks run for this review: every link definition of the changed files points at an existing file and none is unused; the Gantt dates fall on the weekdays named above; [MIL-009] has 11 criteria and 5 tasks; `sync-project.sh --milestone MIL-009` parses it (milestone 87, issues #65 to #69 created on Gitea); the new names (`excludeFromGit`, `trackedPaths`, P15) are the same in every document that uses them. + +Not covered by this review: the code, the README and the tests (tasks 2 to 5 of [MIL-009]) do not exist yet. Criteria 1 to 8, 10 and 11 of [MIL-009] are checked at its gate, not here; criterion 9 is checked then too. + +## Consequences S02 accepts with a Go + +- The whole folders `.claude` and `.agents` are excluded, as requested, not only their `skills` folders. Anything else a project keeps there (settings, agents) is not tracked either. +- The entries live in `.git/info/exclude`, which belongs to the clone. A fresh clone has neither the entries nor the files. The skills can be made again with `install-skills.sh`; `AGENTS.md` cannot, because it is a copy of a template that the project edits. + +## Overall Verdict + +Go — every criterion of the checklist passes and the changed documents agree with each other. One check was not done: the PlantUML diagrams of [SD-001], [DCD-001] and [DCD-002] were not rendered, because no PlantUML server is configured and the framework does not choose one. Drafted by Claude Code for S02; the author and reviewer are the same person for now, as in [RC-031]. S02 gave the Go in chat on 2026-10-08, accepted the consequences listed above, and waived the diagram check; the Version History rows of [MIL-009] and the changed documents were set to `Accepted` and the rows before them to `Deprecated`. + +## Action Items + +| Action | Owner | Due | +| --- | --- | --- | +| None. The diagram check was waived by S02 in chat on 2026-10-08; the three diagrams stay unrendered, and a syntax error found later is fixed in the document concerned | - | - | + +--- + +[MIL-009]: ../../milestones/mil-009-exclude-framework-files.md +[QC-MIL-001]: ../../../framework/qc/qc-milestones-gateways.md +[MIL-003]: ../../milestones/mil-003-scaffold-and-release.md +[MIL-005]: ../../milestones/mil-005-credentials.md +[MIL-007]: ../../milestones/mil-007-framework-checklists.md +[MIL-008]: ../../milestones/mil-008-gitea-only-remote.md +[BC-001]: ../../business-case.md +[US-001]: ../../user-stories.md +[UC-001]: ../../uc-001/uc.md +[OC-001]: ../../uc-001/oc.md +[SD-001]: ../../uc-001/sd.md +[DCD-001]: ../../uc-001/dcd.md +[DCD-002]: ../../dcd.md +[DM-001]: ../../uc-001/dm.md +[DM-002]: ../../domain-model.md +[DICT-001]: ../../dictionary.md +[PP-001]: ../../project-plan.md +[TM-001]: ../traceability-matrix.md +[RC-031]: ./rc-031-gitea-only-remote.md diff --git a/docs/sqa/traceability-matrix.md b/docs/sqa/traceability-matrix.md index a2bbd26..5edde5f 100644 --- a/docs/sqa/traceability-matrix.md +++ b/docs/sqa/traceability-matrix.md @@ -9,8 +9,8 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | Added MIL-008 with its review RC-031 (Gitea is the only remote) | [039a28c] | -| 2026-10-08 | Proposed | Jens Tirsvad Nielsen | S02 | Added MIL-009 (framework files excluded from git); not yet reviewed | [08cb484] | +| 2026-10-08 | Deprecated | Jens Tirsvad Nielsen | S02 | Added MIL-009 (framework files excluded from git); not yet reviewed | [08cb484] | +| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | Added review RC-032 (MIL-009: framework files excluded from git), Go | pending | --- @@ -24,9 +24,9 @@ updated whenever an artifact instance is created or reviewed. | Artifact Instance | Type | Upstream (Backward Link) | Downstream (Forward Link) | Last Reviewed (RC-ID) | | --- | --- | --- | --- | --- | -| [BC-001] | BC | - | [SA-001], [PP-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004], [MIL-005], [MIL-006], [MIL-007], [MIL-008], [MIL-009], [US-001], [UCD-001] | [RC-010], [RC-018], [RC-020], [RC-022], [RC-029], [RC-031] | +| [BC-001] | BC | - | [SA-001], [PP-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004], [MIL-005], [MIL-006], [MIL-007], [MIL-008], [MIL-009], [US-001], [UCD-001] | [RC-010], [RC-018], [RC-020], [RC-022], [RC-029], [RC-031], [RC-032] | | [SA-001] | SA | [BC-001] | [UCD-001], [UC-001], [DICT-001] | [RC-013] | -| [PP-001] | PP | [BC-001], [SA-001] | [MIL-001], [MIL-002], [MIL-003], [MIL-004], [MIL-005], [MIL-006], [MIL-007], [MIL-008], [MIL-009] | [RC-012], [RC-018], [RC-020], [RC-022], [RC-031] | +| [PP-001] | PP | [BC-001], [SA-001] | [MIL-001], [MIL-002], [MIL-003], [MIL-004], [MIL-005], [MIL-006], [MIL-007], [MIL-008], [MIL-009] | [RC-012], [RC-018], [RC-020], [RC-022], [RC-031], [RC-032] | | [MIL-001] | MIL | [BC-001], [PP-001] | [US-001] | [RC-011], [RC-016] | | [MIL-002] | MIL | [BC-001], [PP-001] | [US-001] | [RC-014], [RC-017] | | [MIL-003] | MIL | [BC-001], [PP-001] | [US-001] | [RC-015], [RC-017], [RC-031] | @@ -35,10 +35,10 @@ updated whenever an artifact instance is created or reviewed. | [MIL-006] | MIL | [BC-001], [PP-001] | [US-001] | [RC-022] | | [MIL-007] | MIL | [BC-001], [PP-001] | [US-001], [UC-002] | [RC-022], [RC-029], [RC-030] | | [MIL-008] | MIL | [BC-001], [PP-001] | [US-001] | [RC-031] | -| [MIL-009] | MIL | [BC-001], [PP-001] | [US-001] | - | +| [MIL-009] | MIL | [BC-001], [PP-001] | [US-001] | [RC-032] | | [UCD-001] | UCD | [BC-001], [SA-001] | [US-001], [UC-001], [UC-002] | [RC-009], [RC-023] | -| [US-001] | US | [BC-001], [UCD-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004], [MIL-005], [MIL-006], [MIL-007], [MIL-008], [MIL-009] | [UC-001] | [RC-001], [RC-020], [RC-022], [RC-029], [RC-030], [RC-031] | -| [UC-001] | UC | [UCD-001], [US-001], [SA-001] | [SSD-001], [DM-001] | [RC-002], [RC-020], [RC-023], [RC-031] | +| [US-001] | US | [BC-001], [UCD-001], [MIL-001], [MIL-002], [MIL-003], [MIL-004], [MIL-005], [MIL-006], [MIL-007], [MIL-008], [MIL-009] | [UC-001] | [RC-001], [RC-020], [RC-022], [RC-029], [RC-030], [RC-031], [RC-032] | +| [UC-001] | UC | [UCD-001], [US-001], [SA-001] | [SSD-001], [DM-001] | [RC-002], [RC-020], [RC-023], [RC-031], [RC-032] | | [UC-002] | UC | [UCD-001], [US-001], [SA-001], [BC-001] | [SSD-002], [DM-003] | [RC-023], [RC-029], [RC-030] | | [SSD-002] | SSD | [UC-002], [DM-003] | [OC-002] | [RC-024], [RC-029] | | [DM-003] | DM | [UC-002], [UCD-001], [SSD-002], [DICT-001], [DM-001] | [OC-002], [DCD-003] | [RC-025], [RC-029] | @@ -46,13 +46,13 @@ updated whenever an artifact instance is created or reviewed. | [SD-002] | SD | [OC-002], [DCD-003] | [DCD-003] | [RC-027], [RC-029] | | [DCD-003] | DCD | [DM-003], [SD-002], [DICT-001], [UC-002], [DCD-001] | [DCD-002] | [RC-028], [RC-029], [RC-030] | | [SSD-001] | SSD | [UC-001] | [OC-001] | [RC-003], [RC-020] | -| [DM-001] | DM | [UC-001], [SSD-001] | [DM-002], [DICT-001], [OC-001], [DCD-001] | [RC-004], [RC-020], [RC-031] | -| [DM-002] | DM | [DM-001] | [DICT-001], [DCD-001], [DCD-002] | [RC-005], [RC-020], [RC-025], [RC-029], [RC-031] | -| [DICT-001] | DICT | [BC-001], [SA-001], [DM-001], [DM-002] | [OC-001], [SD-001] | [RC-008], [RC-020], [RC-025], [RC-029] | -| [OC-001] | OC | [SSD-001], [DM-001] | [SD-001] | [RC-006], [RC-020], [RC-026], [RC-031] | -| [SD-001] | SD | [OC-001] | [DCD-001] | [RC-007], [RC-020], [RC-021], [RC-031] | -| [DCD-001] | DCD | [UC-001], [DM-001], [DM-002], [OC-001], [SD-001], [DICT-001] | [DCD-002] | [RC-021], [RC-031] | -| [DCD-002] | DCD | [DCD-001], [DCD-003], [DM-002], [DICT-001] | - | [RC-021], [RC-028], [RC-029], [RC-030], [RC-031] | +| [DM-001] | DM | [UC-001], [SSD-001] | [DM-002], [DICT-001], [OC-001], [DCD-001] | [RC-004], [RC-020], [RC-031], [RC-032] | +| [DM-002] | DM | [DM-001] | [DICT-001], [DCD-001], [DCD-002] | [RC-005], [RC-020], [RC-025], [RC-029], [RC-031], [RC-032] | +| [DICT-001] | DICT | [BC-001], [SA-001], [DM-001], [DM-002] | [OC-001], [SD-001] | [RC-008], [RC-020], [RC-025], [RC-029], [RC-032] | +| [OC-001] | OC | [SSD-001], [DM-001] | [SD-001] | [RC-006], [RC-020], [RC-026], [RC-031], [RC-032] | +| [SD-001] | SD | [OC-001] | [DCD-001] | [RC-007], [RC-020], [RC-021], [RC-031], [RC-032] | +| [DCD-001] | DCD | [UC-001], [DM-001], [DM-002], [OC-001], [SD-001], [DICT-001] | [DCD-002] | [RC-021], [RC-031], [RC-032] | +| [DCD-002] | DCD | [DCD-001], [DCD-003], [DM-002], [DICT-001] | - | [RC-021], [RC-028], [RC-029], [RC-030], [RC-031], [RC-032] | ## Coverage Notes @@ -87,6 +87,7 @@ updated whenever an artifact instance is created or reviewed. [RC-029]: ./reviews/rc-029-default-config-files.md [RC-030]: ./reviews/rc-030-env-optional.md [RC-031]: ./reviews/rc-031-gitea-only-remote.md +[RC-032]: ./reviews/rc-032-exclude-framework-files.md [DCD-001]: ../uc-001/dcd.md [DCD-002]: ../dcd.md [UCD-001]: ../use-case-diagram.md @@ -121,5 +122,4 @@ updated whenever an artifact instance is created or reviewed. [RC-015]: ./reviews/rc-015-mil-003.md [RC-016]: ./reviews/rc-016-create-project-sh.md [RC-017]: ./reviews/rc-017-e2e-security-review.md -[039a28c]: https://git.tirsystem.com/TirSystem-BashScript/repo_foundry/commit/039a28c01b56f8cf0af73f55d1a604b43d67ba03 [08cb484]: https://git.tirsystem.com/TirSystem-BashScript/RepoFoundry/commit/08cb484498bab3d9480decda9df89e9564438185 diff --git a/docs/uc-001/dcd.md b/docs/uc-001/dcd.md index ee0dbf0..b1c710d 100644 --- a/docs/uc-001/dcd.md +++ b/docs/uc-001/dcd.md @@ -9,8 +9,8 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | LocalProjectBuilder.build() no longer takes the GitHub repository; a Local Project has one Remote, origin (MIL-008) | [039a28c] | -| 2026-10-08 | Proposed | Jens Tirsvad Nielsen | S02 | FrameworkInstaller.excludeFromGit() and InstallResult.trackedPaths: `.claude`, `.agents` and `AGENTS.md` are excluded from git; P15 (MIL-009) | [08cb484] | +| 2026-10-08 | Deprecated | Jens Tirsvad Nielsen | S02 | LocalProjectBuilder.build() no longer takes the GitHub repository; a Local Project has one Remote, origin (MIL-008) | [039a28c] | +| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | FrameworkInstaller.excludeFromGit() and InstallResult.trackedPaths: `.claude`, `.agents` and `AGENTS.md` are excluded from git; P15 (MIL-009) | [08cb484] | --- diff --git a/docs/uc-001/dm.md b/docs/uc-001/dm.md index d3d973e..bffd694 100644 --- a/docs/uc-001/dm.md +++ b/docs/uc-001/dm.md @@ -9,8 +9,8 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | A Local Project has one Remote, origin, no longer one or two (MIL-008) | [039a28c] | -| 2026-10-08 | Proposed | Jens Tirsvad Nielsen | S02 | Framework Setup and Template: the folders that hold the skills and the copy of AGENTS.md are ignored by git (MIL-009) | [08cb484] | +| 2026-10-08 | Deprecated | Jens Tirsvad Nielsen | S02 | A Local Project has one Remote, origin, no longer one or two (MIL-008) | [039a28c] | +| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | Framework Setup and Template: the folders that hold the skills and the copy of AGENTS.md are ignored by git (MIL-009) | [08cb484] | --- diff --git a/docs/uc-001/oc.md b/docs/uc-001/oc.md index eca0476..4f4d23a 100644 --- a/docs/uc-001/oc.md +++ b/docs/uc-001/oc.md @@ -9,8 +9,8 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | P9: no other remote is associated with the local project (MIL-008) | [039a28c] | -| 2026-10-08 | Proposed | Jens Tirsvad Nielsen | S02 | P15 and two exceptions: `.claude`, `.agents` and `AGENTS.md` are excluded from git; a tracked path is reported (MIL-009) | [08cb484] | +| 2026-10-08 | Deprecated | Jens Tirsvad Nielsen | S02 | P9: no other remote is associated with the local project (MIL-008) | [039a28c] | +| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | P15 and two exceptions: `.claude`, `.agents` and `AGENTS.md` are excluded from git; a tracked path is reported (MIL-009) | [08cb484] | --- diff --git a/docs/uc-001/sd.md b/docs/uc-001/sd.md index 0c04b2f..714b0d6 100644 --- a/docs/uc-001/sd.md +++ b/docs/uc-001/sd.md @@ -9,8 +9,8 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | build() no longer receives the GitHub repository and returns a local project with the remote origin; P9 (MIL-008) | [039a28c] | -| 2026-10-08 | Proposed | Jens Tirsvad Nielsen | S02 | install() excludes the installed files from git with excludeFromGit() and returns the tracked paths; P15 (MIL-009) | [08cb484] | +| 2026-10-08 | Deprecated | Jens Tirsvad Nielsen | S02 | build() no longer receives the GitHub repository and returns a local project with the remote origin; P9 (MIL-008) | [039a28c] | +| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | install() excludes the installed files from git with excludeFromGit() and returns the tracked paths; P15 (MIL-009) | [08cb484] | --- diff --git a/docs/uc-001/uc.md b/docs/uc-001/uc.md index ff915cb..f80cd35 100644 --- a/docs/uc-001/uc.md +++ b/docs/uc-001/uc.md @@ -9,8 +9,8 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | Postcondition, step 8 and its rule: origin is the only remote; no github remote (MIL-008) | [039a28c] | -| 2026-10-08 | Proposed | Jens Tirsvad Nielsen | S02 | Postcondition, step 9, extension 9f and a rule: `.claude`, `.agents` and `AGENTS.md` are excluded from git (MIL-009) | [08cb484] | +| 2026-10-08 | Deprecated | Jens Tirsvad Nielsen | S02 | Postcondition, step 8 and its rule: origin is the only remote; no github remote (MIL-008) | [039a28c] | +| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | Postcondition, step 9, extension 9f and a rule: `.claude`, `.agents` and `AGENTS.md` are excluded from git (MIL-009) | [08cb484] | --- diff --git a/docs/user-stories.md b/docs/user-stories.md index 02c1f0c..1b04d1f 100644 --- a/docs/user-stories.md +++ b/docs/user-stories.md @@ -9,8 +9,8 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | US-001.03: one remote, origin; no github remote (MIL-008) | [039a28c] | -| 2026-10-08 | Proposed | Jens Tirsvad Nielsen | S02 | US-001.03: `.claude`, `.agents` and `AGENTS.md` are excluded from git; MIL-009 added to CrossReference | [08cb484] | +| 2026-10-08 | Deprecated | Jens Tirsvad Nielsen | S02 | US-001.03: one remote, origin; no github remote (MIL-008) | [039a28c] | +| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | US-001.03: `.claude`, `.agents` and `AGENTS.md` are excluded from git; MIL-009 added to CrossReference | [08cb484] | --- -- 2.54.0 From 4058ab4e3ef057c21ff7c27287645a47df28a65f Mon Sep 17 00:00:00 2001 From: Jens Tirsvad Nielsen Date: Thu, 8 Oct 2026 14:06:37 +0800 Subject: [PATCH 2/3] Exclude .claude, .agents and AGENTS.md from git in the new project After the templates are copied, create-project.sh adds /.claude, /.agents and /AGENTS.md to .git/info/exclude of the new project as its own step, "Git excludes". No .gitignore or tracked file changes and nothing is committed. The step is skipped when the framework steps are skipped, and a path git already tracks stays tracked and is named in the step. The .git/info/exclude code of exclude_env_file moves into the shared helper exclude_from_git (git.sh), which both now use; the .env behavior is unchanged. Refs #66 Task: MIL-009#2 --- src/lib/apply.sh | 1 + src/lib/constants.sh | 6 +++++- src/lib/envfile.sh | 15 ++------------- src/lib/framework.sh | 38 +++++++++++++++++++++++++++++++++++++- src/lib/git.sh | 36 +++++++++++++++++++++++++++++++++++- src/lib/plan.sh | 1 + 6 files changed, 81 insertions(+), 16 deletions(-) diff --git a/src/lib/apply.sh b/src/lib/apply.sh index e823b56..3d21b0b 100644 --- a/src/lib/apply.sh +++ b/src/lib/apply.sh @@ -19,6 +19,7 @@ create_all() { add_framework install_framework copy_templates + exclude_framework_files create_env_file } diff --git a/src/lib/constants.sh b/src/lib/constants.sh index d5775dd..5fc95aa 100644 --- a/src/lib/constants.sh +++ b/src/lib/constants.sh @@ -30,8 +30,12 @@ readonly HINT_LICENSE="use a Gitea license key (letters, digits, '.', '+' or '-' readonly HINT_DIRECTORY="must not be empty, start with '-' or contain control characters" readonly HINT_TOKEN="8 to 255 letters, digits or _ . ~ + / = -" readonly ENV_FILE_NAME=".env" +# What the framework installs into the new project that git must not list: the +# folders of the skills and the copy of AGENTS.md, anchored to the project +# root. They go into .git/info/exclude of the new project. +readonly FRAMEWORK_EXCLUDES=(/.claude /.agents /AGENTS.md) readonly PLAN_STEPS=("GitHub repository" "Gitea repository" "Push mirror" - "Local project" "Framework" "Skills and hooks" "Templates" "Project .env") + "Local project" "Framework" "Skills and hooks" "Templates" "Git excludes" "Project .env") # shellcheck disable=SC2034 # read through namerefs (parse_env_file) readonly CONFIG_KEYS=(GITHUB_API_URL GITHUB_WEB_URL GITEA_URL GITEA_API_URL GITEA_SSH_PORT MIRROR_INTERVAL FRAMEWORK_REPO diff --git a/src/lib/envfile.sh b/src/lib/envfile.sh index f2b67eb..d67c40e 100644 --- a/src/lib/envfile.sh +++ b/src/lib/envfile.sh @@ -26,19 +26,8 @@ env_file_key_list() { # file: the entry goes into .git/info/exclude, which is never committed. It # does nothing when .env is already ignored. exclude_env_file() { - local dir="$1" gitdir exclude - if git_project "$dir" check-ignore -q -- "$ENV_FILE_NAME"; then - return 0 - fi - gitdir="$(git_project "$dir" rev-parse --absolute-git-dir)" - exclude="$gitdir/info/exclude" - mkdir -p -- "$gitdir/info" - # Start on a fresh line when the file does not end with one. - if [[ -s $exclude && -n "$(tail -c 1 -- "$exclude")" ]]; then - printf '\n' >>"$exclude" - fi - printf '%s\n' "# RepoFoundry: the credentials file of this project" "$ENV_FILE_NAME" >>"$exclude" - git_project "$dir" check-ignore -q -- "$ENV_FILE_NAME" || + local dir="$1" + exclude_from_git "$dir" "RepoFoundry: the credentials file of this project" "$ENV_FILE_NAME" || die "could not make git ignore $ENV_FILE_NAME in $dir; nothing was written to it" } diff --git a/src/lib/framework.sh b/src/lib/framework.sh index ee25452..f0d1d56 100644 --- a/src/lib/framework.sh +++ b/src/lib/framework.sh @@ -4,7 +4,7 @@ # # Part of create-project.sh: sourced by it, never run on its own. # -# Provides: is_framework_skipped, init_framework_submodules, add_framework, run_framework_script, install_skills, install_hooks, install_framework, copy_template, copy_templates +# Provides: is_framework_skipped, init_framework_submodules, add_framework, run_framework_script, install_skills, install_hooks, install_framework, copy_template, copy_templates, exclude_framework_files # is_framework_skipped: succeed when the framework steps are left out because # SSH to Gitea is not available (the Maintainer agreed to that). @@ -165,3 +165,39 @@ copy_templates() { notes="$notes; ${STATE[template_note]}" finish_step "$label" "created" "($notes)" } + +# exclude_framework_files: make git ignore .claude, .agents and AGENTS.md in +# the new project, through its .git/info/exclude (never .gitignore, so no +# tracked file changes and nothing is committed). Only when the framework +# steps ran. A path git already tracks stays tracked: an exclusion does not +# apply to it, so the step names it. +exclude_framework_files() { + local label="Git excludes" dir="${PROJECT[directory]}" entry path tracked=() note written + if is_framework_skipped; then + finish_step "$label" "skipped" "(no SSH access to Gitea)" + return 0 + fi + begin_step "$label" + exclude_from_git "$dir" "RepoFoundry: the files installed from the framework" "${FRAMEWORK_EXCLUDES[@]}" || + die "could not make git ignore the framework files in $dir; check $dir/.git/info/exclude" + written="$REPLY" + for entry in "${FRAMEWORK_EXCLUDES[@]}"; do + path="${entry#/}" + if [[ -n "$(git_project "$dir" ls-files -- "$path")" ]]; then + tracked+=("$path") + fi + done + if ((written == 0)); then + note="${FRAMEWORK_EXCLUDES[*]} already excluded" + else + note="${FRAMEWORK_EXCLUDES[*]} added to .git/info/exclude" + fi + if ((${#tracked[@]})); then + note="$note; git tracks ${tracked[*]}, so it is not ignored" + fi + if ((written == 0)); then + finish_step "$label" "reused" "($note)" + else + finish_step "$label" "created" "($note)" + fi +} diff --git a/src/lib/git.sh b/src/lib/git.sh index e952674..176bd30 100644 --- a/src/lib/git.sh +++ b/src/lib/git.sh @@ -4,7 +4,7 @@ # # Part of create-project.sh: sourced by it, never run on its own. # -# Provides: git_project, fetch_origin +# Provides: git_project, exclude_from_git, fetch_origin # git_project DIR ARGS...: run git in DIR. Prompts are switched off and stdin # is closed (git must not eat the answers meant for later prompts), so a @@ -16,6 +16,40 @@ git_project() { git -C "$dir" "$@" >"$exclude" + fi + printf '%s\n' "# $comment" "${missing[@]}" >>"$exclude" + for entry in "${missing[@]}"; do + path="${entry#/}" + git_project "$dir" check-ignore --no-index -q -- "${path%/}" || return 1 + done +} + # fetch_origin DIR: fetch the Gitea repository into the project. Over SSH the # user's key is used. Over HTTPS the token reaches git through a private # GIT_ASKPASS helper and the environment of this one command: it is never part diff --git a/src/lib/plan.sh b/src/lib/plan.sh index 0c2d81b..f8fffad 100644 --- a/src/lib/plan.sh +++ b/src/lib/plan.sh @@ -51,6 +51,7 @@ print_plan() { say "$(printf ' %-18s: %s' "Framework" "add $(framework_url) as a submodule")" say "$(printf ' %-18s: %s' "Skills and hooks" "install once; plan gate $(yes_no "${PROJECT[is_plan_gate_enabled]}")")" say "$(printf ' %-18s: %s' "Templates" "AGENTS.md and docs/artifact-registry.md (you are asked before a file is replaced)")" + say "$(printf ' %-18s: %s' "Git excludes" "${FRAMEWORK_EXCLUDES[*]} go into .git/info/exclude (no tracked file changes)")" else say "$(printf ' %-18s: %s' "Framework" "NOT possible without SSH to Gitea; you will be asked whether to go on without it")" fi -- 2.54.0 From c379dd4d7577e4df8ad72aae6499524c008b2bec Mon Sep 17 00:00:00 2001 From: Jens Tirsvad Nielsen Date: Thu, 8 Oct 2026 14:06:46 +0800 Subject: [PATCH 3/3] Resolve pending commit links for RC-032 --- docs/sqa/reviews/rc-032-exclude-framework-files.md | 3 ++- docs/sqa/traceability-matrix.md | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/docs/sqa/reviews/rc-032-exclude-framework-files.md b/docs/sqa/reviews/rc-032-exclude-framework-files.md index 16dbb38..587fedd 100644 --- a/docs/sqa/reviews/rc-032-exclude-framework-files.md +++ b/docs/sqa/reviews/rc-032-exclude-framework-files.md @@ -9,7 +9,7 @@ ## Version History | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | -| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | Initial version: draft for S02's decision | pending | +| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | Initial version: draft for S02's decision | [1b1b6be] | --- @@ -85,3 +85,4 @@ Go — every criterion of the checklist passes and the changed documents agree w [PP-001]: ../../project-plan.md [TM-001]: ../traceability-matrix.md [RC-031]: ./rc-031-gitea-only-remote.md +[1b1b6be]: https://git.tirsystem.com/TirSystem-BashScript/RepoFoundry/commit/1b1b6bec2effe5f566479ef94fcc5bc73a9fd609 diff --git a/docs/sqa/traceability-matrix.md b/docs/sqa/traceability-matrix.md index 5edde5f..fc933e8 100644 --- a/docs/sqa/traceability-matrix.md +++ b/docs/sqa/traceability-matrix.md @@ -10,7 +10,7 @@ | Date | Status | Author | Reviewer | Change | Commit | | --- | --- | --- | --- | --- | --- | | 2026-10-08 | Deprecated | Jens Tirsvad Nielsen | S02 | Added MIL-009 (framework files excluded from git); not yet reviewed | [08cb484] | -| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | Added review RC-032 (MIL-009: framework files excluded from git), Go | pending | +| 2026-10-08 | Accepted | Jens Tirsvad Nielsen | S02 | Added review RC-032 (MIL-009: framework files excluded from git), Go | [1b1b6be] | --- @@ -123,3 +123,4 @@ updated whenever an artifact instance is created or reviewed. [RC-016]: ./reviews/rc-016-create-project-sh.md [RC-017]: ./reviews/rc-017-e2e-security-review.md [08cb484]: https://git.tirsystem.com/TirSystem-BashScript/RepoFoundry/commit/08cb484498bab3d9480decda9df89e9564438185 +[1b1b6be]: https://git.tirsystem.com/TirSystem-BashScript/RepoFoundry/commit/1b1b6bec2effe5f566479ef94fcc5bc73a9fd609 -- 2.54.0