Skip to content

Carry main into redesign/main: the habit schedule expansion and the suppression cleanup (#746) - #793

Merged
thomasluizon merged 2 commits into
redesign/mainfrom
thomasluizon/ticket-746-carry-792-791
Oct 19, 2026
Merged

thomasluizon merged 2 commits into
redesign/mainfrom
thomasluizon/ticket-746-carry-792-791

Conversation

@thomasluizon

Copy link
Copy Markdown
Owner

Summary

The standing main into redesign/main sync (thomasluizon/orbit-tickets#746). It carries two main commits with cherry-pick -x:

  • 7a708b5b (orbit-api#792, thomasluizon/orbit-tickets#227 step 1 of 3): the persisted HabitSchedule, an immutable StartDate creation anchor beside the existing flags, an honest backfill, append-only schedule and startDate habit response fields, and the compatibility trigger. The migration 20261019165331_ExpandHabitScheduleAndStartDate applies on the staging database at the next staging API release.
  • 05ab55f0 (orbit-api#791, thomasluizon/orbit-tickets#230): the handwritten pragma and SuppressMessage lines are removed and every finding they hid is fixed at its cause; the generated log helpers become extension methods.

Refs thomasluizon/orbit-tickets#746
Refs thomasluizon/orbit-tickets#227
Refs thomasluizon/orbit-tickets#230

Conflict resolution

  • src/Orbit.Api/openapi.json and openapi_v2.json: regenerated by dotnet build, not hand merged. Both carry schedule, startDate and the string HabitSchedule enum; FrequencyUnit is unchanged, so the onboarding request contract does not narrow.
  • tests/Orbit.Infrastructure.Tests/Persistence/FeatureFlagAccountsMigrationTests.cs: keeps the redesign branch's checks, reads the renewal columns from Users only, and asserts the observed difference count.
  • The migration's .Designer.cs target model and OrbitDbContextModelSnapshot.cs were regenerated for the redesign model (the redesign-only entities and AddAstraBlockAnswerReplay stay in it). The migration's Up, Down and trigger SQL are byte-identical to #792. A new test, TargetModel_PreservesRedesignAndMatchesCurrentModel, failed against the auto-merged main Designer and passes against the regenerated one; a ProbeNoChanges migration generated through OrbitDbContextFactory had an empty Up and Down and was deleted.
  • AgentCatalogService.*: #791's constructor and logging pattern applied with every redesign-only capability, surface and catalog entry (proactive, Notion) kept.
  • src/Orbit.Infrastructure/Services/ProactiveCheckinSchedulerService.cs stays deleted on this branch, so #791's edit to it and its allowlist entry are omitted.

Test evidence

dotnet build Orbit.slnx exit 0, with LANG unset and with LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8. dotnet test per project, both settings, every exit 0:

Project Passed per setting
Orbit.Domain.Tests 797
Orbit.Application.Tests 5,441
Orbit.Infrastructure.Tests 3,935
Orbit.Analyzers.Tests 40

The suppression guard tests pass 40 of 40. The OpenAPI Breaking-Change Gate runs in CI. A strict local rebuild with -p:TreatWarningsAsErrors=true reports the existing CS0618 (Message.Token deprecated in FirebaseAdmin) in PushNotificationService and its tests, which neither commit touches and the repository build does not treat as an error; main has the same code.

Assumptions

None.

Manual steps

After merge, release the staging API from redesign/main (GitHub Actions, Release API, environment=staging, branch=redesign/main), then verify /health, the live commit and the 20261019165331_ExpandHabitScheduleAndStartDate row in __EFMigrationsHistory. No new configuration or secrets.

🤖 Generated with Claude Code

* test: characterize habit schedules before expand step (ORB-221)

* feat: expand habit schedule and immutable start date (ORB-221)

* test: include habit expansion in schema preservation guard

* fix: address habit schedule review (thomasluizon/orbit-tickets#227)

* fix: preserve FrequencyUnit OpenAPI contract (ORB-221)

(cherry picked from commit 7a708b5)
#791)

* fix: recognize UTC timestamp sinks without date exemptions

* fix: guard generated logging arguments and remove blanket disables

* refactor: remove catalog suppression scaffolding without changing metadata

* fix: forward cancellation and remove obsolete library suppressions

* chore: record every suppression verdict and reject duplicate reasons

* fix: address suppression audit review for ticket 230

* fix: resolve suppression cleanup CI findings

Refs thomasluizon/orbit-tickets#230

* test: prove OAuth authorize query validation parity

(cherry picked from commit 05ab55f)
@sonarqubecloud

Copy link
Copy Markdown

@pullfrog pullfrog Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ No new issues found.

Reviewed changes Reviewed both carried commits against redesign/main, including persistence, client compatibility, and redesign-specific conflict resolutions.

  • Habit expansion: Adds persisted HabitSchedule and immutable StartDate alongside the existing fields, without switching scheduling readers or changing create/update requests.
  • Migration and rollout: Adds the guarded backfill, sync timestamp refresh, and legacy-writer compatibility trigger; preserves the redesign model in the regenerated migration Designer and snapshot.
  • Response compatibility: Appends optional fields to habit and sync responses and documents them in both OpenAPI versions; checked the sibling repository's shared schemas and preserved legacy fields.
  • Suppression cleanup: Reviews logging guards and extensions, OAuth query binding, MediatR cancellation forwarding, timestamp analyzer changes, and catalog simplification, including retained proactive and Notion entries.

Validation: 408 focused checks passed across domain, application, infrastructure, analyzer, and suppression-guard tests. GitHub Build, Unit Tests, and OpenAPI Breaking-Change Gate also passed. PostgreSQL trigger execution and live staging-data preflight were not repeated locally; source PR #792 documents PostgreSQL proof and the zero-invalid-row deployment prerequisite.

Pullfrog  | View workflow run | Using gpt-6.1-sol | 𝕏

@thomasluizon
thomasluizon merged commit 41afdb0 into redesign/main Oct 19, 2026
28 of 29 checks passed
@thomasluizon
thomasluizon deleted the thomasluizon/ticket-746-carry-792-791 branch October 19, 2026 21:07
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