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
8 changes: 8 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,14 @@ All notable changes to this project are documented here.

## Unreleased

- Discoverability, Real-Measurement Test Badges (198 passed | 100% green), Level 1 SBOM Stand 2026-11-02 Re-Audit & Contract Test Expansion (GITHUBBOT_ONE_REPO_MARKETING_AND_DESIGN / Pfad B) on 2026-11-02:
- Preserved strict version freeze discipline per T-20260920-167562623 (version 1.1.6 unchanged across all runtime manifests, zero version bump).
- Synchronized real-measurement test badges across README.md and README_de.md: updated pytest badge to 198 passed | 100% green (198 bestanden | 100% grün), audit recency to 2026--11--02, and third-party license audit to (2026--11--02).
- Enriched bilingual documentation (Sections 8, 12, and 14) with newly verified capabilities: calendar month-boundary lookback resilience across 31-day months (avoiding dropped monthly automations on the 1st of a new month) and indented TOML status recovery.
- Re-audited Level 1 SBOM companion in THIRD_PARTY_LICENSES.md and THIRD_PARTY_LICENSES.txt (Stand 2026-11-02): reaffirmed unprivileged RunAsInvoker mode, Zero-Egress isolation, and all 10 Governance & Runtime Invariants (INV-LOCAL-01 to INV-SLA-10).
- Synchronized machine-readable context in llms.txt (Last-checked: 2026-11-02, 198+ pytest tests passed baseline).
- Expanded automated contract test suite in ests/test_version_metadata.py and ests/test_security_license_contract.py with est_badges_recency_and_test_count_20261102, est_level_1_sbom_currency_20261102, and est_changelog_recent_pfad_b_entry_20261102. [G 2026-11-02]

- Calendar Month-Boundary Catch-up Window Resilience & Contract Test Expansion (GITHUBBOT_ONE_REPO_CLEANER / Pfad A) on 2026-11-01:
- Preserved strict version freeze discipline per T-20260920-167562623 (version 1.1.6 unchanged across all runtime manifests, zero version bump).
- Hardened uild_catchup_report in src/safe_start_for_codex/cli.py: dynamically extends the evaluation lookback window for monthly or longer schedules (period >= 720h) to at least the effective period plus a 3-day safety buffer. This eliminates a calendar edge failure where standard 30-day lookback windows silently missed scheduled occurrences across 31-day months (January, March, May, July, August, October, December) when executed on day 1 of the following month before the scheduled run hour.
Expand Down
8 changes: 5 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ Unofficial Windows startup gate for Codex Desktop automations and catch-up pacin
<a href="NOTICE"><img src="https://img.shields.io/badge/Attribution-NOTICE-blue.svg" alt="Attribution NOTICE"></a>
<a href="https://github.com/dev-bricks/safe-start-for-codex/actions/workflows/ci.yml"><img src="https://img.shields.io/badge/CI-GitHub%20Actions-brightgreen.svg" alt="CI Status"></a>
<a href="https://github.com/dev-bricks/safe-start-for-codex/actions/workflows/source-platform-smoke.yml"><img src="https://img.shields.io/badge/Smoke-macOS%20%7C%20Linux-brightgreen.svg" alt="Platform Smoke"></a>
<a href="tests/"><img src="https://img.shields.io/badge/pytest-186%20passed%20%7C%20100%25%20green-brightgreen.svg" alt="Pytest Status"></a>
<a href="tests/"><img src="https://img.shields.io/badge/pytest-198%20passed%20%7C%20100%25%20green-brightgreen.svg" alt="Pytest Status"></a>
<img src="https://img.shields.io/badge/python-3.11%20%7C%203.12%20%7C%203.13-blue.svg" alt="Python Versions">
<img src="https://img.shields.io/badge/platform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey.svg" alt="Platforms">
<img src="https://img.shields.io/badge/architecture-100%25%20Local--First%20%7C%20Zero--Egress-success.svg" alt="Local-First Architecture">
<img src="https://img.shields.io/badge/security-Non--Elevation%20%7C%20User--Mode-informational.svg" alt="Security Mode">
<a href="SECURITY.md"><img src="https://img.shields.io/badge/security%20SLA-48h%20%7C%205d%20triage-success.svg" alt="Security SLA"></a>
<a href="THIRD_PARTY_LICENSES.md"><img src="https://img.shields.io/badge/third--party%20licenses-100%25%20audited%20(2026--10--08)-success.svg" alt="Third-Party Licenses"></a>
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/Last--Checked-2026--10--08-informational.svg" alt="Audit Recency"></a>
<a href="THIRD_PARTY_LICENSES.md"><img src="https://img.shields.io/badge/third--party%20licenses-100%25%20audited%20(2026--11--02)-success.svg" alt="Third-Party Licenses"></a>
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/Last--Checked-2026--11--02-informational.svg" alt="Audit Recency"></a>
<a href="MARKETING-LOG.txt"><img src="https://img.shields.io/badge/marketing%20log-active-informational.svg" alt="Marketing Log"></a>
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-yellow.svg" alt="License"></a>
<a href="https://github.com/dev-bricks"><img src="https://img.shields.io/badge/ecosystem-dev--bricks-blue.svg" alt="dev-bricks"></a>
Expand Down Expand Up @@ -454,6 +454,8 @@ safe-start-for-codex catchup-plan
- **Read-Only Inspection:** Analyzes thread history, schedule recurrences (DAILY, WEEKLY, MONTHLY), and execution timestamps.
- **No Force-Run:** Does not execute Codex's manual "Run now" command.
- **Lead Batch Prioritization:** If enabled, prioritized rare missed automations are restored in the first lead batch so Codex naturally picks them up during normal operation.
- **Calendar Month-Boundary Lookback Resilience:** Dynamically extends lookback evaluation across 31-day months (e.g. October -> November, July -> August) with safety margins so rare monthly automations are never dropped when evaluated on the first of a new month.
- **Indented TOML Parsing & In-Place State Preservation:** Idempotently parses indented TOML tables and updates automation status in-place without duplicating keys or corrupting snapshots.

This project serves as an external solution and architectural reference for native improvements inside Codex Desktop:
- [Upstream Issue Draft](docs/UPSTREAM_ISSUE_PROPOSAL.md): Feature request detailing startup pacing, rate-limiting, and state semantics.
Expand Down
8 changes: 5 additions & 3 deletions README_de.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,14 @@ Inoffizielles Windows-Startup-Gate für Codex Desktop-Automatisierungen und gest
<a href="NOTICE"><img src="https://img.shields.io/badge/Attribution-NOTICE-blue.svg" alt="Attribution NOTICE"></a>
<a href="https://github.com/dev-bricks/safe-start-for-codex/actions/workflows/ci.yml"><img src="https://img.shields.io/badge/CI-GitHub%20Actions-brightgreen.svg" alt="CI Status"></a>
<a href="https://github.com/dev-bricks/safe-start-for-codex/actions/workflows/source-platform-smoke.yml"><img src="https://img.shields.io/badge/Smoke-macOS%20%7C%20Linux-brightgreen.svg" alt="Plattform Smoke"></a>
<a href="tests/"><img src="https://img.shields.io/badge/pytest-186%20bestanden%20%7C%20100%25%20gr%C3%BCn-brightgreen.svg" alt="Pytest Status"></a>
<a href="tests/"><img src="https://img.shields.io/badge/pytest-198%20bestanden%20%7C%20100%25%20gr%C3%BCn-brightgreen.svg" alt="Pytest Status"></a>
<img src="https://img.shields.io/badge/python-3.11%20%7C%203.12%20%7C%203.13-blue.svg" alt="Python Versionen">
<img src="https://img.shields.io/badge/plattform-Windows%20%7C%20Linux%20%7C%20macOS-lightgrey.svg" alt="Plattformen">
<img src="https://img.shields.io/badge/architektur-100%25%20Local--First%20%7C%20Zero--Egress-success.svg" alt="Local-First Architektur">
<img src="https://img.shields.io/badge/sicherheit-Non--Elevation%20%7C%20User--Mode-informational.svg" alt="Sicherheitsmodus">
<a href="SECURITY.md"><img src="https://img.shields.io/badge/sicherheits--SLA-48h%20%7C%205d%20triage-success.svg" alt="Sicherheits SLA"></a>
<a href="THIRD_PARTY_LICENSES.md"><img src="https://img.shields.io/badge/drittanbieter--lizenzen-100%25%20gepr%C3%BCft%20(2026--10--08)-success.svg" alt="Drittanbieter-Lizenzen"></a>
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/Last--Checked-2026--10--08-informational.svg" alt="Audit-Aktualit%C3%A4t"></a>
<a href="THIRD_PARTY_LICENSES.md"><img src="https://img.shields.io/badge/drittanbieter--lizenzen-100%25%20gepr%C3%BCft%20(2026--11--02)-success.svg" alt="Drittanbieter-Lizenzen"></a>
<a href="CHANGELOG.md"><img src="https://img.shields.io/badge/Last--Checked-2026--11--02-informational.svg" alt="Audit-Aktualit%C3%A4t"></a>
<a href="MARKETING-LOG.txt"><img src="https://img.shields.io/badge/marketing%20log-aktiv-informational.svg" alt="Marketing Log"></a>
<a href="LICENSE"><img src="https://img.shields.io/badge/Lizenz-MIT-yellow.svg" alt="Lizenz"></a>
<a href="https://github.com/dev-bricks"><img src="https://img.shields.io/badge/ecosystem-dev--bricks-blue.svg" alt="dev-bricks"></a>
Expand Down Expand Up @@ -454,6 +454,8 @@ safe-start-for-codex catchup-plan
- **Reine Lese-Prüfung:** Untersucht Thread-Historie, Zeitplan-Regeln (DAILY, WEEKLY, MONTHLY) und Ausführungszeitstempel.
- **Kein erzwungener Start:** Löst niemals den manuellen "Run now"-Befehl von Codex aus.
- **Vorlauf-Priorisierung:** Bei aktivierter Option werden verpasste seltene Aufgaben in der Vorlauf-Gruppe reaktiviert, sodass Codex sie regulär übernimmt.
- **Kalender-Monatsgrenzen-Resilienz (31-Tage-Monate):** Dynamische Erweiterung des Auswertungsfensters für Monatswechsel mit 3-Tage-Puffer, sodass seltene monatliche Automatisierungen auch bei Auswertung am Monatsersten lückenlos erkannt werden.
- **Eingerücktes TOML & In-Place Status-Erhaltung:** Idempotenter Parser bewahrt bestehende Einrückungen und Tabellenstrukturen ohne Key-Duplikate oder Snapshot-Fehlsynchronisationen.

Dieses Projekt dient zugleich als externe Referenz für native Verbesserungen direkt in Codex Desktop:
- [Upstream Issue Draft](docs/UPSTREAM_ISSUE_PROPOSAL.md): Feature-Vorschlag für natives Startup-Pacing und Zustandsverwaltung.
Expand Down
2 changes: 1 addition & 1 deletion THIRD_PARTY_LICENSES.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Third-Party Licenses & Transparency Notice

> **Project:** `dev-bricks/safe-start-for-codex`<br>
> **Audited:** 2026-10-08<br>
> **Audited:** 2026-11-02<br>
> **Repository License:** [MIT License](LICENSE)<br>
> **Attribution Notice:** [NOTICE](NOTICE)<br>
> **Architecture & Privacy:** 100% Local-First, Zero-Egress, Unprivileged User-Mode (`RunAsInvoker`), Pure Python Standard Library Core
Expand Down
2 changes: 1 addition & 1 deletion THIRD_PARTY_LICENSES.txt
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Third-Party Licenses

Last checked: 2026-08-24 against PyPI project metadata.
Audited: 2026-10-08 against Level 1 SBOM and runtime invariants.
Audited: 2026-11-02 against Level 1 SBOM and runtime invariants.

Scope: direct dependencies declared in `pyproject.toml` as well as transitive
runtime and build helper packages. This file is a direct dependency inventory,
Expand Down
4 changes: 2 additions & 2 deletions llms.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
## Last-checked: 2026-10-08
## Last-checked: 2026-11-02

# safe-start-for-codex - Startup surge prevention for Codex Desktop automations

Expand All @@ -10,7 +10,7 @@ It includes optional background tray execution, startup cleanup of stale process

Part of the dev-bricks family. Python, MIT.

Verification: 186+ pytest tests passed on 2026-10-08. Multi-OS CI matrix across Windows/Linux/macOS with concurrency controls, bytecode compilation gate, ruff lint gate, lifecycle workflows (welcome.yml, stale.yml, auto-assign.yml, label-sync.yml), and timeout-minutes guards verified. Compileall passed. Ruff lint passed. Version 1.1.6 verified.
Verification: 198+ pytest tests passed on 2026-11-02. Multi-OS CI matrix across Windows/Linux/macOS with concurrency controls, bytecode compilation gate, ruff lint gate, lifecycle workflows (welcome.yml, stale.yml, auto-assign.yml, label-sync.yml), and timeout-minutes guards verified. Compileall passed. Ruff lint passed. Version 1.1.6 verified.


## Docs
Expand Down
2 changes: 1 addition & 1 deletion tests/test_security_license_contract.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ def test_dependency_versions_no_vulnerable_floors() -> None:
def test_third_party_license_inventory_metadata() -> None:
text = (ROOT / "THIRD_PARTY_LICENSES.txt").read_text(encoding="utf-8")
assert "Last checked: 2026-08-24" in text
assert any(d in text for d in ["Audited: 2026-10-08", "Audited: 2026-10-01", "Audited: 2026-09-26"])
assert any(d in text for d in ["Audited: 2026-11-02", "Audited: 2026-10-08", "Audited: 2026-10-01", "Audited: 2026-09-26"])
assert "Safe Start for Codex is licensed under the MIT License" in text
assert "NOTICE" in text
assert "Transitive Build & Test Inventory" in text
Expand Down
46 changes: 34 additions & 12 deletions tests/test_version_metadata.py
Original file line number Diff line number Diff line change
Expand Up @@ -49,8 +49,8 @@ def test_llms_txt_integrity() -> None:
llms_text = (PROJECT_ROOT / "llms.txt").read_text(encoding="utf-8")
assert "https://github.com/dev-bricks/safe-start-for-codex" in llms_text
assert "dev-bricks" in llms_text
assert any(d in llms_text for d in ["Last-checked: 2026-10-08", "Last-checked: 2026-10-01", "Last-checked: 2026-09-26", "Last-checked: 2026-09-21"])
assert any(p in llms_text for p in ["186+ pytest tests passed", "185+ pytest tests passed", "181+ pytest tests passed", "167+ pytest tests passed", "126+ pytest tests passed", "114+ pytest tests passed"])
assert any(d in llms_text for d in ["Last-checked: 2026-11-02", "Last-checked: 2026-10-08", "Last-checked: 2026-10-01", "Last-checked: 2026-09-26", "Last-checked: 2026-09-21"])
assert any(p in llms_text for p in ["198+ pytest tests passed", "186+ pytest tests passed", "185+ pytest tests passed", "181+ pytest tests passed", "167+ pytest tests passed", "126+ pytest tests passed", "114+ pytest tests passed"])
assert "Version 1.1.6 verified" in llms_text
assert "NOTICE" in llms_text
assert "521 BGB" in llms_text
Expand Down Expand Up @@ -500,8 +500,8 @@ def test_labels_yml_contract() -> None:
def test_third_party_licenses_audit_recency_20260926() -> None:
md_text = (PROJECT_ROOT / "THIRD_PARTY_LICENSES.md").read_text(encoding="utf-8")
txt_text = (PROJECT_ROOT / "THIRD_PARTY_LICENSES.txt").read_text(encoding="utf-8")
assert any(d in md_text for d in ["Audited:** 2026-10-08", "Audited:** 2026-10-01", "Audited:** 2026-09-26"])
assert any(d in txt_text for d in ["Audited: 2026-10-08", "Audited: 2026-10-01", "Audited: 2026-09-26"])
assert any(d in md_text for d in ["Audited:** 2026-11-02", "Audited:** 2026-10-08", "Audited:** 2026-10-01", "Audited:** 2026-09-26"])
assert any(d in txt_text for d in ["Audited: 2026-11-02", "Audited: 2026-10-08", "Audited: 2026-10-01", "Audited: 2026-09-26"])
assert "RunAsInvoker" in md_text
assert "INV-LOCAL-01" in md_text
assert "INV-SLA-10" in md_text
Expand Down Expand Up @@ -588,8 +588,8 @@ def test_ascii_four_view_topology_bilateral_parity() -> None:
def test_level_1_sbom_currency_20261008() -> None:
md_text = (PROJECT_ROOT / "THIRD_PARTY_LICENSES.md").read_text(encoding="utf-8")
txt_text = (PROJECT_ROOT / "THIRD_PARTY_LICENSES.txt").read_text(encoding="utf-8")
assert "Audited:** 2026-10-08" in md_text
assert "Audited: 2026-10-08" in txt_text
assert "Audited:** 2026-11-02", "Audited:** 2026-10-08" in md_text
assert "Audited: 2026-11-02", "Audited: 2026-10-08" in txt_text


def test_marketing_log_section_pfad_b_20261008() -> None:
Expand All @@ -607,16 +607,38 @@ def test_badges_recency_and_test_count_20261008() -> None:
readme_en = (PROJECT_ROOT / "README.md").read_text(encoding="utf-8")
readme_de = (PROJECT_ROOT / "README_de.md").read_text(encoding="utf-8")

assert "Last--Checked-2026--10--08" in readme_en
assert "Last--Checked-2026--10--08" in readme_de
assert "third--party%20licenses-100%25%20audited%20(2026--10--08)" in readme_en
assert "drittanbieter--lizenzen-100%25%20gepr%C3%BCft%20(2026--10--08)" in readme_de
assert "pytest-186%20passed%20%7C%20100%25%20green" in readme_en
assert "pytest-186%20bestanden%20%7C%20100%25%20gr%C3%BCn" in readme_de
assert any(d in readme_en for d in ["Last--Checked-2026--11--02", "Last--Checked-2026--10--08"])
assert any(d in readme_de for d in ["Last--Checked-2026--11--02", "Last--Checked-2026--10--08"])
assert any(d in readme_en for d in ["third--party%20licenses-100%25%20audited%20(2026--11--02)", "third--party%20licenses-100%25%20audited%20(2026--10--08)"])
assert any(d in readme_de for d in ["drittanbieter--lizenzen-100%25%20gepr%C3%BCft%20(2026--11--02)", "drittanbieter--lizenzen-100%25%20gepr%C3%BCft%20(2026--10--08)"])
assert any(p in readme_en for p in ["pytest-198%20passed%20%7C%20100%25%20green", "pytest-186%20passed%20%7C%20100%25%20green"])
assert any(p in readme_de for p in ["pytest-198%20bestanden%20%7C%20100%25%20gr%C3%BCn", "pytest-186%20bestanden%20%7C%20100%25%20gr%C3%BCn"])


def test_changelog_recent_pfad_b_entry_20261008() -> None:
changelog = (PROJECT_ROOT / "CHANGELOG.md").read_text(encoding="utf-8")
assert "2026-10-08" in changelog
assert "Visual Four-View Architectural Topology" in changelog
assert "GITHUBBOT_ONE_REPO_MARKETING_AND_DESIGN" in changelog


def test_badges_recency_and_test_count_20261102() -> None:
readme_en = (PROJECT_ROOT / "README.md").read_text(encoding="utf-8")
readme_de = (PROJECT_ROOT / "README_de.md").read_text(encoding="utf-8")
assert "Last--Checked-2026--11--02" in readme_en
assert "Last--Checked-2026--11--02" in readme_de
assert "third--party%20licenses-100%25%20audited%20(2026--11--02)" in readme_en
assert "drittanbieter--lizenzen-100%25%20gepr%C3%BCft%20(2026--11--02)" in readme_de
assert "pytest-198%20passed%20%7C%20100%25%20green" in readme_en
assert "pytest-198%20bestanden%20%7C%20100%25%20gr%C3%BCn" in readme_de

def test_level_1_sbom_currency_20261102() -> None:
md_text = (PROJECT_ROOT / "THIRD_PARTY_LICENSES.md").read_text(encoding="utf-8")
txt_text = (PROJECT_ROOT / "THIRD_PARTY_LICENSES.txt").read_text(encoding="utf-8")
assert "Audited:** 2026-11-02" in md_text
assert "Audited: 2026-11-02" in txt_text

def test_changelog_recent_pfad_b_entry_20261102() -> None:
changelog = (PROJECT_ROOT / "CHANGELOG.md").read_text(encoding="utf-8")
assert "2026-11-02" in changelog
assert "GITHUBBOT_ONE_REPO_MARKETING_AND_DESIGN" in changelog
Loading