Skip to content

fix(recurring): route task creation through handlers - #173

Open
lukisch wants to merge 16 commits into
mainfrom
codex/task-1346-recurring-rheingold-20260930
Open

lukisch wants to merge 16 commits into
mainfrom
codex/task-1346-recurring-rheingold-20260930

Conversation

@lukisch

@lukisch lukisch commented Sep 30, 2026

Copy link
Copy Markdown
Member

Summary

  • route recurring BACH task creation through the federation-aware TaskHandler
  • route recurring ATI task creation through ATIHandler while preserving priority/source/tags metadata
  • replace the ambiguous integer sentinel with an explicit creation result so offline draft ID -1 counts as success
  • document that historical ID reconciliation and live cross-host verification remain separate gates

Verification

  • python -m pytest system/tests/test_recurring_tasks.py system/tests/test_ati_handler.py -q (50 passed)
  • python -m pytest system/tests/test_task_handler.py system/tests/test_task_due_date.py system/tests/test_task_atomic_claim.py system/tests/test_task_slot_fields.py system/tests/test_recurring_tasks.py system/tests/test_ati_handler.py -q (168 passed)
  • python -m pytest system/tests/test_rheingold_handler.py system/tests/test_recurring_tasks.py system/tests/test_ati_handler.py -q -p no:cacheprovider (62 passed)
  • python -m compileall -q system/hub/_services/recurring/recurring_tasks.py system/hub/ati.py
  • python system/bach.py recurring list

Task: #1346

@lukisch lukisch added bug Something isn't working core Betrifft Core/DB (dist_type=2) -- eskalieren! labels Sep 30, 2026
lukisch and others added 15 commits September 30, 2026 12:42
…ernance links (#174)

* docs(gui): make governance ticket pointers lifecycle stable

* fix(control): expose guarded readonly authentication handshake

* test(calendar): freeze fixture clock and cover month boundaries

---------

Co-authored-by: Lukas Geiger <lukas@um-bruch.org>
…#175)

* fix(data): migrate instance_identity safely and drop legacy tables fail-closed (T-20260926-357988320)

- Convert migrate_unify_distribution.sql to Python migration (migrate_unify_distribution.py)
- Rebuild instance_identity preserving rows and verifying row count before switching
- Fail-closed validation for legacy tables (abort before any mutation if non-empty)
- Idempotent execution (safe second run)
- Comprehensive regression tests in test_migrate_unify_distribution.py

* fix(data): keep distribution migration atomic on schema drift

* fix(data): validate SQLite names and full identity schema

T-20260926-357988320: resolve main table/view/index names with SQLite ASCII NOCASE; keep triggers in their own namespace. Validate every table_xinfo column and reject hidden/generated/unknown identity columns before mutation. Preserve the atomic SAVEPOINT and qualify main objects against temp shadowing. Add the migration suite to the explicit CI file list.

Hermetic validation: 25 case-variant/generated/hidden counterexamples fail on the prior implementation. Fixed migration suite: 87 passed. Six migration suites together: 117 passed in 36.27s. Ruff and git diff --check clean. No live DB, remote or ticket writes. Independent model review pending.

---------

Co-authored-by: Lukas Geiger <lukas@um-bruch.org>
…176)

* fix(trithon): serialize local fencing state and reject authority reset

T-20260920-823767362 S7: serialize host-local registration, claims and epochs; reject corrupt state and revoke fences on epoch changes. Add Windows/POSIX multiprocess race and crash regressions. Federation rollout remains unaccepted.

* fix(trithon): validate claim registry and reuse one authenticated snapshot

T-20260920-823767362 S7 independent review P2: reject malformed node identities and salt under the existing claim lock, preserving term state. Local source delta only; federation and integration remain open.

* ci: include all five focused S7 regression suites

* test(trithon): isolate spawn targets from pytest shadow imports

---------

Co-authored-by: Lukas Geiger <lukas@um-bruch.org>
* refactor(gui): extract backend-free Activity shell and BACH consumer

* ci(gui): cover neutral shell and Activity consumer

* test(gui): parse complete HTML scripts in browser contract harness

---------

Co-authored-by: Lukas Geiger <lukas@um-bruch.org>
* fix: clarify S4 sleep policy and render manual hints in chat

Bind trigger subprocesses to the handler database and propagate failures with full step receipts. Keep Gardener ownership explicit without changing hook or scheduler activation. Render verified manual documentation references before API selection, preserving CLI rules and usage gates. Add hermetic regression coverage; CI inclusion of test_context_manual_hints.py remains a coordinated follow-up.

* test(s4): reproduce mixed unknown hint leaks before filtering

* fix(s4): validate every CLI marker before neutral hint selection

* test(s4): reproduce full Python path suffix leaks

* fix(s4): validate complete Python path arguments

* ci(s4): include manual context hint regressions

* test(core): isolate App bootstrap from partly seeded shared fixture DB

---------

Co-authored-by: Lukas Geiger <lukas@um-bruch.org>
…179)

* fix(seal): match startup presence gate with hermetic fixtures

* ci(seal): include hermetic release sampling regression suite

---------

Co-authored-by: Lukas Geiger <lukas@um-bruch.org>
…180)

* feat(dbsync): add explicit pinned shared adapter seam

* test(dbsync): preserve seven independent adapter contract checks

* ci(dbsync): require pinned public sources and all 55 contract cases

---------

Co-authored-by: Lukas Geiger <lukas@um-bruch.org>
#181)

* test(T797): reproduce unsafe imported lease boundaries

* fix(T797): fence imported SQLite lease acquisition and lifecycle

* test(T797): reproduce journal data loss and missing safety gates

* style(T797): normalize imported lease annotations and regression imports

* fix(T797): reuse Nemo reversible journal behind explicit host lease

* test(T797): retain independent malformed lease and trigger repros

* fix(T797): validate lease instants and UUID fences and rollback SQL failures

* docs(T797): propose isolated Nemo consumer mutation guard contract

* test(T797): reproduce Python 3.12 true autocommit transaction leakage

* fix(T797): close explicit transactions in Python 3.12 autocommit mode

* test(T797): reproduce journal guard loss at final resource mutations

* fix(T797): bind unchanged Nemo engine to private guarded mutation boundaries

* test(leases): preserve real deferred commit and partial DDL rollback checks

* test(journal): preserve nontrue guard and real descriptor closure checks

* docs(capabilities): record verified source hashes and retained license texts

* ci(capabilities): require real SQLite modes and all 175 safety cases

---------

Co-authored-by: Lukas Geiger <lukas@um-bruch.org>
* test(seal): reproduce identity replacement false success

* fix(seal): verify the logical identity update before reporting success

* test(seal): preserve eleven independent identity countercases

* ci(seal): require full identity contract on Python 3.12 and 3.13

---------

Co-authored-by: Lukas Geiger <lukas@um-bruch.org>
…es (#183)

* test(T797): reproduce unsafe imported lease boundaries

* fix(T797): fence imported SQLite lease acquisition and lifecycle

* test(T797): reproduce journal data loss and missing safety gates

* style(T797): normalize imported lease annotations and regression imports

* fix(T797): reuse Nemo reversible journal behind explicit host lease

* test(T797): retain independent malformed lease and trigger repros

* fix(T797): validate lease instants and UUID fences and rollback SQL failures

* docs(T797): propose isolated Nemo consumer mutation guard contract

* test(T797): reproduce Python 3.12 true autocommit transaction leakage

* fix(T797): close explicit transactions in Python 3.12 autocommit mode

* test(T797): reproduce journal guard loss at final resource mutations

* fix(T797): bind unchanged Nemo engine to private guarded mutation boundaries

* test(leases): preserve real deferred commit and partial DDL rollback checks

* test(journal): preserve nontrue guard and real descriptor closure checks

* docs(capabilities): record verified source hashes and retained license texts

* ci(capabilities): require real SQLite modes and all 175 safety cases

* docs(capabilities): inventory all pinned source surfaces and concrete comparison candidates

* docs(capabilities): include normal package initializers in static closures

---------

Co-authored-by: Lukas Geiger <lukas@um-bruch.org>
* fix(dbsync): refuse stale first copies behind native readiness

T903/Task1168: validate the explicit existing source-bound schema0 profile before native IO and provider preparation. Preserve native merge/backup engines, refuse unsupported migration epochs and remove implicit first-copy paths. Canonical synthetic fixtures retain LWW/race assertions; no shared cutover or credential/host acceptance.

* test(T903): preserve native object and caller counterexamples

* fix(T903): match the literal SQLite internal object prefix

* ci(T903): require pinned native carrier and all 150 contract cases

* test(T903): bind native selection probe to explicit fixture database

---------

Co-authored-by: Lukas Geiger <lukas@um-bruch.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working core Betrifft Core/DB (dist_type=2) -- eskalieren!

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant