Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
7b593e4
Add habit widget empty reason (#527)
thomasluizon Sep 16, 2026
fd21912
ORB-223: Generate gating matrix from PayGateService (#520)
thomasluizon Sep 17, 2026
b6a9296
chore: fall back to Claude only when the Codex reviewer step fails (#…
thomasluizon Sep 18, 2026
313b74b
Let the executor own the MCP confirmation gate (#599) (#534)
thomasluizon Sep 24, 2026
e315e06
Fix calendar event timezone projection (#521)
thomasluizon Sep 24, 2026
dd9475e
Bump FluentAssertions and 23 others (#538)
dependabot[bot] Sep 24, 2026
b1593ff
Give API key management one authorization concept with two doors (#528)
thomasluizon Sep 24, 2026
9050580
Expose habit emoji in MCP tools (#513) (#546)
thomasluizon Sep 25, 2026
dc68392
Prevent stale pull request workflow runs for #659 (#555)
thomasluizon Sep 25, 2026
ad018bd
Fix #657 logout revocation across a session family (#553)
thomasluizon Sep 25, 2026
17d8516
Fix #588 bulk habit interval weeks (#539)
thomasluizon Sep 25, 2026
d5bc4bf
Guarantee crisis resources in Astra chat for #319 (#547)
thomasluizon Sep 25, 2026
ba419ce
Record streak freeze source for #571 (#540)
thomasluizon Sep 25, 2026
fbbbc97
Keep support tool available for support entry point (#541)
thomasluizon Sep 25, 2026
68340f1
Expose scheduled streak repair gap dates for #505 (#542)
thomasluizon Sep 25, 2026
14ff92e
Fix standalone sub habit title validation for #628 (#543)
thomasluizon Sep 25, 2026
76ea616
Carry the onboarding repeat interval into the created habit (#596) (#…
thomasluizon Sep 25, 2026
30d58ae
Expose recurrence time zone in calendar events for #591 (#544)
thomasluizon Sep 25, 2026
44b1e3b
Project safe calendar BYDAY recurrences (#569) (#545)
thomasluizon Sep 25, 2026
1daba70
Add closed week and year recap ranges for #369 (#548)
thomasluizon Sep 25, 2026
7410e59
Fix Google sign-in after concurrent user updates (#551)
thomasluizon Sep 25, 2026
1e6f85f
Fix duplicate agent confirmation consumption (#557)
thomasluizon Sep 25, 2026
7d13802
fix: show newest habit completion date in profile (#549)
thomasluizon Sep 25, 2026
d3e7bc8
Recover concurrent habit log duplicates (#325) (#552)
thomasluizon Sep 25, 2026
489b5e5
chore(deps): bump the github-actions group across 1 directory with 5 …
dependabot[bot] Sep 25, 2026
6d84cdc
ORB-101: verify Turnstile tokens on anonymous writes (#550)
thomasluizon Sep 25, 2026
0e39f07
Fix Astra goal access for every plan (#677) (#560)
thomasluizon Sep 25, 2026
b2af8a0
fix: accept stored recap week anchors after preference changes (#683)…
thomasluizon Sep 25, 2026
81b927c
Prune idle Hangfire session connections for #564 (#554)
thomasluizon Sep 25, 2026
09c6b78
Bump Scalar.AspNetCore from 2.17.9 to 2.17.10 (#558)
dependabot[bot] Sep 25, 2026
d6e6178
Make unsubscribe token tampering test byte-accurate (#673) (#561)
thomasluizon Sep 25, 2026
639d60d
Make goal completion timestamp test deterministic (#676) (#562)
thomasluizon Sep 25, 2026
dbc393c
Pin Pullfrog reviewer to GPT 6 Sol medium (#636) (#537)
thomasluizon Sep 25, 2026
d1cf365
Take Pullfrog model and effort from the repository config (#565)
thomasluizon Sep 25, 2026
8c4cc61
Fix relative reminders across local day boundaries (#566)
thomasluizon Sep 25, 2026
d268cdd
Fix bulk habit replay idempotency (#567)
thomasluizon Sep 26, 2026
8e4c6bc
Use published Pullfrog v0 for Codex review (#568)
thomasluizon Sep 26, 2026
caad746
docs: align worker PR handoff with ticket orders (#570)
thomasluizon Sep 26, 2026
e334af8
Fix child habit title messages on update for #651 (#572)
thomasluizon Sep 26, 2026
689e3b9
Fix explicit culture formatting for #704 (#569)
thomasluizon Sep 26, 2026
a1c666f
Fix last completion date after habit type changes (#574)
thomasluizon Sep 26, 2026
a5956f4
Clean stale text in API repository (#575)
thomasluizon Sep 26, 2026
23672bb
Add timeless text gate to API repository (#576)
thomasluizon Sep 26, 2026
39064d0
Sync timeless checker with mobile main (#578)
thomasluizon Sep 26, 2026
fecda0e
fix: align timeless checker with reviewed version (#580)
thomasluizon Sep 26, 2026
08248b3
Fix bulk habit replay plans across chat retries (#581)
thomasluizon Sep 26, 2026
f62369c
Pin FluentValidation default messages to English (#582)
thomasluizon Sep 26, 2026
b073761
Return a code for habit ceiling failures (#583)
thomasluizon Sep 26, 2026
c4b8ade
Fix Google signup race during session save (#584)
thomasluizon Sep 26, 2026
9fac86a
chore: generate architecture map outside git (#585)
thomasluizon Sep 26, 2026
105245c
Cascade bulk habit deletion through subtrees (#587)
thomasluizon Sep 26, 2026
159e757
Fix habit checklist reset and general-habit end dates (#586)
thomasluizon Sep 26, 2026
ba0c3e6
fix: keep database pool connections warm (#590)
thomasluizon Sep 26, 2026
59a0fea
Sync main fixes into redesign API for #746
thomasluizon Sep 26, 2026
4969e54
Complete error copy for synced habit guards
thomasluizon Sep 26, 2026
a6a6521
Refresh gating matrix provenance after copy sync
thomasluizon Sep 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions .github/workflows/arch-map.yml
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,11 @@ jobs:
node-version: 22
- name: Regenerate architecture map
run: node tools/arch-map.mjs
- name: Fail on drift
run: git diff --exit-code architecture.json architecture.html
- name: Publish architecture map
uses: actions/upload-artifact@v7
with:
name: architecture-map
path: |
architecture.json
architecture.html
if-no-files-found: error
4 changes: 4 additions & 0 deletions .github/workflows/dependency-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,10 @@ concurrency:
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.event.pull_request.number || github.run_id }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

concurrency:
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.event.pull_request.number || github.run_id }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

permissions:
contents: read

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/gating-matrix.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ jobs:
fi

- name: Publish the gating matrix
uses: actions/upload-artifact@v5
uses: actions/upload-artifact@v7
with:
name: gating-matrix
path: gating-matrix.json
Expand Down
16 changes: 4 additions & 12 deletions .github/workflows/pullfrog.yml
Original file line number Diff line number Diff line change
Expand Up @@ -49,32 +49,24 @@ jobs:
# VERTEX_LOCATION: global
# VERTEX_MODEL_ID: <vertex-model-id>

# for any OpenAI-compatible endpoint - LiteLLM, Cloudflare AI Gateway,
# self-hosted vLLM (https://docs.pullfrog.com/openai-compatible)
# OPENAI_COMPATIBLE_BASE_URL: https://litellm.example.com/v1
# OPENAI_COMPATIBLE_API_KEY: ${{ secrets.OPENAI_COMPATIBLE_API_KEY }}
# OPENAI_COMPATIBLE_MODEL: <model-id>
# both limits are required - set them to the real limits of that model
# OPENAI_COMPATIBLE_CONTEXT: "128000"
# OPENAI_COMPATIBLE_MAX_OUTPUT: "16384"
steps:
- name: Checkout code
uses: actions/checkout@v7
with:
fetch-depth: 1
# Codex is the reviewer. No model input, so Pullfrog resolves its own
# default exactly as before.
# Model and effort come from the Pullfrog repository config.
# Both steps pin the same commit because a moving tag is an unpinned dependency.
- name: Run agent
id: codex
uses: pullfrog/pullfrog@v0
uses: pullfrog/pullfrog@e9f81154ce83828fc8208d624c5ca9a1174d8909 # v0, release 0.1.83
continue-on-error: true
with:
prompt: ${{ inputs.prompt }}
# Claude reviews ONLY when the Codex step fails, which is what an
# exhausted OpenAI allowance looks like. Green runs never reach this.
- name: Run agent (Claude fallback)
if: steps.codex.outcome == 'failure'
uses: pullfrog/pullfrog@v0
uses: pullfrog/pullfrog@e9f81154ce83828fc8208d624c5ca9a1174d8909 # v0, release 0.1.83
with:
prompt: ${{ inputs.prompt }}
model: anthropic/claude-opus-5
4 changes: 4 additions & 0 deletions .github/workflows/sonarcloud.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,10 @@ concurrency:
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.event.pull_request.number || github.run_id }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

concurrency:
group: ${{ github.workflow }}-${{ github.event_name == 'pull_request' && github.event.pull_request.number || github.run_id }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

permissions:
contents: read

Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -63,3 +63,7 @@ caddy_config/

## Generated gating matrix
/gating-matrix.json

## Generated architecture map
/architecture.json
/architecture.html
3 changes: 3 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,9 @@ Instructions for Codex CLI workers. Claude Code reads CLAUDE.md; this file holds
worker contract and DEFERS to `CLAUDE.md` (same directory) for repo conventions. Read
CLAUDE.md before writing code.

Run `node tools/arch-map.mjs` before reading `architecture.json` or `architecture.html`.
Both files are generated locally and are not committed.

Pullfrog reviews every pull request from GitHub Actions. Its review instructions live in
the Pullfrog console, never in a repository file, because a pull request can edit any
file on its own head. Nothing here configures that review.
Expand Down
2 changes: 2 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@

Clean architecture, four projects: `Orbit.Api` → `Orbit.Application` → `Orbit.Domain` ← `Orbit.Infrastructure`. CQRS via MediatR. Commands and queries live per-feature folder in `Orbit.Application`. Domain entities use factory methods (`Habit.Create()`, `User.Create()`). Generic repository + Unit of Work in Infrastructure. Each project has a scoped `CLAUDE.md` — read those when editing inside that project.

Run `node tools/arch-map.mjs` before reading `architecture.json` or `architecture.html`. Both maps are generated locally and are not committed. The `arch-map` workflow runs the generator and publishes both maps as an artifact.

## Cross-cutting hard rules

These apply everywhere — they override project-local conventions if they conflict.
Expand Down
141 changes: 0 additions & 141 deletions architecture.html

This file was deleted.

Loading
Loading