Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
37 commits
Select commit Hold shift + click to select a range
c5fe2b1
docs(adr): propose devenv-based agent kits
mogul Sep 15, 2026
78e5e60
docs(adr): renumber devenv agent-kits ADR to 0030
mogul Sep 16, 2026
66a8bcc
docs(adr): add devenv 2.x baseline and upstream impact
mogul Sep 16, 2026
725a664
docs(adr): incorporate review feedback on agent-kit/devenv layering
mogul Sep 16, 2026
5eef3b3
docs(adr): factor guest sizing out of the devenv adoption story
mogul Sep 16, 2026
e01db4c
test(migration): gate opencode agent-kit migration
mogul Sep 17, 2026
80d0f1c
feat(agent-kits): infer built-in agent kit metadata
mogul Sep 17, 2026
2ecadfa
test(agent-kits): cover enabled built-in kit selection
mogul Sep 17, 2026
6148aa6
fix(agent-kits): preserve recorded agent for kit refresh
mogul Sep 17, 2026
1b8aa2d
feat(devenv): add explicit project env activation
mogul Sep 17, 2026
16b9c18
fix(devenv): constrain project env activation
mogul Sep 17, 2026
ac06577
feat(provider): centralize usai provider facts
mogul Sep 17, 2026
d6c54b1
docs(provider): define provider facts artifact contract
mogul Sep 17, 2026
f5c61d6
chore(shellcheck): annotate sourced kit variables
mogul Sep 17, 2026
356328f
chore(shellcheck): document optional kit-list argument
mogul Sep 17, 2026
8c509a7
feat(provider): load usai facts artifact
mogul Sep 17, 2026
2f2bdd2
feat(provider): load facts from usai kit
mogul Sep 17, 2026
9d574e0
feat(kits): source neutral rc snippets
mogul Sep 17, 2026
64f7af7
test(kits): cover neutral rc snippet delivery
mogul Sep 18, 2026
8f6a9f5
feat(images): add non-enforcing contract doctor
mogul Sep 18, 2026
9048dbf
feat(agent-kits): validate built-in agent artifacts
mogul Sep 18, 2026
a9e53cd
feat(oci): add opt-in OCI-engine capability kit selection
mogul Sep 21, 2026
9c85b69
docs(kits): document neutral rc snippets (#511)
mogul Sep 24, 2026
569b246
feat(kits): wire neutral rc snippets
mogul Sep 24, 2026
b55de5c
feat(kits): harden pending kit gates
mogul Sep 24, 2026
4645a13
fix(acq): lazy-load provider facts
mogul Oct 2, 2026
3ce4201
test(acq): fix provider-facts lazy-load test setup
mogul Oct 2, 2026
354cc52
feat(kits): pin patterns v1.10.0 and enable the opt-in oci-engine kit
mogul Oct 2, 2026
fbf1c88
docs(adr): resolve migration sequencing and track the open adr-0030 q…
mogul Oct 2, 2026
dd45e86
fix(sbx): honor provider key env in usai checks
mogul Oct 2, 2026
9258417
refactor(kits): drop the bespoke oci-engine selection gate
mogul Oct 2, 2026
fdb7171
fix(acq): surface invalid provider facts instead of silently falling …
mogul Oct 3, 2026
c9342c0
ci(markdown): switch to auditable markdownlint cli
mogul Oct 4, 2026
b4ec8f0
fix(verify): skip the first-run config prompt in verify-backends
mogul Oct 4, 2026
4c5812a
fix(verify): make the sbx usai seed guard scope-aware
mogul Oct 4, 2026
058c1af
test(github): make scoped workspace fixture deterministic
mogul Oct 5, 2026
cf7b770
fix(provenance): ignore legacy unmarked workspaces
mogul Oct 5, 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
2 changes: 2 additions & 0 deletions .github/workflows/pre-commit.yml
Original file line number Diff line number Diff line change
Expand Up @@ -64,5 +64,7 @@ jobs:
pre-commit-${{ runner.os }}-
- name: Install pre-commit
run: python -m pip install pre-commit
- name: Install markdown linter dependencies
run: npm ci --prefix .github/linters
- name: Run pre-commit
run: pre-commit run --all-files --show-diff-on-failure --color=always
25 changes: 24 additions & 1 deletion .pre-commit-config.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -110,7 +110,7 @@ repos:
entry: bash scripts/test-acq-bats
language: system
pass_filenames: false
files: '^(acq|acq\.backends/.*|scripts/test-acq-lib\.sh|scripts/test-acq-bats|test/bats/.*)$'
files: '^(acq|acq\.backends/.*|scripts/test-acq-lib\.sh|scripts/test-acq-bats|scripts/fix-exec-bits|scripts/verify-backends|test/bats/.*)$'

# Lint the .bats files with ShellCheck (it treats .bats as a shell dialect).
# The main shellcheck hook's `types: [shell]` does not reliably tag .bats,
Expand All @@ -121,3 +121,26 @@ repos:
entry: bash -c 'printf "%s\n" "$@" | xargs -r -n8 shellcheck --severity=warning' --
language: system
files: '^test/bats/.*\.(bats|bash)$'

# Guard the executable bit the git index records for entry points.
#
# The repo is routinely checked out onto a container/host shared mount
# (virtiofs, Docker Desktop sharing, WSL drvfs) where the host clone sets
# core.fileMode=false to suppress spurious mode churn. That makes git BLIND to
# a LOST exec bit: a 100755 -> 0644 regression with identical content produces
# an empty `git status` and an empty `git diff --summary`. Since nearly every
# editor/formatter/agent writes a temp file and renames it (new inode, ambient
# umask), entry points silently stop being executable and the next live run
# fails with rc=126 — or, worse, with a misleading downstream error.
#
# --check reports and fails; `scripts/fix-exec-bits` repairs. It compares
# against the INDEX, so sourced libraries (acq.backends/*.sh) and bats files
# stay correctly non-executable; a shebang is not the criterion.
- repo: local
hooks:
- id: fix-exec-bits
name: executable bits match the git index
entry: bash scripts/fix-exec-bits --check
language: system
pass_filenames: false
always_run: true
35 changes: 35 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,7 @@ npm ci --prefix .github/linters
| `npm run lint` | Run all linters |
| `npm run lint:secrets` | Run gitleaks at the version pinned in `.pre-commit-config.yaml` (pre-commit fetches it; no separate install) |
| `npm run check` | Run the full pre-commit suite (gitleaks, shellcheck, YAML/JSON validation, whitespace, markdown lint) |
| `npm run fix:exec-bits` | Restore executable bits the git index records (see below) |

> [!NOTE]
> `npm run check` auto-fixes some issues (markdown, whitespace, EOF) — review and stage the changes it makes.
Expand All @@ -118,6 +119,40 @@ kits it applies — and their tests (permission-matrix, model-sync, per-kit
repo under `integrations/isolation/acq-kits/`. Changes to provider config,
rules, skills, or CA trust belong there.

### If a script suddenly says "Permission denied"

Run:

```bash
npm run fix:exec-bits # or: scripts/fix-exec-bits
```

Clones on a **container/host shared mount** (virtiofs, Docker Desktop file
sharing, WSL drvfs) do not round-trip POSIX permissions reliably, so such clones
typically set `core.fileMode = false` to stop git reporting a storm of spurious
mode changes. That is the right call, and it creates a blind spot:

- git applies the index mode on **checkout**, so a fresh clone is correct;
- but almost every editor, formatter, and coding agent saves by writing a temp
file and renaming it. That is a **new inode** with the ambient umask (0644),
so the executable bit is gone;
- with `core.fileMode = false`, git is **blind** to that. A 100755 → 0644
regression with identical content yields an empty `git status` *and* an empty
`git diff --summary`.

The symptom is an entry point that stops working with no visible cause —
`./scripts/verify-backends` exiting 126, or the vendored bats failing several
execs deep (`bin/bats` re-execs `libexec/bats-core/bats`, which execs
`bats-exec-suite` and a formatter, so a stripped bit surfaces as a confusing
downstream error rather than an obvious permission one).

`scripts/fix-exec-bits` compares every tracked file against its **index** mode
and restores the bit. The index is the criterion, not the presence of a shebang:
`acq.backends/*.sh` are *sourced* and `test/bats/*.bats` are read *by bats*, so
both are correctly non-executable. It covers initialized submodules too, and
`--check` makes it report-only (that form runs as a pre-commit hook, and
`scripts/verify-backends` self-heals at startup).

There is one offline unit suite (stubbed `sbx`/`msb`/`opencode`, no Docker or
network), built on [bats-core](https://github.com/bats-core/bats-core) (ADR-0025):

Expand Down
Loading
Loading