Commit Graph

9 Commits (abb6e1841be08afe418a8d3a5f61607625de6f8f)

Author SHA1 Message Date
PeninsulaInd abb6e1841b Add adversarial fact-check step to press release pipeline
Sonnet + WebSearch reviews each PR between generation and schema
steps. Returns [NO_ERRORS] or [CORRECTED] with change log; rewrites
that shift word count by more than 15% are rejected. Fact-check
failures are graceful -- PR still ships with a ClickUp note that
manual review is recommended. Wired into both the legacy pipeline
and the headless clickup_runner.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-21 09:16:19 -05:00
PeninsulaInd d2b59bb5e6 Use single Cora-For-Human folder for all xlsx reads
All handlers (BLM, content, OPT) now read Cora xlsx from one shared
folder (//PennQnap1/SHARE1/Cora-For-Human). Files stay in place after
processing so multiple task types can share the same report.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 15:46:43 -05:00
PeninsulaInd f4e642240c Add direct BLM handler for Link Building build stage
Replace Claude-based link building with direct subprocess calls to
Big-Link-Man CLI. The build stage now runs ingest-cora + generate-batch
deterministically without LLM involvement.

- New clickup_runner/blm.py: BLM subprocess runner (ported from old linkbuilding.py)
- New handler="blm" in skill_map for Link Building build stage
- Add BLMConfig to config.py (blm_dir, cora_inbox, timeout)
- Add task-specific fields (Keyword, CLIFlags, etc.) to build_prompt
- Strip YAML frontmatter from skill files in read_skill_file
- Skip orphaned AutoCora results with no state DB entry

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 15:22:55 -05:00
PeninsulaInd 19f6ee94c6 Skip orphaned AutoCora results that have no matching state DB entry
Previously, results from prior runs (or the old CheddahBot system) would
be processed without context, causing "unknown" keyword in comments and
cascading errors. Now they are archived silently.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 11:00:27 -05:00
PeninsulaInd bba634a63e Download ClickUp attachments to work dir before running Claude
- Added ClickUpClient.download_attachment() for fetching attachment files
- Runner now downloads all task attachments to the temp work dir before
  dispatching to claude -p. Claude reads local files instead of URLs.
- build_prompt() now lists local filenames, not ClickUp attachment URLs
- _collect_output_files() excludes pre-existing attachments so they
  don't get re-uploaded back to ClickUp
- Removed optimizer script steps from content_draft.md -- the outline
  stage already handles Cora parsing, draft just follows the outline

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-31 16:49:05 -05:00
PeninsulaInd b287d759a1 Fix ClickUp field name: Customer -> Client
The ClickUp dropdown is named "Client", not "Customer". Updated field
lookups, prompt labels, README docs, and all tests.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 10:26:32 -05:00
PeninsulaInd 645b9cfbef Add AutoCora job submission + result polling -- Phase 3
Submits Cora SEO jobs as JSON files to the NAS queue, polls for .result
files each cycle, and updates ClickUp on success/failure. Async design:
submission and result processing happen on separate poll cycles so the
runner never blocks. Full README rewrite with troubleshooting section.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 10:17:42 -05:00
PeninsulaInd b19e221b8f Add Claude Code runner -- Phase 2: claude -p subprocess + ClickUp integration
Implements _dispatch_claude: reads skill files, builds prompts with task
context, runs claude -p as subprocess, uploads output files to ClickUp,
copies to NAS, advances stage/status, and posts structured error comments
on failure. Includes ntfy.sh notifications and generous max_turns defaults.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 09:34:54 -05:00
PeninsulaInd 74c1971f70 Add clickup_runner module -- Phase 1: skeleton + ClickUp polling
New headless automation runner that replaces CheddahBot's multi-agent
system with a simpler design: poll ClickUp for tasks with "Delegate to
Claude" checkbox checked + due date <= today, route by task type + stage
through a skill map, and dispatch to Claude Code headless or AutoCora.

Module structure:
- config.py: env vars > YAML > defaults configuration
- clickup_client.py: ClickUp API client (adapted from cheddahbot/clickup.py)
  with checkbox, stage dropdown, and attachment operations
- skill_map.py: task_type + stage -> SkillRoute routing dictionary
  (Content Creation, On Page Optimization, Press Release, Link Building)
- state.py: minimal SQLite KV store + run log
- __main__.py: poll loop with graceful shutdown
- README.md: setup, config reference, skill map docs

Dispatch functions are stubs (Phase 2: Claude runner, Phase 3: AutoCora).
Includes system-design-spec.md that drives this rewrite.

68 new tests, all passing. Existing 347 tests unaffected.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 09:14:22 -05:00