From 9df8659c6b6e9f2855b724f54870f42f0d877ce1 Mon Sep 17 00:00:00 2001 From: Jonas Bengtsson Date: Sat, 12 Sep 2026 09:53:44 +0200 Subject: [PATCH] =?UTF-8?q?=F0=9F=93=9D=20Update=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) diff --git a/README.md b/README.md index ca34817..906d0fd 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,72 @@ See [`config/example.yaml`](config/example.yaml). Configuration is YAML; deployment-specific values can be overridden through environment variables using the `GIT_AUTO_TRACKER_
__` convention. +## Specification status + +Progress against `functional specification.md` (FR-001 – FR-029). The v1 +scope is defined by Section 44, *Definition of Done – Initial Release*. + +### Implemented + +- [x] Inspect an existing Git repository (FR-001) +- [x] Detect added, modified and deleted files (FR-002 – FR-004) +- [x] Rename detection via the add+delete fallback (FR-005, Section 6.1) +- [x] Configurable author resolver chain with confidence levels and `UNKNOWN` fallback; sidecar metadata resolver implemented (FR-006, FR-007, Sections 9 – 11) +- [x] Per-file attribution in the commit message (FR-008, FR-012) +- [x] Automatic commit generation (FR-009) +- [x] Structured commit message: summary counts, per-file details, `Tracker-*` trailers (FR-010, FR-011, Sections 15/16/36) +- [x] No empty commits (FR-014) +- [x] Rotating application logs, console + file (FR-015, Sections 22 – 23) +- [x] Cross-platform code base: `pathlib`, argument arrays, UTF-8/NUL-safe Git parsing (FR-016, FR-029) +- [x] Dry-run mode (FR-017, Section 31) +- [x] YAML configuration with environment overrides (FR-018, Section 26) +- [x] Include/exclude file filters with gitignore-style `**` globs (FR-019, Section 7) +- [x] Repository lock with stale-lock recovery, stored outside the repository (FR-020, FR-028, Section 21) +- [x] Author-resolution errors never block an otherwise valid commit (FR-021) +- [x] Git / repository integrity errors prevent the commit; index restored on failure (FR-022, Section 14) +- [x] One atomic commit per collection cycle (FR-023) +- [x] Forbidden-file abort with dedicated security exit code (FR-024, FR-027, Section 33) +- [x] Index-state validation: pre-existing staged changes / unfinished merge abort (FR-026, Section 5.1) +- [x] Exit codes 0 – 7 for external monitoring (Section 25) +- [x] CLI: `run` / `status` / `validate` / `config` with secret redaction (Section 30) +- [x] ULID run identifiers for log/commit traceability (Section 35) +- [x] Commit author is the tracker service identity, engineers recorded per file (Section 17/18/43) + +### Left to do + +Required by the specification (v1 gaps): + +- [ ] Concurrent-modification detection (FR-025, Section 20) – snapshot helpers exist in `git/status.py` but are not wired into collection; add before/after attribute checks (size / mtime / optional hash) with abort-on-change policy +- [ ] Honor `application.timezone` in log and commit-message timestamps (Sections 22, 26); add the timezone test from Section 41 +- [ ] Log execution duration per collection (Section 22) +- [ ] `validate`: also verify file access (Section 30) +- [ ] `status`: apply include/exclude filters and preview author resolution (Section 30) +- [ ] Configurable alternative policy for pre-existing staged changes: commit with `UNKNOWN` attribution (Section 5.1) +- [ ] Configurable alternative to skip (instead of abort on) forbidden files (Section 33) +- [ ] Native rename detection instead of the add+delete fallback (FR-005 "should", Section 6.1) +- [ ] Missing tests (Section 41): failed commit, unavailable Git executable, inaccessible file, file removed during collection, macOS in the CI matrix + +Blocked on SCADA platform knowledge: + +- [ ] SCADA metadata resolver – embedded project metadata (Section 10) +- [ ] SCADA audit-log resolver (Section 10) +- [ ] Operating-system audit resolver (Section 10, optional) + +Optional / future extensions (Section 42, "may be added later"): + +- [ ] Scheduled service mode (Section 4.2) +- [ ] Remote push with `COMMIT_SUCCESS` / `PUSH_FAILURE` distinction (Section 34) +- [ ] Signed Git commits +- [ ] SCADA semantic / XML-aware / JSON-aware comparison +- [ ] Proprietary SCADA project parsers +- [ ] Automatic reports, REST API, web interface, Grafana integration +- [ ] Email/Teams notifications +- [ ] Change approval workflow, correlation with maintenance/change requests +- [ ] Active Directory integration +- [ ] Cryptographic file hashes +- [ ] IEC/ISO 81346 asset mapping +- [ ] Detection of changes outside approved maintenance windows + ## Development ```bash