Skip to content

[REFACTOR] M6.5.5–6 — KISS / DRY / clean-code bez utraty funkcjonalności #83

Open

Description

@KeyffMS

M6.5.5–6 — kontrolowany refactor KISS / DRY / clean-code

Bazowy stan audytu: main = 36ab3c70a47d7651baa7f27dbfedd4543eb5ef9f po zakończeniu M6.5.4.

Cel

Zmniejszyć złożoność implementacyjną i duplikację przed bramką sprzętową H1, bez zmiany funkcjonalności produktu, kontraktów bezpieczeństwa, zachowania protokołu, goldens ani semantics evidence.

Refactor jest wykonywany małymi krokami, jeden obszar / plik / odpowiedzialność na PR. Nie wykonujemy jednego szerokiego rewrite.

Niezmienniki — DO NOT CHANGE

Każdy punkt poniżej jest release-blocking. Refactor nie może:

  • tworzyć drugiego BusActor, drugiego WriteCoordinator ani drugiego authority sesji;
  • przenieść decyzji authorization/audit/operation poza SessionStateMachine;
  • umożliwić write bez Verified + trust + Armed + healthy audit + prepare/confirm + durable prepare;
  • zmienić zasady: dokładnie jeden physical write, zero retry write, zero rollback, zero auto-resume;
  • osłabić exact operator confirmation lub normalizować whitespace confirmation;
  • usuwać powtórnych safety re-checków wykonywanych bezpośrednio przed physical write;
  • rozszerzyć restore poza allowlistę Normal i ApprovedRestorePlan + RestoreOperationPermit;
  • zmienić scheduler/budget semantics, kolejność klas, RTU budget ani QueueFull behavior bez osobnego feature issue;
  • zmienić committed conformance evidence [PLAN 01] Zablokować architekturę modularnego monolitu Rust #1–Create logical issue #6 commit #40 ani ich znaczenia;
  • zmienić packaged/local profile trust semantics;
  • przenieść filesystem I/O poza storage/composition boundaries;
  • wprowadzić nowe timers/queues/transport owners tylko w celu refaktoru.

Obowiązkowy odbiór każdego PR

Każdy PR z tej listy musi mieć:

  1. cargo fmt --check;
  2. Clippy -D warnings;
  3. architecture gate;
  4. wszystkie istniejące unit/integration/nextest;
  5. process-level PTY acceptance;
  6. committed conformance [PLAN 01] Zablokować architekturę modularnego monolitu Rust #1–Create logical issue #6 commit #40 bez osłabienia;
  7. supply-chain gate;
  8. brak nowych funkcjonalności ukrytych w refaktorze;
  9. diff ograniczony do jednego logicznego kroku;
  10. po merge — post-merge CI na main.

Backlog wykonawczy

R1 — TUI state DRY cleanup — P0 / najniższe ryzyko

R1a — deduplikacja zmiany ekranów w ui_state.rs

  • Wydzielić jeden helper zmiany ekranu/resetu transient navigation state.
  • SelectScreen, NextScreen, PreviousScreen korzystają z tej samej ścieżki.
  • OpenParameterIndex zachowuje własny wskazany index, ale współdzieli bezpieczny reset edycji/form.
  • Bez zmiany key bindings, focus semantics, scroll semantics i editor behavior.

R1b — deduplikacja lifecycle wyszukiwania w ui_state.rs

  • Wydzielić wspólne begin/apply/clear dla Profile/Scope/Parameter search, o ile borrow/API pozostają prostsze niż obecny kod.
  • Zachować .trim() wyłącznie dla search/filter text.
  • Nie dotykać exact write/restore confirmation text.

R1c — poprawa nazewnictwa edit mode

  • Zmienić mylącą nazwę ConnectionEdit na neutralną (ActiveEdit / EditMode) we wszystkich TUI call sites.
  • Zero zmian zachowania.

R2 — application.rs physical split — P0

Obecny hotspot: około 82 KB i wiele use-case’ów w jednym module.

  • Zachować dokładnie jeden ApplicationState i jeden reducer authority.
  • Rozdzielić implementację fizycznie, np. application/state.rs, view.rs, connection.rs, monitoring.rs, parameters.rs, faults.rs, backup_restore.rs, session.rs.
  • Najpierw move-only / visibility-only; bez zmiany logiki.
  • Publiczny ApplicationAction, ApplicationEffect, ApplicationView zachowują semantykę.
  • Nie wykonywać jednocześnie narrowing public API.

R3 — poll.rs physical split — P0

Obecny hotspot: około 71 KB; model + planner + cost/budget + executor w jednym pliku.

  • Rozdzielić na poll/model.rs, planner.rs, cost.rs, executor.rs (nazwy mogą zostać dopasowane do kodu).
  • PollPlan pozostaje pojedynczym SPoT.
  • Zero zmian degradation order, budget rank, cadence, grouping, deadline/catch-up semantics.
  • Conformance Validate implementation of issue #6 #36–Create logical issue #6 commit #40 musi pozostać bit-for-bit semantycznie równoważne.

R4 — write_coordinator.rs internal split — P0 / wysokie ryzyko

Obecny hotspot: około 100 KB — największy moduł aplikacji.

  • Zachować WriteCoordinator jako jedyny physical write authority.
  • Rozdzielić manual-write, restore, shared execution/readback/audit helpers wewnętrznie.
  • Nie eksportować możliwości mintowania PreparedBusWrite.
  • Nie zmieniać kolejności trust/drive-state/old-value/audit/physical-write/readback checks.
  • Nie usuwać safety re-checków tylko dlatego, że wyglądają na duplikację.
  • Dopiero po move-only split rozważyć scalenie duplikacji abort_restore / abort_restore_in_place.
  • Write/restore conformance [PLAN 14] Zbudować dashboard i wielokanałowy scope #14–Validate implementation of issue #5 #35 musi pozostać nieosłabione.

R5 — monitoring_runtime.rs split — P0/P1

Obecny hotspot: około 48 KB; orchestration + planner/executor + pipeline + CSV + snapshots.

  • Rozdzielić composition glue od subscription planning, CSV bridge i snapshot/consumer glue.
  • Nie tworzyć dodatkowych timers, queues ani runtime owners.
  • Poll/telemetry SPoT pozostają w application layer.
  • Slow sink nadal nie może wpływać na RTU latency (Create logical issue #6 commit #40).

R6 — TUI keymap split — P1

  • Rozbić duży keymap.rs (~31 KB) według ekranów/odpowiedzialności.
  • Zachować istniejące parameter_keymap.rs i fault_keymap.rs jako feature boundaries.
  • Centralizować help/key-binding labels tam, gdzie eliminuje to drift bez komplikowania modelu.
  • Żaden renderer nie dostaje adaptera/transportu.

R7 — screens.rs renderer split — P1

  • Przenieść proste renderery ekranów do małych modułów.
  • Nie duplikować już istniejących dedicated renderers: monitoring/fault/parameter/backup/bus diagnostics.
  • Pure presentation only.

R8 — zawężenie publicznego API lantern-app — P1

  • Dopiero po R2–R4 ograniczyć nadmierne pub use ...::*.
  • Zachować publiczne typy wymagane przez composition/tests.
  • Każde usunięcie exportu musi być potwierdzone pełnym workspace buildem, docs i examples.

R9 — storage mechanical splits — P1 / ostrożnie

Kolejno, nie równolegle:

  • audit.rs (~42 KB),
  • csv_writer.rs (~40 KB),
  • backup.rs (~26 KB),
  • diagnostics_bundle.rs (~25 KB).

Zasady: move-only najpierw; atomic/fsync/permissions/path-traversal semantics bez zmian.

R10 — transport internal cleanup — P2 / po głównym dry cleanup

  • bus_actor.rs split tylko jeśli realnie poprawia czytelność.
  • Nigdy nie tworzyć drugiego aktora/queue authority.
  • Scheduler fairness, safety burst, T3.5, retry policy i metrics pozostają bez zmian.
  • unsafe nadal wyłącznie w izolowanym rs485_ioctl.rs.

R11 — process/conformance test helper DRY — P2

  • Wyciągnąć wspólne PTY spawn/terminal-screen reconstruction/helpers z process acceptance.
  • Nie zmieniać oczekiwań testów ani golden evidence.
  • Ten punkt realizować dopiero po refaktorach production code, aby nie zmieniać jednocześnie kodu i jego głównego harnessu.

R12 — clean-code/docs status — P2

  • README: usunąć nieaktualny architecture bootstrap / pre-alpha i opisać rzeczywisty etap przed H1.
  • Usunąć stare placeholder/status texty, jeśli jeszcze istnieją.
  • Uporządkować nazwy modułów po refaktorach.
  • Zaktualizować diagram/module map docs bez deklarowania hardware qualification przed H1.

R13 — final dry-code audit / bramka M6.5

  • Full CI Debian 13 amd64.
  • Architecture gate green.
  • Wszystkie process PTY E2E green.
  • Conformance committed [PLAN 01] Zablokować architekturę modularnego monolitu Rust #1–Create logical issue #6 commit #40 green i semantycznie nieosłabione.
  • Porównanie feature surface przed/po: connection, dashboard, scope, faults, parameters, guarded write, backup/diff/restore, diagnostics, CSV, reconnect.
  • Brak nowego authority/state/timer/queue tylko z powodu refaktoru.
  • Dopiero po tym roadmapa przechodzi do H1 sprzęt.

Kolejność zatwierdzona po analizie ryzyka

R1a → R1b → R1c → R2 → R3 → R4 → R5 → R6 → R7 → R8 → R9 → R10 → R11 → R12 → R13

Uzasadnienie:

  • zaczynamy od lokalnego, łatwo odwracalnego DRY w TUI;
  • następnie wykonujemy move-only splity application i poll;
  • safety-critical WriteCoordinator dopiero po ustabilizowaniu prostszych granic;
  • public API narrowing dopiero po splitach, żeby nie mieszać dwóch rodzajów zmian;
  • storage/transport późno ze względu na wysoki koszt regresji;
  • test harness DRY dopiero po production code, żeby nie zmieniać równocześnie systemu i jego głównego dowodu;
  • docs/final audit zamykają M6.5.

Definition of Done tego issue

Issue można zamknąć wyłącznie po R13. Żaden checkbox nie oznacza DONE bez green CI na exact head i green post-merge CI. Sprzęt/HIL nie jest częścią tego issue; zaczyna się dopiero po jego zamknięciu zgodnie z #26/#25.

Activity

  1. KeyffMS commented on Sep 14, 2026

    @KeyffMS
    OwnerAuthor

    Review backlogu po utworzeniu

    Lista została ponownie przeanalizowana pod kątem ryzyka regresji i kolejność pozostaje zatwierdzona.

    Najważniejsze decyzje wykonawcze:

    • R1/R2/R3 są przed WriteCoordinator, bo są łatwiejsze do odbioru i zmniejszają churn przed safety-critical split;
    • R4 będzie najpierw wyłącznie move-only/internal split; żadnego „upraszczania” powtórnych safety checks;
    • R8 public API narrowing dopiero po stabilizacji fizycznych modułów;
    • R11 test-helper DRY pozostaje późno, żeby production code i jego główny evidence harness nie zmieniały się jednocześnie;
    • R10 transport cleanup jest warunkowy: jeżeli split BusActor nie daje jednoznacznego uproszczenia bez zwiększenia coupling, zostaje świadomie pominięty i udokumentowany jako not needed;
    • duże punkty są dzielone na małe PR-y; nie ma zbiorczego rewrite.

    Pierwszy wykonywany krok: R1a — ui_state.rs, deduplikacja przełączania ekranów/resetu transient state. To jest lokalny refactor bez zmiany keymap, application actions, write/restore confirmation ani runtime behavior.

  2. KeyffMS commented on Sep 14, 2026

    @KeyffMS
    OwnerAuthor

    R1a — DONE

    • PR refactor: deduplicate TUI screen transitions (R1a) #85 merged.
    • Merge commit: 26b6d1d27b747929fd65d0dfa1301b0d0e3e9c0a.
    • Exact-head CI #1036: green.
    • Post-merge main CI #1037: green.
    • Final diff: tylko crates/lantern-tui/src/ui_state.rs.
    • Wspólny reset transient screen state działa dla Select/Next/Previous; OpenParameterIndex współdzieli reset i zachowuje jawnie żądany index.
    • Brak zmian keymap/search/write/restore/runtime/transport/storage.

    Następny wykonywany punkt: R1b — wspólny lifecycle Profile/Scope/Parameter search.

  3. KeyffMS commented on Sep 14, 2026

    @KeyffMS
    OwnerAuthor

    R1b — DONE

    • PR refactor: deduplicate TUI search lifecycle (R1b) #86 merged.
    • Exact PR head: 263eb058f654b9ddc7da6b90d7e686fdd78f1a7c.
    • Merge commit / current main: b2e59b7e10c3bc1ce10d5c4e42ed3d56e4f49a90.
    • Exact-head CI #1038: green.
    • Post-merge main CI #1039: green on the merge commit.
    • Final diff: only crates/lantern-tui/src/ui_state.rs.
    • Profile / Scope / Parameter search share one begin/apply/clear lifecycle; existing filter fields remain the state holders.
    • Equivalence coverage verifies query preload/apply/clear plus focus, selected index, scroll and screen preservation/reset semantics.
    • .trim() remains limited to search/filter apply.
    • No keymap/application-action/transport/write-runtime/scheduler/storage changes.
    • Write and restore confirmation paths were not changed; exact confirmation remains untouched.

    Next checkpoint: R1c — rename ConnectionEdit to a neutral ActiveEdit / EditMode, zero behavioral change.

  4. KeyffMS commented on Sep 14, 2026

    @KeyffMS
    OwnerAuthor

    R1c — DONE

    • PR refactor: rename TUI edit mode to ActiveEdit (R1c) #87 merged.
    • Exact head: 82b69b3d20229b661fd6075fe0eece163f673d1f.
    • Exact-head CI #1040: green.
    • Merge commit: 1bc36f34f658e64037e8d378edf6714ed9c05ac1.
    • Post-merge main CI #1041: green on exact merge commit.
    • Final diff: only five TUI files; ConnectionEdit / connection_edit renamed to neutral ActiveEdit / active_edit.
    • Zero behavioral changes; keymaps/actions/search/write/restore/transport/runtime/scheduler/storage unchanged; exact write/restore confirmation remains untouched.

    Następny wykonywany punkt: R2 — physical split application.rs, zachować jeden ApplicationState i jeden reducer authority. R2 będzie wykonywany małymi move-only PR-ami. Pierwszy podkrok: wydzielenie reduce_faults do application/faults.rs; backup/restore nie jest pierwszym podkrokiem, ponieważ obecny architecture gate wiąże exact-confirmation guard bezpośrednio z application.rs i nie może zostać po cichu osłabiony.

  5. KeyffMS commented on Sep 15, 2026

    @KeyffMS
    OwnerAuthor

    R2a — DONE

    • PR refactor: split application fault reducer (R2a) #88 merged.
    • Final exact PR head: cb8b99717f32c40c5d2909ca3dcb50c6e14e7dcc.
    • Exact-head CI #1045: green.
    • Merge commit / main: cac3479f2efd083bb9043383c31320accb5c99fb.
    • Post-merge main CI #1046: green on the exact merge commit.
    • Final production diff: crates/lantern-app/src/application.rs + new private crates/lantern-app/src/application/faults.rs.
    • ApplicationState::reduce_faults moved physically without logic changes; single ApplicationState and single top-level reducer authority remain in application.rs.
    • The initial exact-head run #1042 correctly failed on a stale moved import under Clippy -D warnings; the import was removed without allow/gate weakening and the full immutable gate was rerun from scratch.
    • No write/restore confirmation, public API, transport, scheduler/budget/QueueFull, storage, runtime or conformance semantics changed.

    Next R2 substep: R2b — move-only reduce_monitoring to private application/monitoring.rs, keeping monitoring state ownership and the top-level dispatcher unchanged.

  6. KeyffMS commented on Sep 15, 2026

    @KeyffMS
    OwnerAuthor

    R2a — DONE

    • PR refactor: split application fault reducer (R2a) #88 merged.
    • Final exact PR head: cb8b99717f32c40c5d2909ca3dcb50c6e14e7dcc.
    • Exact-head CI #1045: green.
    • Merge commit / current main: cac3479f2efd083bb9043383c31320accb5c99fb.
    • Post-merge main CI #1046: green on exact merge commit.
    • Final production diff: only crates/lantern-app/src/application.rs and new crates/lantern-app/src/application/faults.rs.
    • ApplicationState and the top-level reduce() dispatcher remain single authorities in application.rs.
    • reduce_faults moved verbatim to a private child module; only method visibility changed to pub(super).
    • Initial CI #1042 correctly rejected a stale moved import under Clippy -D warnings; it was fixed mechanically with no gate weakening.
    • No write/restore confirmation, public API, transport, scheduler/budget/QueueFull, storage, runtime, or conformance changes.
    • Exact-confirmation architecture guard remains unchanged.

    Next checkpoint: R2b — move-only split reduce_monitoring to application/monitoring.rs.

  7. KeyffMS commented on Sep 15, 2026

    @KeyffMS
    OwnerAuthor

    R2b — DONE

    • PR refactor: split application monitoring reducer (R2b) #89 merged.
    • Exact PR head: bd82b4af67c1470bd2944800b706fbd66f326390.
    • Exact-head CI #1047: green.
    • Merge commit / current main: e5b3de90b95446a443bbb12dac17ceaff408baae.
    • Post-merge main CI #1048: green on exact merge commit.
    • Final production diff: only crates/lantern-app/src/application.rs and new crates/lantern-app/src/application/monitoring.rs.
    • ApplicationState and the top-level reduce() dispatcher remain the single authorities in application.rs.
    • reduce_monitoring moved verbatim; only method visibility changed to pub(super).
    • CSV/scope/monitoring semantics unchanged; no new timer, queue or runtime owner.
    • Two temporary helper failures were transformation-script defects (symbol counting / test import scoping); clean production head passed the full immutable gate.
    • No write/restore confirmation, public API, transport, scheduler/budget/QueueFull, storage or conformance changes.
    • Exact-confirmation architecture guard remains unchanged.

    Next checkpoint: R2c — move-only connection reducer/helper split.

  8. KeyffMS commented on Sep 16, 2026

    @KeyffMS
    OwnerAuthor

    R2c — DONE

    • PR: refactor: split application connection reducer (R2c) #90 — refactor: split application connection reducer (R2c)
    • exact PR head: 120ef99997614976500e341a5a2b3d375b56a6af
    • exact-head full immutable CI: #1049 — green on exact PR head
    • merge: 40ba24ffe16b34da5942fd32d9bb43be6ca27510
    • post-merge full immutable CI: #1050 — green on exact merge SHA
    • scope: move-only physical split of connection reducer/helpers to crates/lantern-app/src/application/connection.rs; exactly one ApplicationState and the top-level reducer authority remain in application.rs; write/restore confirmation paths and their architecture-gate evidence were not moved or weakened.

    R2 remains in progress. Proceeding directly to the next smallest low-risk move-only split.

  9. KeyffMS commented on Sep 16, 2026

    @KeyffMS
    OwnerAuthor

    R2d — DONE

    Wydzielono move-only / visibility-only projekcję aplikacji do crates/lantern-app/src/application/view.rs:

    • SessionPhaseView, AuthorizationView, AuditHealthView, OperationView;
    • SessionView i jego projekcję;
    • ApplicationView i jego projekcję;
    • lokalny port_label.

    Zachowano dokładnie jeden ApplicationState i główny ApplicationState::reduce w application.rs. Write/restore exact operator confirmation pozostały bez zmian w application.rs, więc istniejący architecture gate nadal obejmuje tę ścieżkę bez osłabienia.

    PR: #91

    Pierwszy exact-head CI #1051 na 1aab22a6342bda214f1e8928211762df98a0e3f8 wykrył wyłącznie stale rustfmt. Poprawiono tylko formatowanie importów, bez zmiany semantyki i bez osłabiania gate'ów.

    Final exact PR head: 554505d74210651e58a5adedd73ca484b9fe05db
    Exact-head CI #1052: success
    Merge: 68afc9508b6efc846e2d3aafabfee9e89296f10d
    Post-merge CI #1053 na dokładnym merge SHA: success

    R2 jako całość pozostaje w toku.

  10. KeyffMS commented on Sep 16, 2026

    @KeyffMS
    OwnerAuthor

    R2e — DONE

    Wydzielono move-only / visibility-only prywatne substany aplikacji do crates/lantern-app/src/application/state.rs:

    • ApplicationMonitoringState;
    • ApplicationParameterState;
    • ich istniejące Default / for_profile.

    Zastosowano wyłącznie pub(super) wymagane przez parent/sibling application modules. ApplicationState i główny ApplicationState::reduce pozostały w application.rs. Write/restore exact operator confirmation pozostały bez zmian w application.rs, więc architecture gate nadal obejmuje te ścieżki bez osłabienia.

    PR: #92

    Pierwszy exact-head CI #1054 na 4572f575a0f399bf310784799b57c82b535dbffe wykrył wyłącznie stale rustfmt. Poprawiono tylko formatowanie, bez zmiany semantyki i bez osłabiania gate'ów.

    Final exact PR head: 54db50e6922bbe07788ce67b9289ccfb996ac33d
    Exact-head CI #1055: success
    Merge: 2dfb7300d08fbb85e4715de26c6ae60f57e7ce0f
    Post-merge CI #1056 na dokładnym merge SHA: success

    R2 jako całość pozostaje w toku.

  11. KeyffMS commented on Sep 16, 2026

    @KeyffMS
    OwnerAuthor

    R2f — DONE

    • PR: refactor: move application view projection method (R2f) #93
    • scope: move-only relocation of the read-only ApplicationState::view implementation into crates/lantern-app/src/application/view.rs
    • final exact PR head: b263823b840980c59c9c460c9c4af5fc144ff016
    • exact-head full immutable CI: #1058 — success
    • merge SHA: 0d5d004f92a3d764a84d4794b381bd2c75141013
    • post-merge full CI: #1059 — success on exact merge SHA
    • exactly one ApplicationState and the top-level ApplicationState::reduce remain in application.rs
    • write/restore exact confirmation remains unchanged in application.rs; architecture-gate coverage was not weakened
    • no behavior/API/scheduler/conformance changes

    Next: R2g — continue the smallest low-risk move-only physical split of application.rs.

  12. KeyffMS commented on Sep 16, 2026

    @KeyffMS
    OwnerAuthor

    R2g — DONE

    • PR: refactor: move connection fault mapping helper (R2g) #94
    • scope: move-only relocation of connection-specific session_fault_for_connect_error from crates/lantern-app/src/application.rs into crates/lantern-app/src/application/connection.rs
    • final exact PR head: 1b83c2004ab260a796b71ae4d96263b2c5c18b8e
    • exact-head full immutable CI: #1061 — success
    • merge SHA: 8bcbc4942387505a34bd783470479ce23338a615
    • post-merge full CI: #1062 — success on exact merge SHA
    • exactly one ApplicationState and the top-level ApplicationState::reduce remain in application.rs
    • write/restore exact confirmation remains unchanged in application.rs; architecture-gate coverage was not weakened
    • no behavior/API/scheduler/conformance changes

    Next: R2h — continue the smallest low-risk move-only physical split of application.rs.

  13. KeyffMS commented on Sep 19, 2026

    @KeyffMS
    OwnerAuthor

    R2h — DONE

    • PR refactor: split application runtime boundary (R2h) #95: moved ApplicationEffectError, EffectRunner, and ApplicationRuntime into crates/lantern-app/src/application/runtime.rs.
    • Public API preserved through re-export from application.rs; ApplicationAction, ApplicationEffect, exactly one ApplicationState, and the top-level ApplicationState::reduce remain in the root module.
    • Exact write/restore operator-confirmation comparisons remain unchanged in application.rs; no architecture/conformance gate was weakened.
    • Final exact PR head: 75c9b9fe3d70b57d2e98f59be83c965b7a164063.
    • Exact-head CI #1065: success on that exact SHA.
    • Merge SHA: 511817d429aa76c9ff1b6441668da895ee7aa6bf.
    • Post-merge CI #1066: success on exact merge SHA 511817d429aa76c9ff1b6441668da895ee7aa6bf.

    R2h is DONE only after the green post-merge gate above.

  14. KeyffMS commented on Sep 19, 2026

    @KeyffMS
    OwnerAuthor

    R2i — DONE

    • PR refactor: move application state construction impl (R2i) #96: moved only ApplicationState construction/accessor implementation (Default, with_registry, with_registry_and_suggestions, registry, session) into the existing crates/lantern-app/src/application/state.rs.
    • Exactly one public ApplicationState definition and the top-level ApplicationState::reduce remain in application.rs.
    • Both exact write/restore operator-confirmation comparisons remain unchanged in application.rs; no architecture/conformance gate was weakened.
    • Final exact PR head: 919eeb35829140acce8966da77977bdca42270ec.
    • Exact-head CI #1067: success on that exact SHA.
    • Merge SHA: dc9624dbaf2cd5f8a6ada0b14c30f2abfcc30fc8.
    • Post-merge CI #1068: success on exact merge SHA dc9624dbaf2cd5f8a6ada0b14c30f2abfcc30fc8.

    R2i is DONE only after the green post-merge gate above.

  15. KeyffMS commented on Sep 20, 2026

    @KeyffMS
    OwnerAuthor

    R2j — DONE

    • PR refactor: move profile state helpers (R2j) #97: moved only the read-only ApplicationState::selected_profile and ApplicationState::profile_candidates helpers into crates/lantern-app/src/application/state.rs, with sibling-only pub(super) visibility.
    • Exactly one public ApplicationState definition and the top-level ApplicationState::reduce remain in application.rs.
    • Both exact write/restore operator-confirmation comparisons remain unchanged in application.rs; no architecture/conformance gate was weakened.
    • Final exact PR head: ed091d43984c4e555246bca59891d457a3e6fbe4.
    • Exact-head CI #1069: success on that exact SHA.
    • Merge SHA: 3c2b121a9b378b5d8e879378ec6e62014a70b780.
    • Post-merge CI #1070: success on exact merge SHA 3c2b121a9b378b5d8e879378ec6e62014a70b780.

    R2j is DONE only after the green post-merge gate above.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions