Skip to content

chore(t3x): auto-build on a 12h cadence, not every main commit - #15

Merged
radroid merged 1 commit into
mainfrom
t3x/autobuild-12h-cadence
Jul 26, 2026
Merged

chore(t3x): auto-build on a 12h cadence, not every main commit#15
radroid merged 1 commit into
mainfrom
t3x/autobuild-12h-cadence

Conversation

@radroid

@radroid radroid commented Jul 26, 2026

Copy link
Copy Markdown
Owner

Why

The desktop auto-build watcher (scripts/t3x/auto-build-desktop.sh --watch) polled HEAD every 60s (120s in the running LaunchAgent) and rebuilt whenever main advanced. On an active repo that means near-continuous ~470MB .dmg rebuilds — the laptop never settles. Requested change: build on a slow, deliberate cadence (at most every 12h, only if main changed), keep manual builds, and stop failures from retrying every 30 min.

Changes (scripts/t3x/auto-build-desktop.sh)

  • Default --watch interval 6043200 (12h). The watcher still rebuilds only when main changed since the last build (build_once is a no-op on unchanged HEAD); it no longer tracks every commit. It does not rebuild the instant main moves — a change is picked up at the next poll.
  • Failure backoff caps at max(30min, interval) instead of a flat 30 min. On the 12h cadence a persistently failing build now retries every 12h, not ~48×/day. Short intervals still top out at 30 min (unchanged). This also fixes the new cap line to assign the value (delay="$cap"), not the literal string cap — caught by a backoff arithmetic unit-check.
  • Docs/usage updated.

A one-shot manual build (scripts/t3x/auto-build-desktop.sh --install) still bypasses the interval entirely.

Verification

  • bash -n (syntax) clean.
  • Backoff arithmetic checked for both cadences: INTERVAL=60 → 120/480/1800s (unchanged); INTERVAL=43200 → 43200s at every failure count.
  • --help reflects the new default.

Operational note: the running dev.t3x.autobuild LaunchAgent's --interval was already switched to 43200 out of band and the build marker seeded to current main, so it is on the 12h cadence now and did not trigger a build on reload. This PR makes that cadence the script's own default so a regenerated plist inherits it.

🤖 Generated with Claude Code

The desktop auto-build watcher polled HEAD every 60s (120s in the running
LaunchAgent) and rebuilt on every main change, so an active repo rebuilt the
~470MB dmg near-continuously. Slow it to a deliberate 12h cadence:

- Default --watch --interval 60 -> 43200 (12h). The watcher still rebuilds only
  when main changed since the last build; it no longer tracks every commit.
- Failure backoff caps at max(30min, interval) instead of a flat 30min, so on
  the 12h cadence a persistently failing build retries every 12h, not ~48x/day.
  (Also fixes the cap assignment to use the value, not the literal "cap".)
- Docs updated to match.

A one-shot manual build (plain --install) still bypasses the interval. The
running LaunchAgent's --interval was also updated to 43200 out of band.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 26, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: ASSERTIVE

Plan: Pro Plus

Run ID: 3a409c74-d050-4113-96cd-5eaa0bf6e2c4

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch t3x/autobuild-12h-cadence

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@radroid
radroid merged commit d25ec9d into main Jul 26, 2026
1 check passed
@radroid
radroid deleted the t3x/autobuild-12h-cadence branch July 30, 2026 14:23
radroid added a commit that referenced this pull request Aug 18, 2026
…s package

A five-axis review (standards / spec / claim re-verification / internal
consistency / prototype QA) turned up 102 findings, ~60 unique. The
load-bearing ones, all verified against the code before editing:

- The compose-don't-replace correction was applied unevenly: the check-in
  prompt still said "I am the scheduler for this thread. Do not schedule
  your own wake-ups", the report kept the CLAUDE_CODE_DISABLE_CRON switch
  PLAN drops, and the report's deferred table still had session_crons in
  Phase 3. All now carry the composed story.
- Deference now matches #42's Guard #15: T3 stands down while a recorded
  wake is pending regardless of distance (the binary clamps at 3600s),
  and fires wake_lost only past a new wakeGraceMs. TESTS 11c reworded.
- session_crons carries a cron EXPRESSION, not a timestamp
  (SessionCronSummary in sdk.d.ts 0.3.170) — the nextFireAtMs parse is
  the fork's and is now an explicit [A].
- pingdotgg#5127's voiding was overstated: the aborted branch resolves the
  Deferred with {} but then DENIES the tool call while the session stops.
  What survives is user-input.resolved with empty answers — voided reads
  as answered downstream, which is still why the durable record exists.
- The §1.4 "second kill" is gone upstream (pingdotgg#5710, e70cdb4): the
  no-turnState branch emits token usage plus a log, no lifecycle event.
- total_cost_usd is stamped onto turn.completed.totalCostUsd, not
  "unread"; nothing aggregates it, and its semantics stay [A].
- Numbers re-stamped on the a4cc136 ledger: ClaudeAdapter churn 16 /
  ~4.6k lines, orchestration.ts 20, settingsSearch.ts 14, SettingsPanels
  36/2088, contracts/settings 26, the _chat row churn 4 / risk 64 (the
  fork's added delta stays 0), Sidebar +184/-81. #112 answered with
  measured churn (RightPanelTabs 14, rightPanelStore 7).
- Seam accounting unified on PLAN §6 (3 rows, phases 1-4);
  SETTINGS_SECTION_ICONS attributed to SettingsSidebarNav.tsx; the
  "search-invisible" claim dropped (the id union is derived).
- Fork main SHAs are rewritten by every sync, so the docs now anchor on
  the merge-base; the 08-18 force-rewrite to 94c6328 is recorded.
- Report section refs renumbered after the mobile insert (§13→§14 etc.),
  the 137-sum test table now sums to 159, the orphaned decision-4 chips
  and the four-vs-five scenario counts fixed.
- Prototypes: tokens re-lifted where they had drifted ([data-app-sidebar]
  values, sky-300 not sky-400, computed base literals), p5 gains the
  self-pacing and wake-lost states (15 total), the spinner became the
  product's stepped pulse, switches got role/aria, p2 prices the sidebar
  row chrome honestly (deferred — it would be a new Sidebar.tsx row),
  p6/p3 align with #44's v1 contract (never pushes, PRs opt-in later).
- build-report.mjs: function replacer, escapeHtml on marker fields, a
  GENERATED banner in the output, honest self-containedness claim, +x.
- LoopRecord gains the checkIns array the console's ledger reads;
  workSource leaves phase 1 (lands with #44); stop-with-pending-crons
  now calls stopSession, the honest cancel from #42 1c.
- The archived loop/ design's DESIGN.md banner no longer overclaims, and
  its report.html carries a superseded pointer.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.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