# Daily Summary Job Personal Skill Implementation Plan > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** Install a personal `daily-summary-job` skill that records compact development checkpoints and generates or updates evidence-grounded Markdown reports with self-contained interactive HTML visualizations. **Architecture:** A concise `SKILL.md` orchestrates context/Git evidence collection and semantic classification. A standard-library Python helper validates the normalized JSON fact source, selects safe module/date/topic paths, and renders both deliverables from one source; an HTML asset provides all offline interaction. **Tech Stack:** Markdown, YAML, Python 3.12 standard library, HTML5, CSS, inline SVG, native JavaScript, `unittest`, PowerShell verification. ## Global Constraints - Install to `C:\Users\admin\.codex\skills\daily-summary-job`. - Use the normalized skill name `daily-summary-job`; do not use `dailySummary_job` as a folder or YAML name. - Trigger on demand from explicit `$daily-summary-job` invocations or clear natural-language daily progress/report intents; never run in the background. - Never copy full conversations or full logs into checkpoints. - Limit one checkpoint to 5 achievements, 5 issues, and 3 next steps; descriptions should be at most 120 Chinese characters where practical. - Prefer existing `_rep` naming; otherwise use a normalized module, `cross-module_rep`, or `general_rep`. - Store final files under `dailywork_report/_rep/YYYY-MM-DD/`. - Generate Markdown and HTML from the same normalized JSON source. - HTML must be a single offline file with no CDN, network request, third-party library, or external image. - Do not modify ParkingRobot business code, stage files, or create Git commits. --- ### Task 1: Initialize the personal skill scaffold **Files:** - Create: `C:\Users\admin\.codex\skills\daily-summary-job\SKILL.md` - Create: `C:\Users\admin\.codex\skills\daily-summary-job\agents\openai.yaml` - Create directories: `scripts`, `references`, `assets` **Interfaces:** - Consumes: `skill-creator/scripts/init_skill.py` and the approved design. - Produces: A discoverable personal skill skeleton with UI metadata. - [ ] **Step 1: Confirm the target does not already exist** Run: ```powershell $target = 'C:\Users\admin\.codex\skills\daily-summary-job' if (Test-Path -LiteralPath $target) { throw "Skill already exists: $target" } ``` Expected: no output. - [ ] **Step 2: Initialize the skill with required resource folders** Run with approval for writing outside the workspace: ```powershell python 'C:\Users\admin\.codex\skills\.system\skill-creator\scripts\init_skill.py' daily-summary-job ` --path 'C:\Users\admin\.codex\skills' ` --resources scripts,references,assets ` --interface 'display_name=Daily Summary Job' ` --interface 'short_description=按需记录、分类并生成带证据与交互可视化的开发工作日报' ` --interface 'default_prompt=使用 $daily-summary-job 记录当前开发进展,并生成今日 Markdown 与交互式 HTML 日报。' ``` Expected: `daily-summary-job` is created and `agents/openai.yaml` contains the three interface values. - [ ] **Step 3: Inspect only the new scaffold** Run: ```powershell Get-ChildItem -LiteralPath 'C:\Users\admin\.codex\skills\daily-summary-job' -Recurse ``` Expected: `SKILL.md`, `agents/openai.yaml`, and the three resource directories are present. --- ### Task 2: Implement deterministic path planning and checkpoint budgets with tests first **Files:** - Create: `C:\Users\admin\.codex\skills\daily-summary-job\scripts\test_prepare_report.py` - Create: `C:\Users\admin\.codex\skills\daily-summary-job\scripts\prepare_report.py` **Interfaces:** - Produces: `find_project_root(start: Path) -> Path`, `normalize_slug(value: str, fallback: str) -> str`, `infer_module(changed_paths: list[str], report_root: Path, explicit: str | None) -> str`, `plan_paths(...) -> ReportPaths`, and `validate_checkpoint_budget(data: dict) -> None`. - `ReportPaths` exposes `module_dir`, `date_dir`, `state_file`, `markdown_file`, and `html_file` as `Path` values. - [ ] **Step 1: Write failing standard-library tests** Create tests covering exact behavior: ```python def test_prefers_existing_module_folder(self): (self.root / "dailywork_report" / "pathsmoothing_rep").mkdir(parents=True) module = target.infer_module( ["src/PathSmoothing/LocalG2/Pipeline.cs"], self.root / "dailywork_report", None, ) self.assertEqual("pathsmoothing_rep", module) def test_multiple_existing_modules_become_cross_module(self): report_root = self.root / "dailywork_report" (report_root / "Map_rep").mkdir(parents=True) (report_root / "coarsepath_rep").mkdir() module = target.infer_module( ["src/Map/Grid.cs", "src/CoarsePath/Search.cs"], report_root, None ) self.assertEqual("cross-module_rep", module) def test_unknown_scope_becomes_general(self): self.assertEqual( "general_rep", target.infer_module(["README.md"], self.root / "dailywork_report", None), ) def test_rejects_checkpoint_over_budget(self): data = {"achievements": [{"title": str(i)} for i in range(6)], "issues": [], "next_steps": []} with self.assertRaisesRegex(ValueError, "at most 5 achievements"): target.validate_checkpoint_budget(data) ``` - [ ] **Step 2: Run the tests and confirm the expected import failure** Run: ```powershell python 'C:\Users\admin\.codex\skills\daily-summary-job\scripts\test_prepare_report.py' ``` Expected: FAIL because `prepare_report.py` does not yet provide the tested API. - [ ] **Step 3: Implement safe normalization, module inference, and path planning** Use a frozen dataclass and reject traversal: ```python @dataclass(frozen=True) class ReportPaths: module_dir: Path date_dir: Path state_file: Path markdown_file: Path html_file: Path def normalize_slug(value: str, fallback: str) -> str: normalized = unicodedata.normalize("NFKD", value).encode("ascii", "ignore").decode("ascii") normalized = re.sub(r"[^a-zA-Z0-9]+", "-", normalized).strip("-").lower() if not normalized or normalized in {".", ".."}: normalized = fallback return normalized[:64].rstrip("-") or fallback ``` Implement existing-folder matching before generic path inference. Preserve an existing folder's exact spelling, use `cross-module_rep` for more than one matched module, and `general_rep` when only generic files such as `README.md` are available. `plan_paths` must reuse an existing state file with the same date/module/topic in update mode and otherwise choose the next two-digit sequence. - [ ] **Step 4: Implement and enforce checkpoint budgets** ```python def validate_checkpoint_budget(data: dict[str, Any]) -> None: limits = {"achievements": 5, "issues": 5, "next_steps": 3} for key, limit in limits.items(): values = data.get(key, []) if not isinstance(values, list): raise ValueError(f"{key} must be a list") if len(values) > limit: raise ValueError(f"checkpoint allows at most {limit} {key}") ``` - [ ] **Step 5: Run the focused tests** Run the same test command. Expected: all path, classification, update, traversal, and budget tests pass. --- ### Task 3: Define and validate the normalized fact source **Files:** - Modify: `C:\Users\admin\.codex\skills\daily-summary-job\scripts\test_prepare_report.py` - Modify: `C:\Users\admin\.codex\skills\daily-summary-job\scripts\prepare_report.py` - Create: `C:\Users\admin\.codex\skills\daily-summary-job\references\report-schema.md` **Interfaces:** - Produces: `validate_report_data(data: dict) -> None`, `render_markdown(data: dict) -> str`, and a documented JSON schema shared by checkpoints, generation, and update mode. - [ ] **Step 1: Add failing schema and Markdown tests** The fixture must include one issue for each evidence level and assert stable issue identifiers appear in Markdown: ```python self.assertRaisesRegex(ValueError, "unsupported evidence level", target.validate_report_data, bad_data) markdown = target.render_markdown(self.sample_data()) self.assertIn("## 3. 今日发现的问题", markdown) self.assertIn("issue-baseline", markdown) self.assertIn("待验证风险", markdown) ``` - [ ] **Step 2: Run tests and confirm the new API fails** Expected: FAIL because validation and Markdown rendering are not implemented. - [ ] **Step 3: Implement strict schema validation** Require top-level fields `date`, `title`, `summary`, `modules`, `achievements`, `issues`, `validations`, `next_steps`, and `sources`. Require each issue to contain `id`, `title`, `module`, `evidence_level`, `discovery`, `actual`, `expected`, `cause`, `impact`, `improvements`, `validation`, `next_steps`, and `evidence`. Accept only these labels: ```python EVIDENCE_LEVELS = {"已验证", "静态分析", "对话发现", "待验证风险", "结论冲突"} ``` Reject duplicate issue identifiers and non-list collection fields. - [ ] **Step 4: Implement Markdown rendering from the validated data** Render the approved seven main sections. Every issue heading includes its stable identifier and evidence level. Evidence is rendered as a compact table containing label, reference, and result; empty optional collections render as “无已记录项” rather than invented content. - [ ] **Step 5: Document the exact schema and evidence rules** `report-schema.md` must contain the complete JSON example, field table, five evidence labels, checkpoint budget, merge-by-issue-id rule, conflict behavior, and safe-language examples distinguishing verified facts from risks. - [ ] **Step 6: Run the focused tests** Expected: schema and Markdown tests pass. --- ### Task 4: Build the self-contained interactive HTML renderer **Files:** - Modify: `C:\Users\admin\.codex\skills\daily-summary-job\scripts\test_prepare_report.py` - Modify: `C:\Users\admin\.codex\skills\daily-summary-job\scripts\prepare_report.py` - Create: `C:\Users\admin\.codex\skills\daily-summary-job\assets\interactive-report-template.html` **Interfaces:** - Produces: `render_html(data: dict, template: str) -> str` and UI hooks `issue-button`, `evidence-filter`, `cause-node`, `solution-step`, `before-after-toggle`, `validation-gate`, and `roadmap-item`. - [ ] **Step 1: Add failing HTML safety and interaction tests** ```python html = target.render_html(self.sample_data(), template_text) self.assertIn('id="daily-summary-app"', html) self.assertIn('class="issue-button"', html) self.assertIn('class="before-after-toggle"', html) self.assertIn('@media (prefers-reduced-motion: reduce)', html) self.assertNotRegex(html, r'https?://|]+src=') self.assertNotIn(" ``` Use text and icons together for status; do not rely on color alone. Provide visible focus states, arrow-key issue navigation, responsive single-column fallbacks, and a no-animation media query. Display “概念示意” whenever a problem lacks numeric evidence. - [ ] **Step 4: Implement safe JSON embedding and rendering** ```python def safe_json_for_html(data: dict[str, Any]) -> str: raw = json.dumps(data, ensure_ascii=False, separators=(",", ":")) return raw.replace("<", "\\u003c").replace(">", "\\u003e").replace("&", "\\u0026") def render_html(data: dict[str, Any], template: str) -> str: validate_report_data(data) if template.count("__REPORT_DATA__") != 1: raise ValueError("template must contain exactly one report data placeholder") return template.replace("__REPORT_DATA__", safe_json_for_html(data)) ``` - [ ] **Step 5: Run the focused tests** Expected: HTML safety, interaction-hook, evidence-consistency, and accessibility-source tests pass. --- ### Task 5: Add checkpoint, render, update, and validate CLI workflows **Files:** - Modify: `C:\Users\admin\.codex\skills\daily-summary-job\scripts\test_prepare_report.py` - Modify: `C:\Users\admin\.codex\skills\daily-summary-job\scripts\prepare_report.py` **Interfaces:** - Produces CLI subcommands `inspect`, `checkpoint`, `render`, and `validate`. - All successful commands emit compact JSON to stdout; failures return nonzero with a specific message on stderr. - [ ] **Step 1: Add failing end-to-end CLI tests** Use `tempfile.TemporaryDirectory` to verify: 1. `checkpoint` creates one compact JSON under `.daily-summary-job/YYYY-MM-DD/checkpoints`. 2. `render` creates canonical state plus a Markdown/HTML pair under `_rep/YYYY-MM-DD`. 3. `render --update` preserves the original sequence and paths. 4. A second topic receives the next sequence. 5. `validate` rejects mismatched issue identifiers or an external URL in HTML. - [ ] **Step 2: Run tests and confirm CLI failures** Expected: FAIL because the subcommands are not wired. - [ ] **Step 3: Implement the four subcommands** - `inspect`: report project root, local date, changed paths, existing report modules, inferred module, and evidence file candidates without writing. - `checkpoint`: validate compact input, create the checkpoint directory, and write UTF-8 JSON atomically. - `render`: validate full input, plan or reuse paths, render both outputs to temporary siblings, validate them, atomically replace the pair, and persist canonical state. - `validate`: compare issue identifiers and evidence levels across canonical JSON, Markdown, and HTML; reject external resources. Use `tempfile.NamedTemporaryFile(delete=False, dir=target.parent)` and `Path.replace` only after both staged files pass validation. Clean up staged files in `finally` without deleting existing deliverables. - [ ] **Step 4: Run all script tests** Run: ```powershell python 'C:\Users\admin\.codex\skills\daily-summary-job\scripts\test_prepare_report.py' -v ``` Expected: all tests pass. --- ### Task 6: Write the concise skill workflow and metadata-aligned instructions **Files:** - Modify: `C:\Users\admin\.codex\skills\daily-summary-job\SKILL.md` - Verify: `C:\Users\admin\.codex\skills\daily-summary-job\agents\openai.yaml` **Interfaces:** - Consumes: `scripts/prepare_report.py`, `references/report-schema.md`, and `assets/interactive-report-template.html`. - Produces: A skill another Codex instance can invoke for record, generate, or update intents without loading unrelated history. - [ ] **Step 1: Replace scaffold placeholders with final frontmatter** Use only the required YAML keys: ```yaml --- name: daily-summary-job description: Record compact development checkpoints and generate or update evidence-grounded daily work reports with paired Markdown and self-contained interactive HTML. Use when the user asks to record current development progress, summarize today's coding work, organize problems and improvements, visualize problem/solution reasoning, or update an existing daily development report. --- ``` - [ ] **Step 2: Write the imperative workflow** The body must tell the invoking agent to: 1. Determine record/generate/update intent without requiring fixed wording. 2. Read only current context and today's relevant evidence. 3. Run `inspect` before any write. 4. Preserve evidence boundaries and conflicts. 5. Create the normalized JSON using `report-schema.md`. 6. Use `checkpoint` for compact progress capture. 7. Use `render` for new reports and `render --update` for exact-topic updates. 8. Run `validate` and report precise paths. 9. Never fix business code, run Git commit, fabricate evidence, or read historical days by default. - [ ] **Step 3: Verify interface metadata remains aligned** `agents/openai.yaml` must show `Daily Summary Job`, the approved Chinese short description, and a default prompt explicitly containing `$daily-summary-job`. Do not add icons, colors, dependencies, or policy fields. --- ### Task 7: Validate the installed skill and run a disposable full workflow **Files:** - Verify only: `C:\Users\admin\.codex\skills\daily-summary-job\**` - Create and remove only: a dedicated directory under the system temporary directory. **Interfaces:** - Produces: Validation evidence for skill structure, unit behavior, report generation, update stability, and offline HTML constraints. - [ ] **Step 1: Run skill structure validation** ```powershell python 'C:\Users\admin\.codex\skills\.system\skill-creator\scripts\quick_validate.py' 'C:\Users\admin\.codex\skills\daily-summary-job' ``` Expected: validation succeeds. - [ ] **Step 2: Run the full script test suite** ```powershell python 'C:\Users\admin\.codex\skills\daily-summary-job\scripts\test_prepare_report.py' -v ``` Expected: all tests pass. - [ ] **Step 3: Create a disposable simulated project** Create one explicit temporary project containing `src/Map`, `src/PathSmoothing`, and an existing `dailywork_report/pathsmoothing_rep`. Feed a checkpoint and a full report fixture containing achievements, two evidence levels, an improvement, validation results, and next steps. - [ ] **Step 4: Run record, generate, update, and validation commands** Expected: - checkpoint path is date-scoped; - multi-module input selects `cross-module_rep` unless explicitly overridden; - generation creates one paired report; - update keeps the same pair; - every issue identifier appears in normalized JSON, Markdown, and HTML; - HTML contains no `http://`, `https://`, external script, or external image reference. - [ ] **Step 5: Inspect the final installed file set and repository scope** Run: ```powershell Get-ChildItem -LiteralPath 'C:\Users\admin\.codex\skills\daily-summary-job' -Recurse -File | Select-Object FullName,Length git status --short -- 'docs/superpowers/specs/2026-08-03-daily-summary-job-skill-design.md' 'docs/superpowers/plans/2026-08-03-daily-summary-job-skill.md' ``` Expected: only the new skill files exist in the personal directory; the repository shows the two uncommitted documentation files and no task-caused business-code changes. ## Execution Choice The user requested immediate execution without Git commits. Execute this plan inline with `superpowers:executing-plans`; do not dispatch subagents and do not pause for a separate execution-choice prompt.