disinto/lib
Claude 721d7a6077
All checks were successful
ci/woodpecker/push/ci Pipeline was successful
ci/woodpecker/pr/ci Pipeline was successful
ci/woodpecker/pr/smoke-init Pipeline was successful
fix: bug: TOML [agents.X] section name with dash crashes load-project.sh (#862)
TOML allows dashes in bare keys, so `[agents.dev-qwen2]` is a valid
section. Before this fix, load-project.sh derived bash var names via
Python `.upper()` alone, which kept the dash and produced
`AGENT_DEV-QWEN2_BASE_URL` — an invalid shell identifier. Under
`set -euo pipefail` the subsequent `export` aborted the whole file,
silently taking the factory down on the N+1 run after a dashed agent
was hired via `disinto hire-an-agent`.

Normalize via `.upper().replace('-', '_')` to match the
`tr 'a-z-' 'A-Z_'` convention already used by hire-agent.sh (#834)
and generators.sh (#852). Also harden hire-agent.sh to reject invalid
agent names at hire time (before any Forgejo side effects), so
unparseable TOML sections never land on disk.

- `lib/load-project.sh` — dash-to-underscore in emitted shell var names
- `lib/hire-agent.sh` — validate agent name against
  `^[a-z]([a-z0-9]|-[a-z0-9])*$` up front
- `tests/lib-load-project.bats` — regression guard covering the parse
  path and the hire-time reject path

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-16 11:55:59 +00:00
..
hooks fix: Remove Matrix integration — notifications move to forge + OpenClaw (#732) 2026-03-26 14:53:56 +00:00
init/nomad fix: [nomad-step-1] S1.2 — add lib/init/nomad/deploy.sh (dependency-ordered nomad job run + wait) (#841) 2026-04-16 10:36:38 +00:00
action-vault.sh fix: [nomad-prep] P0 — rename lib/vault.sh + vault/ to action-vault namespace (#792) 2026-04-15 18:16:32 +00:00
agent-sdk.sh fix: bug: architect-run.sh empty pitch — pitch_output=$(agent_run …) captures stdout but new agent_run writes to side-channels (#716) 2026-04-12 00:04:42 +00:00
AGENTS.md chore: gardener housekeeping 2026-04-16 2026-04-16 08:38:31 +00:00
branch-protection.sh fix: bug: init branch-protection setup gives up after 3 short retries — forgejo needs more time to index freshly-created branches (#588) 2026-04-10 15:41:55 +00:00
build-graph.py fix: use undirected reachability for reviewer affected-objectives tracing 2026-03-24 21:31:55 +00:00
ci-debug.sh fix: SECURITY: Unquoted curl URLs with variables in API calls (#60) 2026-03-31 18:48:29 +00:00
ci-helpers.sh fix: fix: duplicated label ID lookup — ensure_blocked_label_id vs _ilc_ensure_label_id (#282) 2026-04-06 10:05:04 +00:00
ci-log-reader.py fix: feat: CI log access — disinto ci-logs + dev-agent CI failure context (#136) 2026-04-02 08:20:21 +00:00
ci-setup.sh fix: vision(#623): Forgejo OAuth gate for disinto-chat (#708) 2026-04-12 01:52:16 +00:00
claude-config.sh fix: disinto init: bootstrap shared CLAUDE_CONFIG_DIR for OAuth lock coherence (#641) 2026-04-10 20:15:35 +00:00
env.sh fix: [nomad-prep] P3 — add load_secret() abstraction to lib/env.sh (#793) 2026-04-15 19:15:50 +00:00
forge-push.sh fix: fix: stop baking credentials into git remote URLs — use clean URLs + existing credential helper everywhere (#604) 2026-04-10 17:04:10 +00:00
forge-setup.sh fix: [nomad-prep] P7 — make disinto init idempotent + add --dry-run (#800) 2026-04-15 22:37:22 +00:00
formula-session.sh fix: bug: architect pitch prompt guardrail is prose-only — model bypasses "NEVER call Forgejo API" via Bash tool; fix via permission scoping + PR-driven sub-issue filing (#764) 2026-04-15 07:41:16 +00:00
generators.sh fix: disinto up silently destroys profile-gated services (#845) 2026-04-16 11:22:29 +00:00
git-creds.sh fix: bug: credential helper race on every cold boot — configure_git_creds() silently falls back to wrong username when Forgejo is not yet ready (#741) 2026-04-13 11:37:23 +00:00
guard.sh fix: tech-debt: sweep cron-isms from code comments, helpers, lib, and public site copy (#548) 2026-04-10 08:54:11 +00:00
hire-agent.sh fix: bug: TOML [agents.X] section name with dash crashes load-project.sh (#862) 2026-04-16 11:55:59 +00:00
hvault.sh fix: address review — jq-safe JSON construction in hvault.sh 2026-04-15 21:27:34 +00:00
issue-lifecycle.sh fix: bug: hire-an-agent does not add the new agent as collaborator on the project repo (#856) 2026-04-16 10:47:53 +00:00
load-project.sh fix: bug: TOML [agents.X] section name with dash crashes load-project.sh (#862) 2026-04-16 11:55:59 +00:00
mirrors.sh fix: use FORGE_API_BASE for /repos/migrate endpoint, build payload with jq 2026-04-15 20:29:27 +00:00
ops-setup.sh fix: fix: stop baking credentials into git remote URLs — use clean URLs + existing credential helper everywhere (#604) 2026-04-10 17:04:10 +00:00
parse-deps.sh fix: parse-deps.sh inline regex matches every line — awk /pattern/i flag is invalid (#600) 2026-03-23 10:59:47 +00:00
pr-lifecycle.sh fix: fix: standardize logging across all agents — capture errors, log exit codes, consistent format (#367) 2026-04-07 21:15:36 +00:00
release.sh fix: [nomad-prep] P0 — rename lib/vault.sh + vault/ to action-vault namespace (#792) 2026-04-15 18:16:32 +00:00
secret-scan.sh fix: add last-reviewed watermark SHA to secret-scan safe patterns 2026-04-16 08:46:00 +00:00
sprint-filer.sh fix: reuse forge_api_all from env.sh in sprint-filer.sh to avoid duplicate pagination code 2026-04-15 07:59:56 +00:00
stack-lock.sh fix: feat: stack lock protocol for singleton project stack access (#255) 2026-04-06 07:09:26 +00:00
tea-helpers.sh fix: tea_relabel uses edit subcommand, add sha256 checksum for tea binary (#666) 2026-03-25 13:34:58 +00:00
worktree.sh fix: Extract lib/worktree.sh — create, recover, cleanup (#797) 2026-03-27 19:06:31 +00:00