Add two documentation pages to the site:
- site/docs/quickstart.html — prerequisites, disinto init walkthrough,
first issue lifecycle demo
- site/docs/architecture.html — agent loop diagram, phase protocol,
vault/quality gate, planner+predictor feedback cycle
Both pages are linked from the landing page navigation and footer.
Sitemap updated with new URLs.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Update AGENTS.md watermarks (all 10 files) to HEAD 038581e5
- Content already current from recent gardener migration and setup PRs
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replace all harb-specific fallbacks with generic 'default' sentinel
in dev-agent.sh, dev-poll.sh, action-agent.sh, and action-poll.sh.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove X-Total-Count header override for prs_merged_total: header counts
all closed PRs (including unmerged/rejected), inflating the dashboard metric.
Keep the jq-filtered count from the 50-item page instead.
- Remove redundant first curl in backlog_count that discards its response.
- Use textContent/createElement instead of innerHTML for project names.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add metrics collector (site/collect-metrics.sh) and dashboard page
(site/dashboard.html) showing PRs merged, issues closed, CI pass rate,
vault decisions, and agent activity across all managed projects.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add bin/disinto CLI entry point with two subcommands:
- `disinto init <repo-url>`: bootstraps a new project by cloning the
repo, generating a projects/*.toml config, creating Codeberg labels
(backlog, in-progress, blocked, tech-debt, underspecified, vision,
action), generating a VISION.md template, and installing cron jobs
for dev-poll, review-poll, and gardener.
- `disinto status`: shows active sessions, backlog depth, and open PR
count for all configured projects.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Progressive disclosure split of AGENTS.md (487→152 lines):
- Extracted per-directory AGENTS.md files for all 8 agents + lib/
- Root AGENTS.md now serves as a table of contents with summary table
- All watermarks updated to 16e430e
Grooming results:
- Promoted #469 (WATCH flow missing curl) and #436 (idle_pane_count bug) to backlog
- 12 dust items classified, no groups ripe for bundling yet
- No blocked issues, no AD violations
Update the agents-update step in run-gardener.toml to enforce the ~200-line
size limit on root AGENTS.md. When exceeded, the gardener now splits
per-directory sections into {dir}/AGENTS.md files with watermarks,
replacing verbose sections in root with a summary table of pointers.
Root keeps: overview, directory map, architecture decisions, key conventions.
Per-directory files get: role, trigger, key files, env vars, lifecycle.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace codeberg_api GET with codeberg_api_all for the dedup fetch,
which paginates through all open action issues instead of capping at 50.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Orphan and stuck-PR CI-failure paths in dev-poll.sh called
handle_ci_exhaustion without check_only, incrementing the fix counter on
every poll cycle even when guards (session checks, is_blocked) prevented
an actual agent launch. This could exhaust the 3-attempt budget without
any real fix attempts.
Now both paths use the same two-phase pattern as the backlog scan:
1. check_only during the scan (no counter increment)
2. Increment atomically at actual launch time
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace string 'backlog' with $BACKLOG_LABEL_ID in the DELETE label API call
at dev-agent.sh:370. The Gitea API expects a numeric label ID in that path
segment. The variable is already resolved at the top of the script (line 46-48)
and used correctly elsewhere.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Remove the orphaned post-session dust accumulator from gardener-agent.sh
(no longer reached after #367 moved gardener-poll.sh to action issues).
Add a dedicated dust-bundling formula step to run-gardener.toml that
handles the full lifecycle: dedup, timestamps, 30-day TTL expiry, and
bundling groups with 3+ items into backlog issues.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Move TOML frontmatter construction into a shared helper in
lib/file-action-issue.sh, used by both gardener-poll.sh and
gardener-run.sh. Fixes CI duplicate-detection failure.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- redact_secrets now covers AWS AKIA keys and 0x-prefixed private keys,
matching all patterns that scan_for_secrets detects
- file-action-issue.sh no longer suppresses stderr from scan_for_secrets,
so blocked-issue diagnostics reach the caller's log
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Filter stale escalation entries in gardener-poll.sh before passing them
to the agent session. For each escalation reply line, extract referenced
issue numbers (#NNN) and check their current state via the API. Discard
entries where all referenced issues are already closed, preventing the
gardener from creating investigation issues for resolved problems.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The action-agent now creates an isolated git worktree before each run
and destroys it unconditionally on exit. The formula must push results
before signaling done — unpushed work is lost when the worktree is nuked.
Changes:
- WORKTREE now points to /tmp/action-{issue}-{timestamp} instead of
PROJECT_REPO_ROOT
- cleanup_worktree() properly removes the worktree + Claude session history
- cleanup() kills child processes, stops docker, then destroys the worktree
- Claude session runs inside the worktree (not FACTORY_ROOT)
- Prompt warns about push-before-done in both Path A and Path B
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>