AOC Orchestrator — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited AOC Orchestrator (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
This skill is the main coordinator for the automated Advent of Code workflow. It orchestrates the entire process from puzzle fetching to submission, managing the execution of other specialized skills and handling the overall workflow state.
CRITICAL: This MUST be the first step. Do not proceed if the puzzle is already complete.
aoc calendar --year 2025 to see progress (completed days show decorations/artwork)puzzles/day<DD>/report.md - if it shows both parts completed, EXITstate/day<DD>.jsonIf both parts are already solved: DO NOT proceed. Report "Day X is already complete! Nothing to do." and EXIT.
# Check current date and determine which day to solve
# Verify session cookie is configuredIf puzzle unlock time not reached:
- Log: "Puzzle for day X not yet available"
- Exit gracefully
- Next cron execution will retryIf day already has both stars:
- Log: "Day X already completed"
- Exit gracefully
- No further action neededIf network request fails:
- Log error details
- Retry up to 3 times with exponential backoff
- If still failing, exit and alertIf Rust code fails to compile:
- Log compiler errors
- Attempt to fix based on error messages
- Retry compilation
- Max 5 fix attempts per partTrack workflow state in state/day{day}.json:
{
"day": 1,
"year": 2025,
"status": "in_progress",
"part1": {
"status": "completed",
"answer": 24000,
"submitted_at": "2025-12-01T05:01:23Z",
"attempts": 1
},
"part2": {
"status": "in_progress",
"answer": null,
"submitted_at": null,
"attempts": 0
},
"started_at": "2025-12-01T05:00:15Z",
"completed_at": null
}Log all actions to logs/day{day}.log:
[2025-12-01 05:00:15] INFO: Starting orchestration for Day 1
[2025-12-01 05:00:16] INFO: Invoking puzzle-fetcher skill
[2025-12-01 05:00:18] INFO: Puzzle downloaded successfully
[2025-12-01 05:00:18] INFO: Invoking tdd-solver skill for Part 1
[2025-12-01 05:02:45] INFO: Part 1 solution implemented, all tests pass
[2025-12-01 05:02:46] INFO: Invoking submission-handler for Part 1
[2025-12-01 05:02:47] SUCCESS: Part 1 answer accepted!
[2025-12-01 05:02:48] INFO: Invoking tdd-solver skill for Part 2
...When invoked manually:
# Run for today's puzzle
cargo run --bin aoc-orchestrator
# Run for specific day
cargo run --bin aoc-orchestrator -- --day 5
# Dry run (no submission)
cargo run --bin aoc-orchestrator -- --day 1 --dry-run
# Force re-run even if already solved
cargo run --bin aoc-orchestrator -- --day 1 --force
# Verbose debugging
cargo run --bin aoc-orchestrator -- --day 1 --debug// Pseudo-code showing skill invocation
let puzzle_data = invoke_skill("puzzle-fetcher", {
"day": day_number,
"year": 2025
})?;let solution = invoke_skill("tdd-solver", {
"day": day_number,
"part": 1,
"examples": puzzle_data.examples,
"input": puzzle_data.input
})?;let result = invoke_skill("submission-handler", {
"day": day_number,
"part": 1,
"answer": solution.answer
})?;Track and report:
After both parts completed successfully:
cargo fmt to format codecargo clippy to check for issues"Solve Day {day} - {puzzle_title}"If workflow fails mid-execution:
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.