🌙 Late-Night Check — 2026-02-26 (3:04 AM) 📊 Status: - Active tasks: 5 (hardening queued; cron active) - Overdue: 0 - Git: Uncommitted changes (BRAIN.md, MEMORY.md, research/ scripts—commit AM) - Tomorrow's priority: Hardening task (ed4bc5aa-8c84-4f95-b339-cf2ea17fd02b)—cron/Bob progress. 🎯 Suggestion: Morning: Gantt Board for hardening (test if complete), git commit workspace. Builds reliable agents for iOS empire—rest well. --- ## [2026-02-26 16:46] ✅ Created daily-digest.sh script ### What was requested Matt wanted a shell script to generate the daily digest reliably (to fix the broken cron job). ### What was done - Created `/Users/mattbruce/.openclaw/workspace/scripts/daily-digest.sh` - Script handles JSON escaping properly using `jq` - Uses temp files to avoid argument length issues - Checks for existing digest before creating - Generates proper format with emojis and `[Read more →](URL)` links - Can be run manually: `./daily-digest.sh [YYYY-MM-DD]` ### Usage ```bash # Run for today ./scripts/daily-digest.sh # Run for specific date ./scripts/daily-digest.sh 2026-02-26 ``` --- ## [2026-02-26 15:52] ✅ Fixed blog-backup skill to match mission-control-docs pattern ### What was requested Continue working to fix issues with the daily blog and create a skill similar to mission-control-docs. ### What was done - Updated `~/.agents/skills/blog-backup/lib/blog.sh` to use shared `auth-api` transport - Created `/Users/mattbruce/Documents/Projects/OpenClaw/Web/blog-backup/scripts/blog.sh` CLI - Added contract tests at `~/.agents/skills/blog-backup/tests/test_contract.sh` (all 6 pass) - Updated SKILL.md with full documentation - Updated TOOLS.md with CLI usage examples - Committed changes to both workspace and blog-backup repo - Pushed to Gitea ### Files Created/Modified - `~/.agents/skills/blog-backup/lib/blog.sh` - Updated with auth-api integration - `~/.agents/skills/blog-backup/SKILL.md` - Full documentation - `~/.agents/skills/blog-backup/tests/test_contract.sh` - Contract tests - `/Users/mattbruce/Documents/Projects/OpenClaw/Web/blog-backup/scripts/blog.sh` - CLI script - `~/.openclaw/workspace/TOOLS.md` - Updated documentation ### Architecture Following API-centric CLI pattern: ``` Skill (blog.sh) → auth-api transport → API (x-api-key) → Database ``` ### Testing ```bash # Run contract tests bash ~/.agents/skills/blog-backup/tests/test_contract.sh # Result: PASS: blog-backup contract tests ``` --- ## [2026-02-26 10:36] ✅ Completed - Shared auth-api skill integration ### What was requested Matt asked to build/integrate/test a no-duplication auth API layer shared by `gantt-tasks` and `mission-control-docs`. ### What was decided - Do NOT merge domain skills. - Create shared `auth-api` transport skill/module and wire both domain skills to it. ### What was done - Created new skill: `~/.agents/skills/auth-api/` - `SKILL.md` - `lib/auth_api.sh` with `api_call`, `api_preflight`, `api_require_token` - Refactored `gantt-tasks/lib/tasks.sh` - Added source to shared `auth_api.sh` - Replaced local `_api_call` implementation to delegate to shared `api_call` - Refactored `mission-control-docs/lib/docs.sh` - Added source to shared `auth_api.sh` - Replaced local `_api_call` implementation to delegate to shared `api_call` - Updated both SKILL docs to reflect architecture: - `Domain Skill -> auth-api transport -> API -> DB` - Added tests: - `~/.agents/skills/auth-api/tests/test_auth_api.sh` (mocked curl contract test) - Ran tests: - Initial fail due to grep pattern parsing; fixed with `grep -F --` - Final: `PASS: auth-api transport tests` - Smoke checks passed: - both domain libs source/load correctly - both `_api_call` functions route through shared transport layer ### Follow-ups - Optionally add retry/backoff policy in `auth_api.sh` once behavior is agreed. ### Additional completed (2026-02-26 10:39) - Added per-domain contract tests with mocked shared transport: - `~/.agents/skills/gantt-tasks/tests/test_contract.sh` - verifies `task_create` contract (`GET /sprints`, `POST /tasks`) - verifies `task_update` contract (`GET /tasks`, `POST /tasks` with status change) - `~/.agents/skills/mission-control-docs/tests/test_contract.sh` - verifies `mc_doc_create` contract (`POST /documents` payload) - verifies `mc_doc_update` contract (`GET /documents?id=...`, `PATCH /documents` payload) - Improved mock-call logging by base64-encoding payloads for multiline-safe assertions. - Ran full suite: - `PASS: gantt-tasks contract tests` - `PASS: mission-control-docs contract tests` - `PASS: auth-api transport tests` ### Additional completed (2026-02-26 10:40) - Fixed consuming workflow skill `url-research-to-documents-and-tasks` to remove duplicate/orphan logic path. - Replaced `orchestrator.sh` implementation with a thin wrapper that delegates to hardened script only: - `orchestrator.sh -> bin/url-research.sh` - Updated skill docs to point production entrypoint to `orchestrator.sh` (single source of truth). - Verified script syntax: - `bash -n orchestrator.sh` ✅ - `bash -n bin/url-research.sh` ✅ - Verified wrapper execution path: - no-arg usage correctly routes and prints hardened usage - run with URL starts hardened workflow phases/logging ### Rationale - Prevents workflow drift where old orchestrator code and hardened code diverge. - Keeps one execution path for future fixes and reliability improvements. ### Additional completed (2026-02-26 10:53) - Implemented new shared skill: `workflow-checkpoints` - `~/.agents/skills/workflow-checkpoints/SKILL.md` - `~/.agents/skills/workflow-checkpoints/lib/checkpoints.sh` - `~/.agents/skills/workflow-checkpoints/tests/test_checkpoints.sh` - Added URL-keyed stable checkpoint model with 7-day TTL: - key = `sha256(normalized_url)` - payload files by type: - `-content.json` - `-analysis.json` - `-plan.md` - metadata file: - `-meta.json` (expiresAtEpoch, ttl, sourceUrl) - Integrated checkpoints into URL research workflow (`bin/url-research.sh`): - extract-content phase: reuse from checkpoint if present, else compute and save - analyze-fit phase: reuse from checkpoint if present, else compute and save - create-plan phase: reuse from checkpoint if present, else compute and save - touch checkpoint TTL on reuse - Verified tests and syntax: - `PASS: workflow-checkpoints tests` - `PASS: auth-api transport tests` - `PASS: gantt-tasks contract tests` - `PASS: mission-control-docs contract tests` - `bash -n` for updated workflow script passed ### Follow-up suggestions - Add explicit progress comment text when checkpoint is reused (e.g., "reused checkpoint") for user visibility. - Optionally add `checkpoint_list ` helper for quick debugging of cached artifacts. ### Additional completed (2026-02-26 10:58-11:00) - Fixed all phase progress comments in URL research workflow to show consistent phase numbering (0-5): - Phase 0: Task created - Phase 1: Content extraction - Phase 2: Document creation - Phase 3: Fit analysis - Phase 4: Implementation plan - Phase 5: Final review and handoff - Added Phase 4 success comment immediately after plan attachment (was missing before). - Added source indicators to progress comments: - `[reused checkpoint]` when using cached data - `[reused existing]` when reusing doc from task description - Made Phase 2 idempotent by parsing task description for existing `Document ID`. - Created workflow summary doc: `WORKFLOW_SUMMARY.md` showing complete phase flow. - Verified script syntax: `bash -n url-research.sh` ✅ ### Result Now every phase visibly updates the task comment with a checked box, and reruns efficiently skip completed work using checkpoints + task description parsing. ### Additional completed (2026-02-26 11:13) - Implemented cleanup + doc consolidation for Alice workflow skill: - Added `run.sh` unified entrypoint for standalone shell usage. - Kept OpenClaw mode explicit in `SKILL.md`: always execute via Alice-Researcher (`sessions_spawn`). - Updated mandatory read section to consolidated docs only: - `SKILL.md` - `WORKFLOW_SUMMARY.md` - Removed legacy drift-prone docs: - `ANTI-PATTERNS.md` - `TASK-FIRST-WORKFLOW.md` - Verified syntax: - `bash -n run.sh` ✅ - `bash -n orchestrator.sh` ✅ ### Outcome - Inside OpenClaw: route to Alice. - Outside OpenClaw: run `~/.agents/skills/url-research-to-documents-and-tasks/run.sh` directly. - Fewer docs, less drift, clearer operational path. ### Additional completed (2026-02-26 11:16) - Implemented dry-run mode (option C): - `--dry-run` (mock generators when checkpoints missing) - `--dry-run-real` (real generators, still no writes) - Updated `bin/url-research.sh`: - Added flags parsing for dry-run modes - Added no-write behavior for task/doc/attachment/status operations - Checkpoints are read-only in dry-run (no put/touch writes) - Added dry-run summary output at end - Updated docs: - `run.sh` header examples for dry-run usage - `SKILL.md` standalone section includes dry-run commands - Validation: - `bash -n` checks passed for modified scripts ### Additional completed (2026-02-26 14:29) - Implemented native macOS Swift CLI quote paster at `scripts/skrybe.swift`. - Added subcommand structure scaffold: - `skrybe quotes --paste` (implemented) - `skrybe quotes --list` (planned placeholder) - `skrybe quotes --add` (planned placeholder) - Implemented `--paste` flow: - Fetches random quote from `http://localhost:3001/quote` - Parses JSON response `{ "quote": string, "author": string }` - Formats output as `Quote — Author` - Uses `NSPasteboard` to stage text and `CGEvent` Cmd+V to paste at cursor - Added explicit error handling for: - Invalid usage / unsupported subcommands - API URL issues, unreachable API, bad HTTP status - Invalid/malformed JSON response - Pasteboard write failures - Missing Accessibility permission - Keyboard event creation failures - Verified compilation with: - `swiftc scripts/skrybe.swift -o scripts/skrybe` ✅ - Verified CLI help output and error path when API is offline: - `scripts/skrybe help` ✅ - `scripts/skrybe quotes --paste` returns clean API-unreachable error when server is down ✅