Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
b2ebcf0
fix(cli): fail closed on forward token errors
raphaeltm Aug 5, 2026
8d5959e
chore(deps): bump CodSpeedHQ/action from 5.0.2 to 5.0.3
dependabot[bot] Aug 10, 2026
ab940c1
chore(deps): bump dorny/paths-filter from 4.0.2 to 4.0.3
dependabot[bot] Aug 10, 2026
3091c10
chore(deps): bump github.com/pelletier/go-toml/v2 in /packages/vm-agent
dependabot[bot] Aug 10, 2026
62744a4
chore(deps): bump dompurify from 3.4.11 to 3.4.13
dependabot[bot] Aug 10, 2026
678f0e0
chore(deps): bump anthropics/claude-code-action from 1.0.183 to 1.0.189
dependabot[bot] Aug 11, 2026
5aa691b
chore(deps): bump @typescript-eslint/parser from 8.65.0 to 8.67.0
dependabot[bot] Aug 16, 2026
4de3bdd
chore(deps): bump recharts from 3.10.0 to 3.10.1
dependabot[bot] Aug 16, 2026
aa0dcbd
task: add terminal jwt logout revocation
raphaeltm Aug 16, 2026
34b2a94
task: start terminal jwt logout revocation
raphaeltm Aug 16, 2026
bcae5c2
fix(security): bind terminal tokens to auth sessions
raphaeltm Aug 16, 2026
22c273c
task: add stale compose release reconciliation
raphaeltm Aug 16, 2026
c8a8795
task: activate stale compose release reconciliation
raphaeltm Aug 16, 2026
0f5c4ce
fix(security): preserve internal attachment uploads
raphaeltm Aug 16, 2026
4eab4d4
task: document terminal revocation validation
raphaeltm Aug 16, 2026
8cfe208
task: add terminal revocation review evidence
raphaeltm Aug 16, 2026
da37807
fix: reconcile stale compose releases
raphaeltm Aug 16, 2026
8cbc365
task: record stale release review evidence
raphaeltm Aug 16, 2026
24854e6
fix(security): bind terminal tokens to session tokens
raphaeltm Aug 16, 2026
bfe27ee
task: record stale release staging evidence
raphaeltm Aug 16, 2026
5a46366
ci: sync release reconciliation deploy vars
raphaeltm Aug 16, 2026
630ecb6
task: record terminal revocation staging evidence
raphaeltm Aug 16, 2026
efee532
task: archive terminal revocation work
raphaeltm Aug 16, 2026
1a6851f
ci: renumber release reconciliation migration
raphaeltm Aug 16, 2026
3ec550c
task: archive stale release reconciliation
raphaeltm Aug 16, 2026
b0432b4
task: record stale release PR completion
raphaeltm Aug 16, 2026
2300968
chore: save agent work
raphaeltm Aug 16, 2026
ba1841c
chore(deps): bump pnpm/action-setup from 6.0.9 to 6.0.10
dependabot[bot] Aug 16, 2026
7906662
Merge PR #1838 into batch 3 integration: server-side terminal JWT rev…
raphaeltm Aug 17, 2026
d890e7c
Merge PR #1837 into batch 3 integration: stale compose deployment rel…
raphaeltm Aug 17, 2026
35d2d02
Merge PR #1738 into batch 3 integration: CLI local forwarding fail-cl…
raphaeltm Aug 17, 2026
f7cd272
Merge PR #1809 into batch 3 integration: anthropics/claude-code-actio…
raphaeltm Aug 17, 2026
a795900
Merge PR #1794 into batch 3 integration: dorny/paths-filter 4.0.3 (he…
raphaeltm Aug 17, 2026
9ddc0bc
Merge PR #1793 into batch 3 integration: CodSpeedHQ/action 5.0.3 (hea…
raphaeltm Aug 17, 2026
2141d8b
Merge PR #1789 into batch 3 integration: pnpm/action-setup 6.0.10 (he…
raphaeltm Aug 17, 2026
54e3269
Merge PR #1795 into batch 3 integration: go-toml/v2 2.4.3 (head 3091c…
raphaeltm Aug 17, 2026
c4e6c93
Merge PR #1799 into batch 3 integration: dompurify 3.4.13 (head 62744…
raphaeltm Aug 17, 2026
0802a5c
Merge PR #1798 into batch 3 integration: recharts 3.10.1 (head 4de3bd…
raphaeltm Aug 17, 2026
d280456
Merge PR #1800 into batch 3 integration: @typescript-eslint/parser 8.…
raphaeltm Aug 17, 2026
6c3e03e
fix(ci): resolve batch 3 integration collisions
raphaeltm Aug 17, 2026
8ea9638
fix(ci): restore applied migration filename and harden dependabot skip
raphaeltm Aug 17, 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
4 changes: 4 additions & 0 deletions .claude/skills/env-reference/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -112,6 +112,10 @@ See `apps/api/.env.example` for the full list. Key variables:
- `DEPLOYMENT_RELEASE_RETENTION_BATCH_SIZE` — Maximum terminal release rows deleted per run (default: `250`)
- `DEPLOYMENT_RELEASE_RETENTION_INTERVAL_HOURS` — Minimum interval between release retention runs (default: `24`)
- `DEPLOYMENT_RELEASE_RETENTION_LAST_RUN_KV_KEY` — KV interval marker (default: `cleanup:deployment-releases:last-run`)
- `DEPLOYMENT_RELEASE_RECONCILIATION_ENABLED` — Kill switch for stale nonterminal compose release reconciliation (default: enabled)
- `DEPLOYMENT_RELEASE_RECONCILIATION_BATCH_SIZE` — Maximum stale nonterminal releases terminalized before retention pruning in one run (default: `50`)
- `DEPLOYMENT_RELEASE_RECONCILIATION_STALE_HOURS` — Minimum release status age before reconciliation can mark a nonterminal release failed (default: `168`)
- `DEPLOYMENT_RELEASE_RECONCILIATION_ACTIVITY_GRACE_HOURS` — Recent release-event protection window for active fetch/apply work (default: `6`)
- `COMPOSE_IMAGE_ARTIFACT_CLEANUP_BATCH_SIZE` — Maximum abandoned compose archives deleted per daily run (default: `250`)

### Guided Agent Credential Setup
Expand Down
2 changes: 1 addition & 1 deletion .codex/config.toml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ project_doc_fallback_filenames = ["CLAUDE.md"]
# Added by SAM vm-agent for Codex ACP sessions.
sandbox_mode = "danger-full-access"
approval_policy = "never"
model_reasoning_effort = "high"
model_reasoning_effort = "xhigh"
[mcp_servers.sam-mcp]
url = "https://api.simple-agent-manager.org/mcp"
bearer_token_env_var = "SAM_MCP_TOKEN"
Expand Down
45 changes: 29 additions & 16 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ jobs:
go-modules: ${{ steps.filter.outputs.go-modules }}
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- uses: dorny/paths-filter@7b450fff21473bca461d4b92ce414b9d0420d706 # v4.0.2
- uses: dorny/paths-filter@ceb8a2b8f2d89434be7ff52d3de7ec3738c5cc9d # v4.0.3
id: filter
with:
filters: |
Expand Down Expand Up @@ -85,7 +85,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand All @@ -95,7 +95,20 @@ jobs:
- name: Install dependencies
run: pnpm install --frozen-lockfile

# Preflight evidence documents an agent's pre-implementation research. Dependabot
# opens PRs from a fixed template and cannot produce that evidence, so the check
# is unsatisfiable for it and leaves the whole dependency lane permanently red.
# The stale-binary guard below still runs for every author.
#
# Both identities are required. `user.login` is frozen when the PR is opened, and
# dependabot branches live in this repo rather than a fork, so anyone with push
# access can add a commit to an open dependabot/** branch without changing it.
# `github.actor` is the actor of THIS event, so a human push flips it back and the
# evidence check runs again. Skip only when both say dependabot.
- name: Validate agent preflight evidence
if: >-
github.actor != 'dependabot[bot]' ||
github.event.pull_request.user.login != 'dependabot[bot]'
run: pnpm quality:preflight

- name: Validate no stale binary artifacts are tracked
Expand All @@ -109,7 +122,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand All @@ -130,7 +143,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand All @@ -153,7 +166,7 @@ jobs:
with:
fetch-depth: 0

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand Down Expand Up @@ -192,7 +205,7 @@ jobs:
with:
fetch-depth: 0

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand Down Expand Up @@ -234,7 +247,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand All @@ -258,7 +271,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand All @@ -282,7 +295,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand All @@ -303,7 +316,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand Down Expand Up @@ -355,7 +368,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand Down Expand Up @@ -413,7 +426,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand Down Expand Up @@ -454,7 +467,7 @@ jobs:
with:
fetch-depth: 0

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand Down Expand Up @@ -522,7 +535,7 @@ jobs:
- name: Assert Go version
run: go version | grep -E '^go version go1\.26\.6 '

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand Down Expand Up @@ -551,7 +564,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand All @@ -578,7 +591,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/claude.yml
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@ jobs:

- name: Run Claude Code
id: claude
uses: anthropics/claude-code-action@be7b93b1907a4abad570368f3c74b6fe3807510b # v1
uses: anthropics/claude-code-action@6b082c41935b4c8a3b8b0ef85ba4ba4d9eeb8975 # v1
with:
claude_code_oauth_token: ${{ secrets.CLAUDE_CODE_OAUTH_TOKEN }}
allowed_bots: 'simple-agent-manager'
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/codspeed.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand All @@ -34,7 +34,7 @@ jobs:
run: pnpm install --frozen-lockfile

- name: Run benchmarks
uses: CodSpeedHQ/action@0ca9cbbf4623b599a6c3ed4fc8a922942705d9f1 # v5.0.2
uses: CodSpeedHQ/action@4296e51e7041e24dadb86d1d6e8b9320d223dbe8 # v5.0.3
with:
mode: simulation
run: pnpm --filter @simple-agent-manager/shared exec vitest bench --run
2 changes: 1 addition & 1 deletion .github/workflows/d1-restore.yml
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand Down
10 changes: 9 additions & 1 deletion .github/workflows/deploy-reusable.yml
Original file line number Diff line number Diff line change
Expand Up @@ -148,7 +148,7 @@ jobs:
fi

- name: Setup pnpm
uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand Down Expand Up @@ -407,6 +407,10 @@ jobs:
DEPLOYMENT_RELEASE_RETENTION_BATCH_SIZE: ${{ vars.DEPLOYMENT_RELEASE_RETENTION_BATCH_SIZE }}
DEPLOYMENT_RELEASE_RETENTION_INTERVAL_HOURS: ${{ vars.DEPLOYMENT_RELEASE_RETENTION_INTERVAL_HOURS }}
DEPLOYMENT_RELEASE_RETENTION_LAST_RUN_KV_KEY: ${{ vars.DEPLOYMENT_RELEASE_RETENTION_LAST_RUN_KV_KEY }}
DEPLOYMENT_RELEASE_RECONCILIATION_ENABLED: ${{ vars.DEPLOYMENT_RELEASE_RECONCILIATION_ENABLED }}
DEPLOYMENT_RELEASE_RECONCILIATION_BATCH_SIZE: ${{ vars.DEPLOYMENT_RELEASE_RECONCILIATION_BATCH_SIZE }}
DEPLOYMENT_RELEASE_RECONCILIATION_STALE_HOURS: ${{ vars.DEPLOYMENT_RELEASE_RECONCILIATION_STALE_HOURS }}
DEPLOYMENT_RELEASE_RECONCILIATION_ACTIVITY_GRACE_HOURS: ${{ vars.DEPLOYMENT_RELEASE_RECONCILIATION_ACTIVITY_GRACE_HOURS }}
SESSION_SNAPSHOT_PURGE_ENABLED: ${{ vars.SESSION_SNAPSHOT_PURGE_ENABLED }}
SESSION_SNAPSHOT_PURGE_BATCH_SIZE: ${{ vars.SESSION_SNAPSHOT_PURGE_BATCH_SIZE }}
SESSION_SNAPSHOT_RECOVERY_MAX_ATTEMPTS: ${{ vars.SESSION_SNAPSHOT_RECOVERY_MAX_ATTEMPTS }}
Expand Down Expand Up @@ -764,6 +768,10 @@ jobs:
DEPLOYMENT_RELEASE_RETENTION_BATCH_SIZE: ${{ vars.DEPLOYMENT_RELEASE_RETENTION_BATCH_SIZE }}
DEPLOYMENT_RELEASE_RETENTION_INTERVAL_HOURS: ${{ vars.DEPLOYMENT_RELEASE_RETENTION_INTERVAL_HOURS }}
DEPLOYMENT_RELEASE_RETENTION_LAST_RUN_KV_KEY: ${{ vars.DEPLOYMENT_RELEASE_RETENTION_LAST_RUN_KV_KEY }}
DEPLOYMENT_RELEASE_RECONCILIATION_ENABLED: ${{ vars.DEPLOYMENT_RELEASE_RECONCILIATION_ENABLED }}
DEPLOYMENT_RELEASE_RECONCILIATION_BATCH_SIZE: ${{ vars.DEPLOYMENT_RELEASE_RECONCILIATION_BATCH_SIZE }}
DEPLOYMENT_RELEASE_RECONCILIATION_STALE_HOURS: ${{ vars.DEPLOYMENT_RELEASE_RECONCILIATION_STALE_HOURS }}
DEPLOYMENT_RELEASE_RECONCILIATION_ACTIVITY_GRACE_HOURS: ${{ vars.DEPLOYMENT_RELEASE_RECONCILIATION_ACTIVITY_GRACE_HOURS }}
SESSION_SNAPSHOT_PURGE_ENABLED: ${{ vars.SESSION_SNAPSHOT_PURGE_ENABLED }}
SESSION_SNAPSHOT_PURGE_BATCH_SIZE: ${{ vars.SESSION_SNAPSHOT_PURGE_BATCH_SIZE }}
SESSION_SNAPSHOT_RECOVERY_MAX_ATTEMPTS: ${{ vars.SESSION_SNAPSHOT_RECOVERY_MAX_ATTEMPTS }}
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/deploy-www.yml
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand Down
4 changes: 2 additions & 2 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ jobs:
- name: Checkout
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
- name: Setup pnpm
uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand Down Expand Up @@ -96,7 +96,7 @@ jobs:
with:
ref: refs/heads/main
- name: Setup pnpm
uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10
- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand Down
6 changes: 3 additions & 3 deletions .github/workflows/devcontainer-cache-experiments.yml
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86
with:
version: 9.15.9

Expand Down Expand Up @@ -114,7 +114,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86
with:
version: 9.15.9

Expand Down Expand Up @@ -209,7 +209,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86
with:
version: 9.15.9

Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/do-wall-time.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/e2e-smoke.yml
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/provision-www.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pulumi-state-repair.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/scheduler-lifecycle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
steps:
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
- uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
with:
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/teardown.yml
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,7 @@ jobs:
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1

- name: Setup pnpm
uses: pnpm/action-setup@0ebf47130e4866e96fce0953f49152a61190b271 # v6.0.9
uses: pnpm/action-setup@0977fd99725f1db4007ccb2928dbb4e90d06cc86 # v6.0.10

- name: Setup Node.js
uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
Expand Down
4 changes: 4 additions & 0 deletions apps/api/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -789,6 +789,10 @@ INFOMANIAK_IP_POLL_INTERVAL_MS=3000
# DEPLOYMENT_RELEASE_RETENTION_BATCH_SIZE=250 # Max terminal release rows deleted per run
# DEPLOYMENT_RELEASE_RETENTION_INTERVAL_HOURS=24 # Minimum hours between release retention runs
# DEPLOYMENT_RELEASE_RETENTION_LAST_RUN_KV_KEY=cleanup:deployment-releases:last-run
# DEPLOYMENT_RELEASE_RECONCILIATION_ENABLED=true # Set to false to disable stale nonterminal release reconciliation
# DEPLOYMENT_RELEASE_RECONCILIATION_BATCH_SIZE=50 # Max stale nonterminal releases terminalized per retention run
# DEPLOYMENT_RELEASE_RECONCILIATION_STALE_HOURS=168 # Minimum status age before reconciliation (7 days)
# DEPLOYMENT_RELEASE_RECONCILIATION_ACTIVITY_GRACE_HOURS=6 # Protect releases with recent fetch/apply events

# Account Map visualization
# ACCOUNT_MAP_MAX_ENTITIES=200 # Max entities per type from D1 (default: 200)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
-- Track deployment release status activity so scheduled reconciliation can
-- distinguish stale nonterminal releases from active apply/fetch work.
ALTER TABLE deployment_releases ADD COLUMN status_updated_at TEXT;

CREATE INDEX IF NOT EXISTS idx_deployment_releases_status_updated_at
ON deployment_releases(status, status_updated_at);
6 changes: 6 additions & 0 deletions apps/api/src/db/schema.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2773,6 +2773,8 @@ export const deploymentReleases = sqliteTable(
manifest: text('manifest').notNull(),
version: integer('version').notNull(),
status: text('status').notNull().default('created'),
/** Updated whenever the control plane changes release.status. Added in migration 0112. */
statusUpdatedAt: text('status_updated_at'),
// Discriminator for how the release was produced (migration 0073).
// NULL / 'build-on-node' = manifest is a DeploymentManifest.
// 'compose-publish' = manifest is a captured `docker compose publish`
Expand All @@ -2792,6 +2794,10 @@ export const deploymentReleases = sqliteTable(
table.version
),
sourceIdx: index('idx_deployment_releases_source').on(table.source),
statusUpdatedAtIdx: index('idx_deployment_releases_status_updated_at').on(
table.status,
table.statusUpdatedAt
),
})
);

Expand Down
Loading
Loading