Auto-generates a ModelDayClose YAML from today's GitHub PRs, git activity, and invariant probes
Resources
2Install
npx skillscat add omninode-ai/omniclaude/close-day Install via the SkillsCat registry.
SKILL.md
close-day Skill
CDQA-04 / OMN-2981 — Auto-generates a
ModelDayCloseYAML from today's GitHub PRs,
git activity, and invariant probes.
Overview
close-day closes out a development day by:
- Pulling all merged PRs across the OmniNode-ai GitHub org for today
- Fetching the active-sprint Linear plan (OMN-XXXX tickets)
- Building
actual_by_repogrouped by repo with OMN-XXXX references - Detecting scope drift: PRs with no matching OMN-XXXX ref →
drift_detectedentry - Running
scripts/check_arch_invariants.py(shared with CDQA-07 / OMN-2977) to probe reducers/orchestrators - Detecting golden-path progress by reading
emitted_atfrom~/.claude/golden-path/TODAY/artifact JSON files - Setting unknown statuses to
"unknown"and adding entries tocorrections_for_tomorrow - Validating the assembled dict against
ModelDayClose.model_validate()(fails loudly on schema mismatch) - Writing to
$ONEX_CC_REPO_PATH/drift/day_close/YYYY-MM-DD.yamlor printing with a warning banner
Quick Start
/close-dayOr with explicit date:
/close-day --date 2026-02-28ONEX_CC_REPO_PATH Behavior
ONEX_CC_REPO_PATH |
Behavior |
|---|---|
| Not set | Generates YAML, prints with ⚠️ ONEX_CC_REPO_PATH not set — commit manually banner. File is NOT written. |
| Set, path exists | Writes to $ONEX_CC_REPO_PATH/drift/day_close/YYYY-MM-DD.yaml |
| Set, path missing | Prints error + falls back to print-with-banner |
Invariant Probes
Uses scripts/check_arch_invariants.py from CDQA-07 (OMN-2977). Does NOT reimplement the check.
- Probes
reducers_pureandorchestrators_no_ioacross all repos in omni_home - If the script is missing or a repo is not checked out →
status: unknown+ correction entry effects_do_io_only→ alwaysunknown(not checkable via AST scan)
Golden Path Detection
Reads ~/.claude/golden-path/YYYY-MM-DD/*.json for artifacts where:
artifact.status == "pass"ANDartifact.emitted_atstarts with today's ISO date
Does NOT use directory creation time or directory name alone.
Drift Detection
PRs with no OMN-XXXX ref in title or branch name → drift_detected entry with category: scope.
Unknown Handling
Any probe that cannot determine status → status: unknown + actionable entry in corrections_for_tomorrow.
Files
| Path | Purpose |
|---|---|
plugins/onex/skills/close-day/SKILL.md |
This file (descriptive) |
plugins/onex/skills/close-day/prompt.md |
Authoritative behavior specification |
plugins/onex/skills/close-day/close_day.py |
Core logic module (importable for tests) |
tests/unit/skills/test_close_day.py |
Unit test suite (30 tests) |
Dependencies
onex_change_controlpackage:ModelDayClose,ModelTicketContractscripts/check_arch_invariants.py(CDQA-07): AST-based invariant scannerghCLI: for fetching GitHub PRs- Linear MCP: for fetching sprint plan (optional)
pyyaml: for YAML serialization
Definition of Done
- All unit tests pass (30 tests)
- Uses
check_arch_invariants.pyfrom CDQA-07 (not a separate implementation) - Golden path detection uses
emitted_atfield in artifact JSON (not dir creation time) - Unknown invariants →
status: unknown+ entry incorrections_for_tomorrow - Output validates against
ModelDayClose.model_validate()before writing/printing -
ONEX_CC_REPO_PATHnot set → banner printed, file not written