Wave 46 dim 19 dim F round 2 — cron MISSING axis close¶
Date: 2026-05-12
Branch: feat/jpcite_2026_05_12_wave46_dim19_F_round2
Worktree: /tmp/jpcite-w46-dim19-F2
Base: PR #118 head (feat/jpcite_2026_05_12_wave46_dim19_score_fix)
Author: Wave 46 永遠ループ tick3 #6
Why round 2 (this PR) over the round 1 PR #118¶
Round 1 (PR #118) closed the REST api file MISSING axis of dim F by
landing src/jpintel_mcp/api/fact_signature_v2.py (277 LOC) +
tests/test_dimension_f_fact_signature_v2.py (7 tests). That moved dim
F from 2.50/10 → ~4.50/10 and dim 19 average from 6.37 → ~6.47.
Per feedback_completion_gate_minimal the round 1 PR deliberately did
NOT chase ETL / cron / MCP axes. Round 2 picks up exactly one more
axis — the lowest-LOC / highest-leverage remaining gap — and lands
that alone.
Selected axis: cron MISSING¶
Of the three remaining axes:
| axis | LOC budget | status in repo | round 2 action |
|---|---|---|---|
| ETL MISSING | ~200-400 LOC new ETL script | no ETL exists (the Ed25519 sign script is the ETL, but the audit treats sign as cron) | OUT OF SCOPE — round 3 |
| cron MISSING | ~110 LOC workflow YAML + 2 test asserts | Python refresh_fact_signatures_weekly.py exists but no .github/workflows/*.yml wires it |
PICK |
| MCP grep miss | ~80-150 LOC new MCP tool | no MCP wrapper | OUT OF SCOPE — round 4 |
Why cron over MCP: The Python cron script's docstring (line 35)
explicitly references .github/workflows/refresh-fact-signatures-weekly.yml
as the operational hook. The script is fully argparse-wired (--max-rows,
--key-id, --dry-run, --verbose) and production-ready since Wave
43.2.5. Only the YAML wiring is missing. This is the single highest-leverage
sub-criterion at the lowest LOC cost — it's literally a deploy-time
config artifact, not new business logic.
Why not ETL or MCP this PR: Each requires non-trivial new business logic (ETL: source feed parser + UPSERT loop; MCP: tool schema + server wire + integration test). The completion-gate-minimal rule says one axis per PR. Take the cheap one first.
Sub-criterion checklist (dim F → 5 axes, cumulative across PR #118 + this PR)¶
| axis | base (pre-#118) | post-#118 | post-this-PR | delta this PR |
|---|---|---|---|---|
| migration forward-only: 2 | PRESENT (262) | PRESENT | PRESENT | unchanged |
| REST api file | MISSING | PRESENT | PRESENT | unchanged (round 1) |
| ETL | MISSING | MISSING | MISSING | unchanged |
| cron | MISSING (Python upstream, no YAML) | MISSING | PRESENT | +1 axis |
| test(s) | 1 (E shared) | 2 (F-specific) | 3 (F-specific +cron) | +1 test count |
| MCP grep | miss | miss | miss | unchanged |
Estimated dim F score lift: ~4.50/10 → ~5.50-5.75/10 (+1 axis cron + 2 new tests). Dim 19 average projection: ~6.47 → ~6.55-6.58. Single sub-criterion, NOT a full 6.37 → 8.0 refactor.
Files changed¶
.github/workflows/refresh-fact-signatures-weekly.yml— 109 LOC new workflow (Sunday 02:00 UTC schedule + workflow_dispatch + failure issue create)tests/test_dimension_f_fact_signature_v2.py— +59 LOC, 2 new tests:test_refresh_fact_signatures_workflow_existsandtest_refresh_fact_signatures_workflow_no_llm_secretdocs/research/wave46/STATE_w46_dim19_F2_pr.md— this state doc
Total: ~170 LOC (workflow + test extension + state doc). Well under the ≤200 LOC source-code budget; mostly declarative YAML + assertions.
Workflow contract¶
name: refresh-fact-signatures-weekly
Trigger:
schedule: 0 2 * * 0 (= Sunday 02:00 UTC, Monday 11:00 JST)
workflow_dispatch: max_rows / dry_run inputs
Step:
flyctl ssh console -a autonomath-api -C \
"/opt/venv/bin/python /app/scripts/cron/refresh_fact_signatures_weekly.py \
[--max-rows N] [--dry-run]"
On failure:
gh issue create --label cron-failure --label automation
Constraints honored¶
- worktree
/tmp/jpcite-w46-dim19-F2(no main worktree touch) - no rm / mv (only Write + Edit)
- no legacy brand strings on the wire (workflow names + script paths
are internal infra; no
jpciterename impact) - no LLM API import (verified by
test_refresh_fact_signatures_workflow_no_llm_secret) - 1 sub-criterion fix (cron MISSING) — NOT a full 6.37 → 8.0 refactor
- Builds on PR #118 head, NOT main, so the round 1 changes are preserved in the diff base
Lint + test verdict (2026-05-12)¶
ruff check tests/test_dimension_f_fact_signature_v2.py-> All checks passed!pytest tests/test_dimension_f_fact_signature_v2.py -v-> 9 passed in 1.02s (7 -> 9, +2 new tests)- Regression:
pytest tests/test_dimension_e_fact_verify.py -v-> 12 passed in 1.07s (no regression on dim E sibling) - YAML well-formedness:
python3 -c "import yaml; yaml.safe_load(...)"-> OK
PR¶
PR #128 — https://github.com/shigetosidumeda-cyber/autonomath-mcp/pull/128
Title: feat(wave46-dimF-r2): cron wiring for fact_signature_v2 (dim 19 axis +1)
Base: feat/jpcite_2026_05_12_wave46_dim19_score_fix (PR #118 head)
Branch: feat/jpcite_2026_05_12_wave46_dim19_F_round2
Commit: 21e39403c