Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
0b33ca9
fix(oauth): tighten legacy state validation and fallback handling (#1…
Mar 28, 2026
9bb19a9
fix(web): redact database error details from API responses (#1711)
Mar 28, 2026
9ce3a9f
feat(discord): implement on_broadcast via DM channel creation (#1693)
Mar 28, 2026
de5a1c7
fix(worker): replace script -qfc with pty-process for injection-safe …
j-bloggs Mar 28, 2026
fd41bdf
fix(worker): treat empty LLM response after text output as completion…
j-bloggs Mar 28, 2026
8a320ae
fix(routines): complete full_job execution reliability overhaul (#1650)
ilblackdragon Mar 28, 2026
a8e8321
feat(discord): add gateway channel flow in wasm (#944)
hdward-dev Mar 29, 2026
e0e530e
docs: tighten contribution and PR guidance (#1704)
serrrfirat Mar 29, 2026
6f6a5f1
feat(skills): recursive bundle directory scanning for skill discovery…
rajulbhatnagar Mar 29, 2026
d97c014
Clarify message tool vs channel setup guidance (#1715)
henrypark133 Mar 29, 2026
fcab4f0
fix: pin staging ci jobs to a single tested sha (#1628)
henrypark133 Mar 29, 2026
86389da
fix(gemini): preserve thought signatures on all tool calls (#1565)
G7CNF Mar 29, 2026
64fe9ba
fix: prevent UTF-8 panics in byte-index string truncation (#1688)
zmanian Mar 29, 2026
70214c4
fix(bedrock): strip tool blocks from messages when toolConfig is abse…
rajulbhatnagar Mar 29, 2026
de384b0
feat: support custom LLM provider configuration via web UI (#1340)
italic-jinxin Mar 29, 2026
4f277c9
Handle empty tool completions in autonomous jobs (#1720)
henrypark133 Mar 29, 2026
368d2f5
feat(gateway): OIDC JWT authentication for reverse-proxy deployments …
synner88 Mar 29, 2026
8acdd08
fix(wasm): inject Content-Length: 0 for bodyless mutating HTTP reques…
werdan Mar 30, 2026
c75dea0
fix(auth): make shared Google tool status scope-aware (#1532)
G7CNF Mar 30, 2026
10d5a53
fix: resolve 11 test failures from multi-tenant bootstrap and sandbox…
ilblackdragon Mar 30, 2026
d0f7862
fix(slack): respond to thread replies without requiring @mention (#1405)
synner88 Mar 30, 2026
d567d94
fix(routines): clone Arc before await in web handler event cache refr…
ilblackdragon Mar 30, 2026
21f613f
test(e2e): align WASM reinstall expectation with uninstall cleanup (#…
henrypark133 Mar 30, 2026
8be61c2
Merge pull request #1763 from nearai/staging-promote/21f613ff-2376117…
henrypark133 Mar 30, 2026
ac79803
Merge pull request #1761 from nearai/staging-promote/d567d94c-2375525…
henrypark133 Mar 30, 2026
30a3e59
Merge pull request #1755 from nearai/staging-promote/d0f7862a-2373313…
henrypark133 Mar 30, 2026
e6c568a
Merge pull request #1753 from nearai/staging-promote/c75dea0e-2373121…
henrypark133 Mar 30, 2026
527b88e
Merge pull request #1747 from nearai/staging-promote/8acdd080-2372603…
henrypark133 Mar 30, 2026
afc8342
Merge pull request #1744 from nearai/staging-promote/368d2f52-2372018…
henrypark133 Mar 30, 2026
a3e20d3
Merge pull request #1743 from nearai/staging-promote/70214c4a-2371907…
henrypark133 Mar 30, 2026
af7925e
Merge pull request #1737 from nearai/staging-promote/86389dab-2370669…
henrypark133 Mar 30, 2026
26f7919
Merge pull request #1735 from nearai/staging-promote/e0e530e6-2370308…
henrypark133 Mar 30, 2026
57aa387
Merge pull request #1733 from nearai/staging-promote/a8e83210-2370234…
henrypark133 Mar 30, 2026
1eac17e
Merge pull request #1732 from nearai/staging-promote/8a320ae9-2369326…
henrypark133 Mar 30, 2026
7e07c9d
Merge pull request #1730 from nearai/staging-promote/fd41bdf4-2369114…
henrypark133 Mar 30, 2026
ce0096f
Merge pull request #1728 from nearai/staging-promote/de5a1c7b-2368897…
henrypark133 Mar 30, 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
17 changes: 12 additions & 5 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

## Change Type

<!-- Check one -->
<!-- Check all that apply. Refactor-only PRs are for core team or maintainer-requested work. -->

- [ ] Bug fix
- [ ] New feature
Expand All @@ -18,16 +18,19 @@

## Linked Issue

<!-- Closes #N, or "None" -->
<!-- Closes #N, Fixes #N, Related #N, or "None". New feature PRs must link an approved issue. -->

## Validation

<!-- How did you verify this works? -->

- [ ] `cargo fmt`
- [ ] `cargo clippy --all --benches --tests --examples --all-features`
- [ ] `cargo fmt --all -- --check`
- [ ] `cargo clippy --all --benches --tests --examples --all-features -- -D warnings`
- [ ] `cargo build`
- [ ] Relevant tests pass: <!-- list specific tests -->
- [ ] `cargo test --features integration` if database-backed or integration behavior changed
- [ ] Manual testing: <!-- describe what you tested -->
- [ ] If a coding agent was used and supports it, `review-pr` or `pr-shepherd --fix` was run before requesting review

## Security Impact

Expand All @@ -45,6 +48,10 @@

<!-- How to revert if this causes problems? For Track C changes, this is mandatory. -->

## Review Follow-Through

<!-- Review conversations are author-owned. Summarize any known follow-up or areas where reviewer judgment is still needed. -->

---

**Review track**: <!-- A (docs/tests/chore) | B (feature/refactor) | C (security/runtime/DB/CI) -->
**Review track**: <!-- A (docs/tests/chore) | B (feature/maintainer-requested refactor) | C (security/runtime/DB/CI) -->
9 changes: 9 additions & 0 deletions .github/workflows/e2e.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
name: E2E Tests
on:
workflow_call:
inputs:
ref:
description: Commit SHA or ref to test
required: false
type: string
schedule:
- cron: "0 6 * * 1" # Weekly Monday 6 AM UTC
workflow_dispatch:
Expand All @@ -19,6 +24,8 @@ jobs:
timeout-minutes: 30
steps:
- uses: actions/checkout@v6
with:
ref: ${{ inputs.ref || github.sha }}

- uses: dtolnay/rust-toolchain@stable

Expand Down Expand Up @@ -59,6 +66,8 @@ jobs:
files: "tests/e2e/scenarios/test_owner_scope.py tests/e2e/scenarios/test_routine_event_batch.py"
steps:
- uses: actions/checkout@v6
with:
ref: ${{ inputs.ref || github.sha }}

- name: Download binary
uses: actions/download-artifact@v4
Expand Down
10 changes: 7 additions & 3 deletions .github/workflows/staging-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ jobs:
steps:
- uses: actions/checkout@v6
with:
ref: staging
ref: ${{ github.sha }}
fetch-depth: 0
fetch-tags: true

Expand Down Expand Up @@ -117,13 +117,17 @@ jobs:
needs: check-changes
if: needs.check-changes.outputs.has_changes == 'true'
uses: ./.github/workflows/test.yml
with:
ref: ${{ needs.check-changes.outputs.current_head }}

# ── Run E2E browser tests ────────────────────────────────────────
e2e:
name: E2E Browser Tests
needs: check-changes
if: needs.check-changes.outputs.has_changes == 'true'
uses: ./.github/workflows/e2e.yml
with:
ref: ${{ needs.check-changes.outputs.current_head }}

# ── Create promotion PR (triggers claude-review.yml on the PR) ──
create-promotion-pr:
Expand All @@ -137,7 +141,7 @@ jobs:
steps:
- uses: actions/checkout@v6
with:
ref: staging
ref: ${{ needs.check-changes.outputs.current_head }}
fetch-depth: 0

- name: Generate GitHub App token
Expand All @@ -163,7 +167,7 @@ jobs:
PROMOTION_BASE: ${{ needs.resolve-promotion-base.outputs.promotion_base }}
run: |
git fetch origin "${PROMOTION_BASE}"
AHEAD=$(git rev-list --count "origin/${PROMOTION_BASE}..origin/staging")
AHEAD=$(git rev-list --count "origin/${PROMOTION_BASE}..HEAD")
echo "commits_ahead=${AHEAD}" >> "$GITHUB_OUTPUT"
if [ "$AHEAD" -eq 0 ]; then
echo "Staging is not ahead of ${PROMOTION_BASE}. Nothing to promote."
Expand Down
20 changes: 20 additions & 0 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,11 @@
name: Run Tests
on:
workflow_call:
inputs:
ref:
description: Commit SHA or ref to test
required: false
type: string
pull_request:
branches:
- main
Expand Down Expand Up @@ -29,6 +34,8 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
ref: ${{ inputs.ref || github.sha }}
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
Expand All @@ -52,6 +59,8 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
ref: ${{ inputs.ref || github.sha }}
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
Expand Down Expand Up @@ -80,6 +89,8 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
ref: ${{ inputs.ref || github.sha }}
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
Expand Down Expand Up @@ -107,6 +118,8 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
ref: ${{ inputs.ref || github.sha }}
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
Expand All @@ -125,6 +138,8 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
ref: ${{ inputs.ref || github.sha }}
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
Expand All @@ -147,6 +162,8 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
ref: ${{ inputs.ref || github.sha }}
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
Expand All @@ -164,6 +181,8 @@ jobs:
steps:
- name: Checkout repository
uses: actions/checkout@v6
with:
ref: ${{ inputs.ref || github.sha }}
- name: Build Docker image
run: docker build -t ironclaw-test:ci .

Expand All @@ -175,6 +194,7 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v6
with:
ref: ${{ inputs.ref || github.sha }}
fetch-depth: 0
- name: Check version bumps for changed extensions
env:
Expand Down
77 changes: 76 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,42 @@ cd ironclaw

This installs the Rust toolchain, WASM targets, git hooks, and runs initial checks.

## How to Contribute

- Bug fixes, docs improvements, and focused cleanup tied to a concrete problem are welcome.
- Search existing issues and PRs before opening a new one to avoid duplicates.
- Keep changes scoped. One bug, one feature, or one documentation improvement per PR.

### Creating Issues

Open an issue when you are reporting a bug, proposing a feature, or documenting a gap in behavior.

For bug reports, include:

- What you expected to happen
- What actually happened
- Clear reproduction steps
- Relevant logs, screenshots, or error output
- Environment details when they matter (OS, database backend, feature flags, commit/branch)

For feature requests:

- Open an issue first before writing code
- Explain the problem being solved, not just the implementation idea
- Wait for maintainer feedback before investing in a large PR

We require an issue for new features so maintainers can prioritize the work and confirm it fits the roadmap before anyone spends time implementing it.

### Fixing Bugs

- Small, targeted bug-fix PRs are welcome
- If there is already an issue, link it in your PR
- If the bug is non-trivial, security-sensitive, or changes behavior across subsystems, open or confirm an issue first so the approach can be aligned before implementation

### Refactor-Only PRs

Refactor-only PRs are not accepted from contributors outside the core team. If a refactor is necessary to land a bug fix or approved feature, keep it minimal and clearly tied to that change.

## Development Workflow

```bash
Expand All @@ -19,6 +55,45 @@ cargo test # unit tests
cargo test --features integration # + PostgreSQL tests
```

These commands are for day-to-day iteration while you are developing locally. The pre-submission checks below are intentionally stricter and use CI-style flags so you can catch formatting drift and clippy warnings before requesting review.

## Before You Open a PR

Run the local validation checks required before requesting a review. These are stricter than the commands for iterative development:

```bash
cargo fmt --all -- --check
cargo clippy --all --benches --tests --examples --all-features -- -D warnings
cargo build
cargo test
```

Also run this when your change touches database-backed or integration behavior:

```bash
cargo test --features integration
```

Before asking for review:

- Build and exercise the changed path locally, not just the narrowest unit test
- Keep the PR focused and avoid mixing unrelated concerns
- Fill out the PR template with a clear summary, validation notes, and impact assessment
- If your change affects tracked behavior, update `FEATURE_PARITY.md` in the same branch
- If onboarding or setup behavior changes, update the relevant setup docs in the same branch
- If you are using a coding agent and it supports them, run `review-pr` or `pr-shepherd --fix` before opening or updating the PR
- `codex review --base origin/main` is also encouraged before requesting review

## Review Follow-Through

Review conversations are author-owned.

- Address each review comment with a code change or a clear explanation
- Resolve conversations you have handled; leave them open only when reviewer judgment is still needed
- Do not leave review cleanup for maintainers when the follow-through belongs to the author

If a PR is stale for more than 48 hours after review feedback is posted, maintainers may take over the follow-up work and land the changes needed to accomplish the original PR or issue intent.

## Code Style

- Zero clippy warnings policy
Expand Down Expand Up @@ -46,7 +121,7 @@ All PRs follow a risk-based review process:
| Track | Scope | Requirements |
|-------|-------|-------------|
| **A** | Docs, tests, chore, dependency bumps | 1 approval + CI green |
| **B** | Features, refactors, new tools/channels | 1 approval + CI green + test evidence |
| **B** | Features, maintainer-requested refactors, new tools/channels | 1 approval + CI green + test evidence |
| **C** | Security (`src/safety/`, `src/secrets/`), runtime (`src/agent/`, `src/worker/`), database schema, CI workflows | 2 approvals + rollback plan documented |

Select the appropriate track in the PR template based on what your changes touch.
Expand Down
Loading
Loading