- Renamed the public project from
sync-mastertosystem-gap-master. - Renamed the daily gate to
scripts/system_gap_daily_check.py. - Added temporary compatibility for
scripts/sync_daily_check.pyandSYNC_MASTER_DIR.
All notable changes to system-gap-master are documented here.
- Discoverability & Ecosystem Matrix: Added comprehensive sibling tools and cross-ecosystem matrix to
README.mdandREADME_de.mdlinkingsqlite-transit-sync,memoryhooker,workflowhooker,system-explorer,lock-master,ticket-master,coma,safe-start-for-codex,DevCenter, andCodeBox. - Metadata Parity Test Suite: Added
tests/test_metadata.pyverifying package version, bilingual documentation,ellmos-module.v2.jsonschema,SECURITY.md, andllms.txtintegrity (5/5 passed). - Encoding Hygiene: Patched Windows subprocess execution in
tests/test_conflict_copy_reconciler.pyto enforce UTF-8 with error replacement for robust platform testing. - Linter & Test Synchronisation: Added
[tool.ruff]and[tool.ruff.lint]configuration topyproject.toml; updated all badges andllms.txtto 158 passed tests.
-
Version bump to 1.4.1 with package metadata and
__version__export. -
Standardized Shields.io badges (Ecosystem:
ellmos-ai, Umbrella:open-bricks) and verified bilingual README parity. -
Restored Python 3.10 TOML snapshot support through the conditional
tomlibackport, made the CI matrix install project dependencies before testing, and updated its actions to their Node 24 majors. -
Synchronized README badges and
llms.txtto the full 2026-08-14 suite (153 passed, 42 subtests passed, 1 skipped). -
Added the provider-neutral
scripts/config_snapshot.pyshowroom. It reads only an explicit JSON/TOML allowlist, normalises home paths, redacts secret values, and produces comparableCONFIG-STATE.mdoutput with documented versus unexplained deviations. The example table and hand-maintainedDEVIATIONS.mdtemplate keep generated state out of version control. -
Conflict reconciler:
json_schema_mismatch()stops ajson-objectmerge between two independent documents that merely share a filename pattern. Ticket T-20260729-04 turned up a real pair while working the SS4b case:components.json(schema_versionpublic-catalog-v1, 129 entries, generated bybuild_public_registry.py) andcomponents-<HOST>.json(schema_versionskill-v1, 80 entries, generated by a different tool, with a provenance block the other lacks). Same naming convention as an ordinary OneDrive conflict copy; not one. Ifschema_versionorgenerated_byis present on both sides of a mapped pair with a different value, the merge fails closed withstructural-schema-mismatch:<field>before any key-level merge is attempted — even though disjoint top-level keys would otherwise merge cleanly. A field present on only one side does not block: that is the ordinary case of a genuine conflict copy where one side has not yet picked up a newer generator's added field. Verified empirically that the generic per-key collision check already fails closed for this exact pair (both explicitjson-objectand the defaultautoadapter); the new check adds a named, independently tested safety property so it cannot silently regress behind an unrelated refactor of the merge function, and gives a specific blocker instead of only knowing something was blocked.merge-validation:*blockers now keep the underlying reason (capped at 200 chars) instead of only the exception type name — an opaquemerge-validation:ReconcilerErroris exactly what invites a reviewer to force a merge they shouldn't. Eleven regression tests, including a control case proving the documented disjoint-keys merge stays unaffected. The zero-shared-key case (two documents with no schema marker and no key overlap at all) remains the adapter's existing, documented, accepted tradeoff — not closed by this change; whetherjson-objectshould instead require a matching schema marker unconditionally is a decision for whoever owns a given root's configuration. -
Conflict reconciler:
exempt_name_patternskeeps by-design host-suffixed artefacts out of the scan entirely. Ticket T-20260729-04 (SS4b) requires that files a yard maintains per host on purpose — a per-host status log, a per-host registry snapshot, a per-host scan manifest that itself carries a trailing host token — are never reported as conflict-copy candidates. The existingknown_hostssuffix detector matches any-HOSTfilename regardless of intent, so without an exclusion these files reach the scan queue ascanonical-authority-missingnoise. A root may now declareexempt_name_patterns(regexes matched against the root-relative POSIX path); matches are skipped before detection runs, not merely left unmapped, and are reported back underscan()["exempted_by_policy"]so a fail-open regex mistake stays auditable. Directories literally named_archive(case-insensitive) are skipped unconditionally, independent of configuration. Five regression tests, including negative cases for each SS4b category and a check that a genuine host-suffixed conflict copy is still detected alongside the exemptions. No production root config exists yet for any real yard, so this is a capability, not an active exclusion. -
Maintainer verification on 2026-08-04: 83 tests passed and 1 Windows symlink-platform test was skipped due to missing account privilege; Ruff and both public CLI help surfaces passed.
-
Maintainer verification on 2026-08-01: 83 tests passed and 1 Windows symlink-platform test was skipped due to missing account privilege; Ruff and the daily-gate, trusted-peer and conflict-reconciler CLI help surfaces passed.
-
Added the separate
trusted-peer-sftp-executorexecution boundary. It re-runs the network-free planner, verifies OpenSSH detached signatures for registry and short-lived one-shot grant, resolves credentials from local allowlisted roots, pins the presented host key, streams one regular file with a size cap, and commits atomically without replacement. Durable replay state and redacted receipts remain outside the sync yard; SQLite, directory, upload and remote-mutation paths remain blocked. -
Corrected canonical repository URLs from the former
dev-bricksowner toellmos-aiin package metadata, schemas, templates and the LLM index. -
Documented Republica (the sqlite-transit-sync showcase fallback) as a permanent second operating mode alongside direct tunnel sync, not a stopgap: a bilingual README section with a failure-scenario table, and
system_gap_master/republica_transit.py— a dependency-free helper that resolves the R9 tool-owneddb-transit/<namespace>transit zone for a namespace and validates that arepublica_rootimport destination stays outside the yard. Registered as therepublica-transitconsole script; never importssqlite_transit_sync, so it works with or without the companion package installed. -
Synchronized the maintained German README with the canonical English structure, protocol rules, companion-tool, stack-family, security and provenance sections while preserving code blocks byte-for-byte.
-
Replaced live trusted-peer publishing and
pull --applywith a read-only V4 preparation boundary. The stable CLI now validates, lists, resolves and emits deterministic non-executable pull receipts without network contact, referenced-file reads or yard writes. -
Added registry/config/receipt v2 schemas and fail-closed gates for owner slot, schema/version, host/peer, freshness/expiry, pinned signature reference, payload digest, known-host pins, exact remote paths, destination safety and secret/content detection.
-
Documented the remaining detached-signature, SSH ACL/authentication, network-route, anti-replay and reviewed-executor gates for real two-host activation.
-
Reject UNC/device namespaces and non-portable Windows aliases before any filesystem probe, bind registry reads to one checked file identity, and use provider-neutral
direct/private-overlayroute labels.
- Machine-regenerable artefacts are no longer surfaced.
__pycache__,.pytest_cache,.mypy_cache,.ruff_cacheand bytecode extensions (.pyc,.pyo,.pyd,.class,.o,.obj) are skipped during candidate iteration. A conflict copy of a bytecode cache carries no information — the file is rebuilt on the next run, so neither merging nor human review is worth anyone's time. Observed on a real repository: thirteen of thirteen "undecidable" candidates were bytecode and VCS internals. A queue like that trains reviewers to ignore it, which is worse than no queue at all. (.gitwas already excluded.) host_specific_markers()reports evidence that a file legitimately differs per host (absolute user paths, known host names in content). Such a pair is not a conflict to merge: either both sides are kept under explicit per-host names, or — better — the file is made path-neutral so the split disappears. Merging them silently destroys one host's configuration.excerpt()returns beginning, middle and end of a text. Before comparing two versions line by line, a reviewer needs the cheaper answer first: is merging this worth doing at all? That matters when one run surfaces dozens of candidates.- Six regression tests covering all three additions, including an end-to-end check that a bytecode conflict copy never reaches the queue while a README in the same run still does.
- Added the user- and host-neutral
trusted-peer-pathsAPI/CLI with atomic own-slot publish, HMAC-authenticated validation, peer-filtered list/resolve, replay pins and machine-readable schemas/examples. - Added shell-free SFTP pull plans and explicit
pull --applyfor ordinary files with strict known-host checking, destination allowlists, local staging and no-overwrite installation. - Added the R9 database boundary: SQLite/
-wal/-shmpaths may be published only as discovery metadata withdirect_pull=falseandadapter=sqlite-transit-sync; direct pull remains blocked. - Hardened Windows 8.3/reparse handling and physical overlap comparisons, canonical IDs, strict JSON/revision state, OpenSSH option paths, immutable pull plans, bounded null-output SFTP staging, owner-only modes and atomic no-overwrite result/file installation.
- Renew leases through a unique no-overwrite temporary file followed by flush, fsync, final guard/token/fingerprint binding and atomic replacement; a failed or interrupted temporary write cannot corrupt the active lease.
- Added fail-safe malformed-lease recovery: only an adapter with explicit expired-takeover authority may quarantine a stable malformed lease whose file age exceeds the configured lease TTL. Recent or unstable damage stays busy for review.
- Serialized lease creation, expired takeover, renewal and release with a crash-released host-local OS lock; renewal now writes only through the token- and inode-bound lease descriptor.
- Bound every signed operation manifest to the operation ID requested by the caller, preventing valid-manifest substitution under another filename.
- Rebound rollback inputs immediately before each mutation, restored missing conflict copies without overwrite, and retained recoverable archives as immutable rollback evidence.
- Added the user-neutral
conflict-copy-reconcilerAPI/CLI with explicit root allowlists, authoritative canonical mappings, scan/plan/apply/verify/ rollback, per-root leases, compare-before-swap, local backups, recoverable archives and path-redacted receipts. - Added deterministic automatic classes for exact copies, append-only UTF-8
supersets, non-overlapping three-way text merges and conflict-free JSON
object merges. Semantic conflicts, secrets, binaries, databases, archives,
.git, dirty work, locks and unready cloud placeholders fail closed. - Added provider-neutral desktop-automation and macOS LaunchAgent/runner templates. Provider registrations remain instance-owned; every path scope has one mutating owner and any number of observers.
- Added Windows/macOS detector, race, rollback, idempotency and real temporary canary coverage.
- Hardened the mutation boundary with observer/owner enforcement, signed plan/manifest readback, stable file-descriptor fingerprints, no-symlink/ junction/reparse traversal, no-overwrite archives, token-safe lease renewal and preflighted non-destructive rollback.
- Set the package minimum to Python 3.10, matching the typed public API and the existing CI matrix.
- Performed technical hygiene & maintenance check (Path A).
- Added comprehensive German documentation (
README_de.md) covering system architecture, 8-rule protocol summary, quick start guide, and ecosystem integration. - Enhanced
README.mdwith language switcher toggle ([English](README.md) | [Deutsch](README_de.md)). - Updated
llms.txtLast-checkedtimestamp to 2026-07-26 and addedREADME_de.mdindex reference. - Added
pythonpath = ["."]to[tool.pytest.ini_options]inpyproject.tomlfor standard module test discovery. - Linked
dev-bricks/sqlite-transit-synccompanion repository directly inREADME.md. - Verified unit test suite execution (5/5 passed, 100% green).
- Added PEP 621 compliant
pyproject.tomlpackage metadata and Pytest configuration. - Enhanced
README.mdwith Shields.io badges (Python, MIT License, Protocol, Indexing, Tests), AI/LLM callout note, and Mermaid architecture flowchart. - Updated
llms.txtLast-checkedtimestamp to 2026-07-25 and expanded search phrase anchors.
- Added unit test suite
tests/test_sync_daily_check.pycoveringsync_daily_check.pygate script and CLI. - Added GitHub Actions workflow (
.github/workflows/tests.yml) running unit tests on Python 3.10, 3.11, and 3.12 across Ubuntu and Windows. - Synchronized
llms.txtLast-checkeddate to 2026-07-21 and updatedTODO.mdstatus. - Added release-gate hygiene docs:
TODO.mdnow records the current gate status, and.gitignorecovers the .MODULES minimum local-secret, database, virtualenv and editor patterns. - Added public module metadata for the dev-bricks ecosystem.
- Added
llms.txtso agents and search tools can identify the protocol, safety boundaries and canonical repository quickly.
- Documented structured payload handling for database transit zones.
- Added
sqlite-transit-synccompanion notes to the protocol and README.