Skip to content

Clean up Android edge-to-edge layout#10

Merged
PureWeen merged 1 commit intomainfrom
cleanup-android-edge-to-edge
Feb 8, 2026
Merged

Clean up Android edge-to-edge layout#10
PureWeen merged 1 commit intomainfrom
cleanup-android-edge-to-edge

Conversation

@PureWeen
Copy link
Copy Markdown
Owner

@PureWeen PureWeen commented Feb 8, 2026

Changes

  • Remove custom SetDecorFitsSystemWindows/SetStatusBarColor/SetNavigationBarColor from MainActivity — .NET 10 MAUI handles edge-to-edge natively via ContentPage defaults
  • Remove redundant padding-bottom from html, body in app.css — the chat input area already handles bottom spacing via the --nav-bar-height CSS variable
  • Remove unnecessary Grid SafeAreaEdges wrapper from MainPage.xaml
  • Simplify MainActivity to bare MauiAppCompatActivity with no custom OnCreate

- Remove custom SetDecorFitsSystemWindows/SetStatusBarColor from MainActivity
  (.NET 10 MAUI handles edge-to-edge natively via ContentPage defaults)
- Remove redundant body padding-bottom from app.css (chat input area already
  handles bottom safe area via --nav-bar-height CSS variable)
- Remove unnecessary Grid SafeAreaEdges wrapper from MainPage.xaml
- Add SetFitsSystemWindows(false) on WebView for proper edge-to-edge rendering
@PureWeen PureWeen force-pushed the cleanup-android-edge-to-edge branch from 5934d84 to d890e6b Compare February 8, 2026 22:43
@PureWeen PureWeen merged commit 045fb22 into main Feb 8, 2026
PureWeen added a commit that referenced this pull request Feb 19, 2026
- Fix #9 off-by-one: CurrentIteration==0 check unreachable (now ==1)
- Fix #10 incomplete: set IsCancelled on OperationCanceledException
- Fix ConsecutiveErrors: reset to 0 after successful iteration
- Fix #11 stale comments: update hash references to string equality
- Fix #12 incomplete: mark pruned ghost evaluators in _closedSessionIds

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PureWeen added a commit that referenced this pull request Feb 20, 2026
Concurrency fixes:
- Swap _sessions before wiring event handler on reconnect (#2)
- Block ALL events from orphaned handlers, not just terminal (#3)
- Add lock(_imageQueueLock) to all image queue mutations (#4)
  including dequeue, reinsert, ClearQueue, rename, close, dispose
- Clear IsResumed on error and watchdog paths (#5)
- Add RunContinuationsAsynchronously to remaining TCS (#6)

Architecture/contract fixes:
- Add [JsonIgnore] to ShouldWarnOnStall, LastSimilarity (#7)
- Fix ConsecutiveErrors increment-before-check ordering (#8)
- Set IsCancelled on all non-success termination paths (#10)
  including stall, error-stall, max-iteration, OperationCanceled,
  empty-assignment error stall, and single-agent StopReflectionCycle
- Add session dir deletion for ghost evaluator pruning (#12)
- Add CompletedAt to StopReflectionCycle (#12 related)

Already correct (no changes needed):
- #9: CurrentIteration == 1 check was already fixed
- #11: Comments already reference string-based stall detection

Documentation:
- Update stall detection from 'hash match' to 'string equality'
- Update error handling to show ConsecutiveErrors (not ConsecutiveStalls)
- Add IsCancelled invariant to exit conditions table
- Add 5 new invariants: orphan gate, reconnect ordering,
  image queue locking, IsResumed clearing, TCS creation
- Document empty-assignment retry behavior

817/817 tests pass.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@PureWeen PureWeen deleted the cleanup-android-edge-to-edge branch February 22, 2026 00:16
PureWeen added a commit that referenced this pull request Mar 15, 2026
…r feedback

Fixes 3 moderate issues from PR Review Squad consensus:

1. SessionSidebar crash.log uses CopilotService.BaseDir instead of
   hardcoded UserProfile path (consistent with other file paths)

2. Replace File.ReadAllLines with ReadLastLines helper that streams
   without loading entire file — fixes both crash.log (10 lines)
   and event-diagnostics.log (500 lines tail) paths

3. Add user-visible system message when orchestrator queues a message
   ('📋 Orchestrator is busy...') so users know their message was received

Also updates skill documentation:
- multi-agent-orchestration SKILL.md: steering-orchestrator conflict bug,
  premature session.idle truncation bug
- processing-state-safety SKILL.md: path #10 TurnStart re-arm

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PureWeen added a commit that referenced this pull request Mar 15, 2026
…r feedback

Fixes 3 moderate issues from PR Review Squad consensus:

1. SessionSidebar crash.log uses CopilotService.BaseDir instead of
   hardcoded UserProfile path (consistent with other file paths)

2. Replace File.ReadAllLines with ReadLastLines helper that streams
   without loading entire file — fixes both crash.log (10 lines)
   and event-diagnostics.log (500 lines tail) paths

3. Add user-visible system message when orchestrator queues a message
   ('📋 Orchestrator is busy...') so users know their message was received

Also updates skill documentation:
- multi-agent-orchestration SKILL.md: steering-orchestrator conflict bug,
  premature session.idle truncation bug
- processing-state-safety SKILL.md: path #10 TurnStart re-arm

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PureWeen added a commit that referenced this pull request Mar 15, 2026
…r feedback

Fixes 3 moderate issues from PR Review Squad consensus:

1. SessionSidebar crash.log uses CopilotService.BaseDir instead of
   hardcoded UserProfile path (consistent with other file paths)

2. Replace File.ReadAllLines with ReadLastLines helper that streams
   without loading entire file — fixes both crash.log (10 lines)
   and event-diagnostics.log (500 lines tail) paths

3. Add user-visible system message when orchestrator queues a message
   ('📋 Orchestrator is busy...') so users know their message was received

Also updates skill documentation:
- multi-agent-orchestration SKILL.md: steering-orchestrator conflict bug,
  premature session.idle truncation bug
- processing-state-safety SKILL.md: path #10 TurnStart re-arm

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PureWeen added a commit that referenced this pull request Mar 16, 2026
…r feedback

Fixes 3 moderate issues from PR Review Squad consensus:

1. SessionSidebar crash.log uses CopilotService.BaseDir instead of
   hardcoded UserProfile path (consistent with other file paths)

2. Replace File.ReadAllLines with ReadLastLines helper that streams
   without loading entire file — fixes both crash.log (10 lines)
   and event-diagnostics.log (500 lines tail) paths

3. Add user-visible system message when orchestrator queues a message
   ('📋 Orchestrator is busy...') so users know their message was received

Also updates skill documentation:
- multi-agent-orchestration SKILL.md: steering-orchestrator conflict bug,
  premature session.idle truncation bug
- processing-state-safety SKILL.md: path #10 TurnStart re-arm

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PureWeen added a commit that referenced this pull request Apr 17, 2026
…ion, case sensitivity

Finding #13: PathsEqual now accepts nullable parameters and returns false
for null/empty/whitespace inputs instead of throwing ArgumentNullException.
This prevents crashes when existing.BareClonePath is null or empty (e.g.,
old/migrated state or failed clone).

Finding #10: Split the else branch in AddRepositoryFromLocalAsync so a
true hash collision (same localId, different path) generates a fresh GUID-
based ID instead of silently creating a duplicate.

DeterministicPathHash: Case-fold only on Windows/macOS (case-insensitive
filesystems). Linux (case-sensitive) preserves original casing so two
paths differing only in case produce distinct hashes.

Added 4 tests for PathsEqual null/empty/whitespace handling.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
PureWeen added a commit that referenced this pull request Apr 19, 2026
CRITICAL fixes:
- #1 Test isolation: add [Collection("BaseDir")], restore dir in finally
  blocks, register in TestSetup.Initialize()
- #2 Stale state: only set _analyzerSessionName AFTER CreateSessionAsync
  succeeds, clear on failure
- #3 Prompt injection: remove autonomous PR-creation instructions, change
  to report-only mode ("Do NOT autonomously create branches or PRs")

MODERATE fixes:
- #4 Lifecycle: implement IAsyncDisposable, add StopAsync() that awaits
  _analysisLoop with 5s timeout, nulls _analyzerSessionName
- #5 (Feature activation deferred to UI integration PR)
- #6 Model slug: fix "claude-sonnet-4-5" → "claude-sonnet-4.5"
- #7 Timeout: wrap SendPromptAsync in 10-minute linked CancellationToken
- #8 Interval validation: clamp to Math.Max(1, value) in settings setter
  and in StartAsync
- #9 TailFile: use Queue<string> ring buffer instead of List, cap file
  read to MaxLogFileSizeBytes (10 MB)

OTHER fixes:
- #10 Remove TestHelpers class, use private CreateService() method
- Thread safety: use Interlocked for AnalysisCount and LastAnalysisAt
- Torn reads: snapshot GetAllSessions() with .ToList()
- 14 tests (up from 8): new tests for TailFile, interval clamping,
  DisposeAsync, RunSingleAnalysis null guard, report-only prompt

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant