aboutsummaryrefslogtreecommitdiffstats
path: root/TODO.md
AgeCommit message (Collapse)AuthorFilesLines
2026-06-29docs: TODO - record crashed-create poisons working tree bugDanilo M.1-0/+13
A repo create that dies at the y/N prompt leaves the stanza uncommitted in the working tree; stanza_exists reads the working file, so a re-run skips Phase 1 and times out waiting for a bare repo gitolite was never told to build. Records recovery and fix options. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24feat: repo-name completion + label helper passthrough outputDanilo M.1-14/+14
- Bash completion now completes repo NAMES for desc/delete/add-remote at the name position, sourced from `gitctl repo list` (first field, header row dropped). One ssh call, only at that position, so a stray Tab never hits the network; the leading -y is handled. - call_helper prefixes every passthrough line from the helper (and the sync script it runs) with "server: " via _server_prefixed, so output like "No changes." reads as remote output instead of interleaved local noise. quiet=True callers (repo list) still get raw stdout to parse. Client-only, no helper redeploy needed. Self-test pins _server_prefixed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24docs: bring CLAUDE.md, README, TODO current after the three featuresDanilo M.1-7/+23
- CLAUDE.md: new hard rule that removal functions are exact inverses of their add counterparts (round-trip self-tests); TRASH_DIR added to the server constants; verified-live list extended with list-repos and a full delete cycle. - README: TRASH_DIR in the server-install constants and its dir note. - TODO: items 1-3 already marked done; cross-cutting work folded in; remaining leftovers listed (repo-name completion, the cosmetic No changes. echo, and the YAGNI gc-trash prune verb). - Removed all pre-existing em dashes from CLAUDE.md and README. Docs only, no code change. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24feat: repo delete - remove repo, move bare repo to trashDanilo M.1-42/+22
gitctl repo delete <name> removes a repo from all three places it lives, the inverse of repo create: - gitolite stanza via remove_stanza (inverse of add_stanza), committed and pushed FIRST so gitolite stops serving the repo before its bytes move. - cgit block via the new delete-repo helper verb (remove_repo_block, inverse of insert_repo_block), backed up and synced. - the bare repo is MOVED to TRASH_DIR (/var/lib/gitolite3/trash, timestamped) with a .trashinfo breadcrumb, not rm, so it is recoverable. A realpath check keeps the move one level under REPO_BASE. Always confirms; the global -y is deliberately not honored (cmd_delete never reads a.yes). Idempotent: a piece already gone is skipped. Partial failure is resumable by re-running, like create. Both inverse functions are pinned by add/insert-then-remove round-trip self-tests plus middle/last/missing cases; trash_repo and do_delete_repo run on temp dirs. Verified live: create then delete round-trips against the real gitolite.conf, bare repo lands in the trash dir intact. Helper changed: redeploy gitctl-helper to the server. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24feat: global -y/--yes flag to skip additive confirmationsDanilo M.1-14/+14
repo create's y/N push confirmation can now be skipped with -y. The flag is global (top-level parser), so it goes before the subcommand: gitctl -y repo create ... . The diff is still printed and an auto-confirmed note shown. -y does NOT bypass SSH key auth (the phase-1 push still needs the password / smartcard touch), so creation is never fully unattended. Hard wall: -y is never honored by a future destructive delete; the flag help, a client comment, and TODO item 1 all record this. Bash completion offers -y at the top level and transparently skips a leading -y when resolving the subcommand. Self-test pins the parse round-trip. Client-only change; the server helper is unchanged, no redeploy needed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-24feat: repo list - list all repos, public and privateDanilo M.1-10/+13
New gitctl repo list / helper list-repos verb. Source of truth is the bare repos on disk (REPO_BASE/*.git), not cgitrc, so private repos (absent from cgitrc since cgit auto-discovery is off) show too. Each repo is tagged PUB/PRIV by cgitrc membership, with its section and a 60-char description from the repo's description file. Client renders an aligned table, green public / dim private on a TTY. Adds repo_sections_from() primitive; find_repo_section becomes a thin lookup over it. Self-tests cover the cgitrc parse and a temp-FS scan. Updates README, SKILL.md, bash completion (repo list action), TODO. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23docs: delete-repo moves to a trash dir, not rm; cron-prune laterDanilo M.1-13/+28
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23docs: TODO for delete-repo, list-repos, and create -y flagDanilo M.1-0/+76
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>