Compare commits
11 changed files with 29 additions and 56 deletions
|
|
@ -80,29 +80,10 @@ jobs:
|
||||||
# `Packages` line) are fetched fresh from the Vale Package Hub each
|
# `Packages` line) are fetched fresh from the Vale Package Hub each
|
||||||
# run rather than vendored, so this job always lints against
|
# run rather than vendored, so this job always lints against
|
||||||
# upstream's current rules. Failing red on a hit is intentional --
|
# upstream's current rules. Failing red on a hit is intentional --
|
||||||
# the existing docs/ tree has a standing backlog of warning- and
|
# the existing docs/ tree has a real backlog against these rules
|
||||||
# suggestion-level rule hits, so this job stays red on unrelated
|
# (663 hits as of this writing), so this job starts out red on
|
||||||
# PRs until that backlog is worked down (tracked separately, as a
|
# unrelated PRs until that backlog is worked down. Not (yet) wired
|
||||||
# follow-up to the error-only work below). Not wired into branch
|
# into branch protection as a required check, so a red result here
|
||||||
# protection -- see the sibling job below for the error-only slice
|
# doesn't block a merge -- opting it into required-check status is
|
||||||
# that is.
|
# a separate, later call.
|
||||||
run: XDG_DATA_HOME="$PWD/.vale-data" nix shell nixpkgs#vale --command sh -c 'vale sync && vale docs'
|
run: XDG_DATA_HOME="$PWD/.vale-data" nix shell nixpkgs#vale --command sh -c 'vale sync && vale docs'
|
||||||
|
|
||||||
prose-lint-errors:
|
|
||||||
name: prose lint (vale, errors)
|
|
||||||
runs-on: [hive-ci]
|
|
||||||
# Own `vale sync` rather than reusing the sibling job's: each job gets
|
|
||||||
# a fresh checkout/environment, so there is nothing to share between
|
|
||||||
# them without an artifact-upload step this doesn't need.
|
|
||||||
timeout-minutes: 5
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v3
|
|
||||||
- name: lint
|
|
||||||
# The error-level-only slice of the sibling job above.
|
|
||||||
# `--minAlertLevel=error` changes what vale both reports AND exits
|
|
||||||
# non-zero on, so this job's pass/fail tracks only error-severity
|
|
||||||
# rule hits, not the warning/suggestion backlog the sibling job
|
|
||||||
# carries. Split out so this one alone can be a required check
|
|
||||||
# (forge branch protection) without blocking merges on the
|
|
||||||
# pre-existing backlog the sibling job still surfaces.
|
|
||||||
run: XDG_DATA_HOME="$PWD/.vale-data" nix shell nixpkgs#vale --command sh -c 'vale sync && vale --minAlertLevel=error docs'
|
|
||||||
|
|
|
||||||
|
|
@ -479,7 +479,7 @@ so it survives restarts and redeploys.
|
||||||
with. **Keep it.** It's handed to Forgejo when swarm-controller registers a hook,
|
with. **Keep it.** It's handed to Forgejo when swarm-controller registers a hook,
|
||||||
so replacing the file means every subsequent delivery fails
|
so replacing the file means every subsequent delivery fails
|
||||||
verification until the hook is re-registered with the new value. It's
|
verification until the hook is re-registered with the new value. It's
|
||||||
generated automatically on first start; there's nothing to configure.
|
generated automatically on first start; there is nothing to configure.
|
||||||
|
|
||||||
If the file is unreadable at startup the daemon still starts and logs
|
If the file is unreadable at startup the daemon still starts and logs
|
||||||
`webhook secret unavailable`; the webhook endpoint then answers 503
|
`webhook secret unavailable`; the webhook endpoint then answers 503
|
||||||
|
|
|
||||||
|
|
@ -279,7 +279,7 @@ to `closed_at` that `state_change_is_current` returns `true` — so it takes
|
||||||
the state-change path, dropping its body. Best of both worlds:
|
the state-change path, dropping its body. Best of both worlds:
|
||||||
on the merge/close path `forge_notify` fetches the `latest_comment_url` comment and, when
|
on the merge/close path `forge_notify` fetches the `latest_comment_url` comment and, when
|
||||||
its `created_at` is strictly **after** the subject's `closed_at`
|
its `created_at` is strictly **after** the subject's `closed_at`
|
||||||
(`comment_is_after_close`) — that is, it raced the merge rather than being the
|
(`comment_is_after_close`) — that is it raced the merge rather than being the
|
||||||
pre-merge last comment the subject keeps — append it as a
|
pre-merge last comment the subject keeps — append it as a
|
||||||
`comment by <author>: <excerpt>` block before the meta suffix
|
`comment by <author>: <excerpt>` block before the meta suffix
|
||||||
(`fresh_post_close_comment_tail`). The wake carries **both** `[PR merged]`
|
(`fresh_post_close_comment_tail`). The wake carries **both** `[PR merged]`
|
||||||
|
|
|
||||||
|
|
@ -31,24 +31,16 @@ writeup.
|
||||||
|
|
||||||
## CI checks
|
## CI checks
|
||||||
|
|
||||||
Several jobs run on every PR (and on `workflow_dispatch` for manual
|
Three jobs run on every PR (and on `workflow_dispatch` for manual re-triggers),
|
||||||
re-triggers), defined in
|
defined in [`.forgejo/workflows/ci.yml`](../../.forgejo/workflows/ci.yml). All
|
||||||
[`.forgejo/workflows/ci.yml`](../../.forgejo/workflows/ci.yml). The first four
|
three are required checks (forge branch protection) — a hit on any of them
|
||||||
below are required checks (forge branch protection) — a hit on any of them
|
blocks merge.
|
||||||
blocks merge. The two vale jobs split a single check in two (#4128): the
|
|
||||||
error-only one exists so it _can_ become a required check without also
|
|
||||||
gating on the full job's standing warning/suggestion backlog, but flipping
|
|
||||||
that switch on the forge is a separate operator action, not something this
|
|
||||||
table can assert ahead of it happening.
|
|
||||||
|
|
||||||
| Job | What it runs | Required? |
|
| Job | What it runs |
|
||||||
| ----------------------------- | ------------------------------------------------------------------------------------------------------- | ------------------------------- |
|
| ---------------------- | --------------------------------------------------------------------------------- |
|
||||||
| **nix flake check** | treefmt formatting, `cargo clippy -D warnings`, `cargo test`, module evaluation | yes |
|
| **nix flake check** | treefmt formatting, `cargo clippy -D warnings`, `cargo test`, module evaluation |
|
||||||
| **tracker-tag lint** | flags `#NNN` issue tags in source and comments (`scripts/check-issue-refs.sh`) | yes |
|
| **tracker-tag lint** | flags `#NNN` issue tags in source and comments (`scripts/check-issue-refs.sh`) |
|
||||||
| **comment-block lint** | flags contiguous comment blocks over 30 lines (`scripts/check-comment-blocks.sh`) | yes |
|
| **comment-block lint** | flags contiguous comment blocks over 30 lines (`scripts/check-comment-blocks.sh`) |
|
||||||
| **doc-pointer lint** | flags `docs/…md` paths and relative markdown links that no longer resolve (`scripts/check-doc-refs.sh`) | yes |
|
|
||||||
| **prose lint (vale, errors)** | vale, `docs/` tree, error-severity rule hits only | not yet — intended to be |
|
|
||||||
| **prose lint (vale)** | vale, `docs/` tree, full severity range (warnings + suggestions too) | no — advisory, standing backlog |
|
|
||||||
|
|
||||||
`hive-forge ci-rerun --pr N` dispatches a `workflow_dispatch` retrigger
|
`hive-forge ci-rerun --pr N` dispatches a `workflow_dispatch` retrigger
|
||||||
without an empty commit.
|
without an empty commit.
|
||||||
|
|
|
||||||
|
|
@ -179,7 +179,7 @@ Two consumers, and only one of them is fine:
|
||||||
|
|
||||||
The consumption differs per runtime and is the part worth knowing.
|
The consumption differs per runtime and is the part worth knowing.
|
||||||
tuwunel links no openssl, which makes `SSL_CERT_FILE` look inapplicable
|
tuwunel links no openssl, which makes `SSL_CERT_FILE` look inapplicable
|
||||||
— it's not: its rustls-based TLS stack still resolves trust through the
|
— it isn't: its rustls-based TLS stack still resolves trust through the
|
||||||
platform certificate store on Linux, and that store honors
|
platform certificate store on Linux, and that store honors
|
||||||
`SSL_CERT_FILE`, so the env var takes effect the same way it would for
|
`SSL_CERT_FILE`, so the env var takes effect the same way it would for
|
||||||
an OpenSSL-linked binary.
|
an OpenSSL-linked binary.
|
||||||
|
|
|
||||||
|
|
@ -257,8 +257,8 @@ to discover valid label names before triaging or to audit the label set.
|
||||||
## Notes
|
## Notes
|
||||||
|
|
||||||
- **Read-before-comment guard:** `comment` refuses to post when forge still
|
- **Read-before-comment guard:** `comment` refuses to post when forge still
|
||||||
has an unread notification for the thread (that is, someone commented since
|
has an unread notification for the thread (that is someone commented since you
|
||||||
you last read it). This prevents accidentally replying to old activity without
|
last read it). This prevents accidentally replying to old activity without
|
||||||
seeing the new context. Read the thread with `hive-forge view <n>` or
|
seeing the new context. Read the thread with `hive-forge view <n>` or
|
||||||
`hive-forge comments <n>` (which mark the notification read and clear the
|
`hive-forge comments <n>` (which mark the notification read and clear the
|
||||||
block), or pass `--force` to skip the guard.
|
block), or pass `--force` to skip the guard.
|
||||||
|
|
|
||||||
|
|
@ -240,7 +240,7 @@ Bare `choom` starts a fresh blank session. `--resume <value>` passes
|
||||||
through as `claude --resume <value>` to rejoin a prior session by its
|
through as `claude --resume <value>` to rejoin a prior session by its
|
||||||
session id — the flag name deliberately matches the claude flag it maps
|
session id — the flag name deliberately matches the claude flag it maps
|
||||||
to. (choom never uses claude's `--continue`: that's a bare flag that
|
to. (choom never uses claude's `--continue`: that's a bare flag that
|
||||||
takes no argument and resumes the cwd's _latest_ session, that is, the
|
takes no argument and resumes the cwd's _latest_ session, that is the
|
||||||
harness's; a value after it would be consumed as the first prompt,
|
harness's; a value after it would be consumed as the first prompt,
|
||||||
silently poking the live harness session.) A value is required when the
|
silently poking the live harness session.) A value is required when the
|
||||||
flag is given. Either way choom never collides with the harness's live
|
flag is given. Either way choom never collides with the harness's live
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,7 @@ swarm-level operator CLI
|
||||||
###### **Options:**
|
###### **Options:**
|
||||||
|
|
||||||
* `--authelia-bin <PATH>` — authelia binary used to hash passwords. The argon2 parameters must match the verifier's, so this has to be the *configured* package rather than whatever is on `PATH`
|
* `--authelia-bin <PATH>` — authelia binary used to hash passwords. The argon2 parameters must match the verifier's, so this has to be the *configured* package rather than whatever is on `PATH`
|
||||||
* `--users-file <PATH>` — Host-side path of authelia's users database — that is, the path inside the container, prefixed with the container's root.
|
* `--users-file <PATH>` — Host-side path of authelia's users database — that is the path inside the container, prefixed with the container's root.
|
||||||
|
|
||||||
This is the only user store: it's read before every change and written in place, and `swarm-authelia-bridge` writes the same file.
|
This is the only user store: it's read before every change and written in place, and `swarm-authelia-bridge` writes the same file.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -240,7 +240,7 @@ It leaves non-compile subcommands (`new`, `add`, third-party
|
||||||
Set to `false` for agents that parse cargo's JSON output
|
Set to `false` for agents that parse cargo's JSON output
|
||||||
programmatically and don't pass `--message-format json` themselves.
|
programmatically and don't pass `--message-format json` themselves.
|
||||||
|
|
||||||
## API-key provider (`useApiKey` / `backendEnvironmentFile`)
|
## API-key backend (`useApiKey` / `backendEnvironmentFile`)
|
||||||
|
|
||||||
```nix
|
```nix
|
||||||
hyperhive.useApiKey = true; # default: false
|
hyperhive.useApiKey = true; # default: false
|
||||||
|
|
@ -249,7 +249,7 @@ hyperhive.backendEnvironmentFile =
|
||||||
hyperhive.model = "anthropic/claude-3.5-sonnet"; # provider-specific model string
|
hyperhive.model = "anthropic/claude-3.5-sonnet"; # provider-specific model string
|
||||||
```
|
```
|
||||||
|
|
||||||
Runs this agent's `claude` against an API-key provider (for example OpenRouter)
|
Runs this agent's `claude` against an API-key backend (for example OpenRouter)
|
||||||
instead of a Claude subscription via OAuth. Two options, paired — each
|
instead of a Claude subscription via OAuth. Two options, paired — each
|
||||||
is a no-op without the other:
|
is a no-op without the other:
|
||||||
|
|
||||||
|
|
@ -299,4 +299,4 @@ Switching an already-provisioned OAuth agent to `useApiKey` leaves
|
||||||
`~/.claude/credentials.json` in place but unused — harmless, not
|
`~/.claude/credentials.json` in place but unused — harmless, not
|
||||||
cleaned up automatically. Cost shape also changes: subscription pricing
|
cleaned up automatically. Cost shape also changes: subscription pricing
|
||||||
→ per-request billing with no built-in monthly cap, worth knowing before
|
→ per-request billing with no built-in monthly cap, worth knowing before
|
||||||
pointing a busy agent at a metered provider.
|
pointing a busy agent at a metered backend.
|
||||||
|
|
|
||||||
|
|
@ -454,7 +454,7 @@ named buckets of MCP tools; each agent starts with a role default
|
||||||
`ToolGroup::AGENT_DEFAULT`; hive-c0re seeds the root agent to
|
`ToolGroup::AGENT_DEFAULT`; hive-c0re seeds the root agent to
|
||||||
`ToolGroup::MANAGER_DEFAULT` — `messaging`, `meta`, `inbox`,
|
`ToolGroup::MANAGER_DEFAULT` — `messaging`, `meta`, `inbox`,
|
||||||
`lifecycle`, `approvals`, `scheduling`, `diagnostics`, `execution`,
|
`lifecycle`, `approvals`, `scheduling`, `diagnostics`, `execution`,
|
||||||
that is, every group except `forge` and `web_tools`). Checking /
|
that is every group except `forge` and `web_tools`). Checking /
|
||||||
unchecking stages which groups are active for the agent; the
|
unchecking stages which groups are active for the agent; the
|
||||||
page-level **save all** button (below) commits it. Columns come from
|
page-level **save all** button (below) commits it. Columns come from
|
||||||
`GET /api/tool-groups`. hive-c0re queues a rebuild so `HIVE_TOOL_GROUPS`
|
`GET /api/tool-groups`. hive-c0re queues a rebuild so `HIVE_TOOL_GROUPS`
|
||||||
|
|
|
||||||
|
|
@ -58,8 +58,8 @@ struct PathArgs {
|
||||||
/// rather than whatever is on `PATH`.
|
/// rather than whatever is on `PATH`.
|
||||||
#[arg(long, value_name = "PATH")]
|
#[arg(long, value_name = "PATH")]
|
||||||
authelia_bin: Option<PathBuf>,
|
authelia_bin: Option<PathBuf>,
|
||||||
/// Host-side path of authelia's users database — that is, the path
|
/// Host-side path of authelia's users database — that is the path inside
|
||||||
/// inside the container, prefixed with the container's root.
|
/// the container, prefixed with the container's root.
|
||||||
///
|
///
|
||||||
/// This is the only user store: it's read before every change and
|
/// This is the only user store: it's read before every change and
|
||||||
/// written in place, and `swarm-authelia-bridge` writes the same file.
|
/// written in place, and `swarm-authelia-bridge` writes the same file.
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue