Add a new `dispatch-idle-formulas` step between `file-at-constraints` and
`journal-and-memory`. This step scans available formulas, checks for stale
or missing data, and files action issues to dispatch idle formulas.
Key changes:
- New step runs after constraint filing, independent of the 3-issue budget
- Excludes nervous-system formulas (AD-001: cron, not action issues)
- Checks open action issues, recently closed issues, and evidence timestamps
to determine staleness (7-day window)
- Journal format updated to log dispatched idle formulas
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace $FACTORY_ROOT/planner/ and $FACTORY_ROOT/vault/ references with
$PROJECT_REPO_ROOT/planner/ and $PROJECT_REPO_ROOT/vault/ in the planner
formula and planner-run.sh. Planner artifacts (journal, memory, prerequisite
tree) and vault state are per-project, not factory-owned. The old paths
caused cross-repo contamination when the planner ran for non-disinto projects.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Root cause: the gardener quality gate strips the `backlog` label from
issues missing "## Acceptance criteria" checkboxes and "## Affected
files" sections. The planner formula never instructed including these
sections, so every planner-created issue lost its label on the next
gardener run.
Three changes to formulas/run-planner.toml:
1. Require issue bodies to include acceptance criteria and affected
files sections (matching the issue template format the gardener
quality gate enforces).
2. Add post-creation label verification via separate API call as a
belt-and-suspenders defense against Codeberg silently dropping
labels during issue creation.
3. Make label ID resolution unconditional in prediction-triage (was
skippable when no predictions existed, starving file-at-constraints
of the backlog label ID).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Update the landing page to clearly communicate Disinto's value proposition:
- Reframe pitch as "autonomous code factory for solo founders"
- Add full lifecycle section with all six stages (build, review, ship,
operate, plan, groom) and descriptions of what each agent does
- Add vault differentiator section contrasting Disinto with generic CI/CD,
explaining the vision + vault quality gate model
- Update meta descriptions for SEO consistency
- Update footer to list all eight agents
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add log statement between pre-lock merge exit and lock check to break
a coincidental 5-line sliding-window match with dev-agent.sh.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move the direct-merge scan (approved + CI green → try_direct_merge())
above the lock check. Merging an approved PR is a single API call that
doesn't need the dev-agent lock or a Claude session. This ensures
approved PRs get merged even while a dev-agent is running on an
unrelated issue.
The lock still guards dev-agent spawning (AD-002 preserved). Direct
merge failures fall through to the post-lock code for dev-agent
fallback.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add Claude Code global settings section (permissions +
skipDangerousModePermissionPrompt only, no hooks, seed ~/.claude.json),
file ownership requirements (debian:debian), and cross-box debugging
rule (diff configs first) to BOOTSTRAP.md.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add missing `set -euo pipefail` to three scripts per AGENTS.md conventions:
- lib/ci-helpers.sh
- lib/parse-deps.sh
- supervisor/supervisor-poll.sh
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Project-level .claude/settings.json overrides global ~/.claude/settings.json.
When agent-session.sh creates settings with hooks but without the skip flag,
Claude shows an interactive bypass-permissions confirmation dialog that blocks
all non-interactive tmux agent sessions.
Fixes#514.
The sed range pattern terminated on ## <resource-id> which is the first
line of the entry content, yielding an empty result for all valid
procurement files. awk reads from the header to EOF without ambiguity.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Add session name as third arg to guard hook (passed from agent-session.sh)
- Detect formula sessions (supervisor-*, gardener-*, planner-*, predictor-*)
- Guard 6: block filesystem access to factory root from worktrees, exempt formulas
- Guard 7: restrict system commands (kill, docker, tmux) to supervisor only
- Guard 2: allow formula agents rm -rf within factory root
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
When a phase change is detected (mtime changes), idle_elapsed was reset
but idle_pane_count was not. This meant idle counts accumulated before a
phase write carried into subsequent polls, so N consecutive idle polls
could be reached with fewer than N actual consecutive idle polls.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>