Commit Graph

20 Commits

Author SHA1 Message Date
naps62 b453e72d42 Revert "feat: draw the grid by default, --markdown to opt out"
The drawn grid was solving the wrong problem: the script output was
already right, and fencing it in chat is what turned a rendered table
into raw dashes.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 19:52:30 +00:00
naps62 bf1dc76125 feat: draw the grid by default, --markdown to opt out
A markdown table carries no borders of its own; whether any get drawn is
up to the renderer, and terminal renderers mostly draw none. Emitting the
grid directly makes the output look the same everywhere it lands.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 19:51:28 +00:00
naps62 ea9c3acecf feat: emit the day report as a markdown table
Padded pipes, so it reads as a grid in the terminal and renders as a
real table when pasted anywhere else. Each cell carries hours, share and
active minutes; a flags column carries what needs judgement.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 19:26:06 +00:00
naps62 658b9850bb style: rule off the report, count only sessions in range
The session count came from the mtime prefilter, so an old date range
reported every file on disk as if it had contributed.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 18:42:15 +00:00
naps62 39d88899af refactor: back to per-day blocks, add a totals line
The matrix table dropped the evidence — share, active minutes, hour
range, and the outside-working-hours flags — which are what make a
proposed number checkable rather than asserted.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 18:40:44 +00:00
naps62 cd63a4c18e refactor: hourlog prints a day-by-project table
One row per day, one column per project, hours in the cell. The per-day
blocks repeated the project name on every line and buried the totals.

Share, active minutes, hour ranges, and the outside-working-hours flags
move to --json, which is where the skill reads them anyway.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 18:38:45 +00:00
naps62 95e98a1e77 refactor: hourlog reports whole days, timer to 18:00
Half-days forced every result into a 4h bucket. Days with hours split by
share give the same answer at finer granularity and drop a concept.

Session minutes are now stated as a floor on real work, not a measure:
the day's length comes from the calendar and only the split between
projects comes from the sessions. Meetings and review leave no
transcript, so a thin day is still a full day.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 18:36:34 +00:00
naps62 e4ffd5d93d feat: hourlog skill + Friday timer
Turns Claude Code and Codex session activity into a half-day-per-project
proposal, reconciles it against the timesheet API, and submits only what
the user approves in-session.

Activity is measured in 5-minute active slots, deduplicated per project,
not message counts — otherwise one overnight autonomous run outweighs a
real morning's work.

The path-to-project mapping and the API credentials stay in
~/.config/hourlog/ and ~/.env.claude. This repo is public.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-14 17:35:24 +00:00
naps62 a0b42c9210 feat: land requests a Copilot review on GitHub PRs 2026-08-12 08:19:13 +00:00
naps62 1efa691b04 docs: route code reviews to rev, scope crit to plans/live/HTML
Rev hooks are installed globally; entry files describe the injected flow
plus a manual fallback (codex has no hooks). Crit skill redirects code
diffs to rev.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-03 10:12:00 +00:00
naps62 bdeded310a feat(week-review): filter carry-over on the weekly-review label
Reading every open issue would pull in unrelated work once the repo has
any. Newly filed issues must carry the label or the next run cannot see
them.
2026-08-01 15:28:45 +00:00
naps62 f6b58e8849 feat: add the week-review skill
Codifies the session-review process: read open issues for carry-over,
scan transcripts, rank by how often the same correction repeated, check
the current model docs before recommending, then apply or file.

scripts/scan-sessions.py enumerates top-level sessions in a window,
drops subagent transcripts, and flags swarm runs so a single 577-session
security scan does not read as 40% of the week's work.
2026-08-01 15:15:14 +00:00
naps62 9023ed3ef9 chore: update vendored skills and record provenance
humanizer 2.2.0 -> 2.9.1 (blader/humanizer, MIT): adds a Voice
Calibration section and a passive-voice pattern, reworks negative
parallelisms and em dashes. Version moved to metadata.version upstream.

impeccable 3.6.0 -> 4.0.4 (pbakaus/impeccable, Apache-2.0): the repo
tags the skill and the npm CLI separately, so 3.6.0 was a real release
and npm's 3.5.0 was never the comparison. Adds native-platform reference
briefs.

Each now carries an UPSTREAM file; bin/check-vendored.sh reports drift.
2026-08-01 14:25:26 +00:00
naps62 e449d705c3 docs: use a generic workspace name in the linearMcp examples 2026-08-01 13:07:57 +00:00
naps62 17677c18df feat(land): never merge, user clicks
Auto-merge burned a client PR meant for manual merge. Human gate
needed on public/client repos; one click on private is cheap, so
rule is universal. Land now stops at green + approved + updated
branch, notifies, and leaves the merge button alone.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WLkYHLzszmzq5fMGpFAkHh
2026-07-30 08:33:00 +00:00
naps62 715420d0a9 feat(nightshift): calibrated quota verdict + scoped milestone checks
usage-window.py stores a calibrated window quota and emits an explicit
verdict, so a run can no longer park on an uncalibrated raw token count.
Milestone assess is scoped; full suite moves to the gated push points.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015YUXS63P1WCdC6bEKWcnAE
2026-07-27 12:45:06 +00:00
naps62 999f759691 feat(skills): machine-wide gate for heavy test runs
Parallel yolo/nightshift/blitz sessions each ran the full suite and OOMed
the box. gate.sh caps concurrency, memory and build parallelism; skills now
run scoped checks in the loop and one gated full run per push.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015YUXS63P1WCdC6bEKWcnAE
2026-07-27 12:41:03 +00:00
naps62-yolo c8de8bcb5a feat(nightshift): ship as a pull request, not straight to main
A night of autonomous work needs a review gate, especially on a live repo.
Output is now one branch and one PR rather than commits on the default
branch.

Separates committing from pushing, which had been conflated. Local commits
are what protect against an agent dying mid-task, and they cost no CI, so
they stay at every milestone. Pushing is what triggers CI, so it becomes a
deliberate act: at the end, when parking, or on request. A night of
milestone pushes is a night of CI runs on work that was half-finished at
the time, which trains the user to ignore the build.

Subagents are told to commit locally and explicitly not to push.

Covers both forges: gh for GitHub, the API for Gitea (no tea CLI on most
setups), and reporting a compare URL rather than faking success if auth
fails.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019SSXDKsik8yYrezStVaDXt
2026-07-25 13:15:57 +00:00
naps62-yolo 3163bd26f0 feat(nightshift): long autonomous build skill with limit backoff
Takes an issue, ticket or plain description and works it for hours as an
architect: freeze the interface contract first, then delegate implementation
to subagents against frozen signatures, review, commit every milestone.

Checks the rolling 5-hour window before each dispatch and parks rather than
letting agents die mid-task. The usage script sums every Claude Code session
on the machine, and is explicit that it is a floor — it cannot see other
machines, claude.ai, or direct API use — so the reactive backstop of an
agent dying on a limit error is documented as the stronger signal.

Encodes what worked in practice: disjoint file ownership per agent, asking
agents to report disagreement (their pushback was the highest-value output),
sabotage-testing every safety net, and asking what a passing check is
structurally unable to see.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019SSXDKsik8yYrezStVaDXt
2026-07-25 13:08:41 +00:00
naps62 f83a247de3 init: centralized agent skills for Claude Code + Codex
- skills/ shared by both tools (open Agent Skills standard)
- portable cross-skill refs (root-relative, no ~/.claude hardcode)
- bin/link.sh bootstrap for non-Nix machines
- nix/home.nix + flake.nix for home-manager

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014SK5Lo7LQfwLRVdCv1A8uF
2026-07-24 17:59:44 +00:00