Commit d10a05b0db067eee59f706b99779d828f990d96e
1 parent
d1130048
graphlemon: auto-commit uncommitted changes for 7687a053-f60f-48a4-8c44-a7e51843…
…0cd7-main-checkout-drift
Showing
2 changed files
with
35 additions
and
0 deletions
.claude/agent-memory/planner/MEMORY.md
| @@ -7,3 +7,4 @@ | @@ -7,3 +7,4 @@ | ||
| 7 | - [run-history click → missing run detail page](project_run_history_click_missing_detail_page.md) — gc_runs_list click only switches task selector, no #/runs/:run_id route exists (documented trade-off, not a bug regression); DAG-panel+log-viewer funcs are run-object-generic and reusable verbatim; backend needs one new by-run_id query since _work_nodes_for_run already exists keyed by run_id | 7 | - [run-history click → missing run detail page](project_run_history_click_missing_detail_page.md) — gc_runs_list click only switches task selector, no #/runs/:run_id route exists (documented trade-off, not a bug regression); DAG-panel+log-viewer funcs are run-object-generic and reusable verbatim; backend needs one new by-run_id query since _work_nodes_for_run already exists keyed by run_id |
| 8 | - [nav current-project-context PRD: consistent](project_nav_current_project_context_prd.md) — reviewed 2026-08-06, no contradictions; FR-5's "query-string parsing fix" is actually an add (render() has no query-string parsing today, only hash-path regex) — flag as accuracy issue at SDD stage, not a PRD contradiction | 8 | - [nav current-project-context PRD: consistent](project_nav_current_project_context_prd.md) — reviewed 2026-08-06, no contradictions; FR-5's "query-string parsing fix" is actually an add (render() has no query-string parsing today, only hash-path regex) — flag as accuracy issue at SDD stage, not a PRD contradiction |
| 9 | - [deploy_stage.py ConcurrentDeploymentError PRD: consistent](project_deploy_stage_concurrent_conflict_prd.md) — reviewed 2026-08-07, no contradictions; all facts (staged→candidate_starting transition, ux_deployment_active terminal set) verified against code | 9 | - [deploy_stage.py ConcurrentDeploymentError PRD: consistent](project_deploy_stage_concurrent_conflict_prd.md) — reviewed 2026-08-07, no contradictions; all facts (staged→candidate_starting transition, ux_deployment_active terminal set) verified against code |
| 10 | +- [skills detail-content bug: already fixed](project_skills_detail_content_bug_already_fixed.md) — get_skill_content/route/panel/tests all present 2026-08-13; only unverified is git commit/Validator status, not missing code |
.claude/agent-memory/planner/project_skills_detail_content_bug_already_fixed.md
0 → 100644
| 1 | +--- | ||
| 2 | +name: skills-detail-content-bug-already-fixed | ||
| 3 | +description: The #/skills/:id/audit page "no real SKILL.md content shown" bug is already fully implemented end-to-end as of 2026-08-13 — verify before replanning as open | ||
| 4 | +metadata: | ||
| 5 | + type: project | ||
| 6 | +--- | ||
| 7 | + | ||
| 8 | +As of 2026-08-13, the goal "修复 #/skills 页面点击某个 skill 后不显示该 skill 真实内容的 bug" is | ||
| 9 | +already fully implemented on disk, not open: | ||
| 10 | + | ||
| 11 | +- `src/skill_query.py::get_skill_content()` + `SkillContentMissingError` — reads | ||
| 12 | + `skills/<skill_id>/SKILL.md` via `skill_update._skill_file_path()`, with two-layer path-traversal | ||
| 13 | + protection (realpath + `os.path.commonpath` containment check against `skills/`), and lists | ||
| 14 | + sibling `references/`/`templates/`/`scripts` files as `support_files`. | ||
| 15 | +- `src/backend_server.py::_handle_skill_content()` — `GET /api/skills/:skill_id/content` route, | ||
| 16 | + wired into the dispatcher via `_SKILLS_PREFIX` + `.endswith("/content")`. | ||
| 17 | +- `frontend/app.js::mountSkillAuditLog()` — new "Skill 内容" `<div id="skill_content">` panel, | ||
| 18 | + rendered *alongside* (not replacing) the existing "迭代记录" iteration-history panel, fetched | ||
| 19 | + independently. Uses plain `<pre class="code">` + `escapeHtml`, same convention as | ||
| 20 | + `v_artifact_browser` — no markdown/highlight lib. | ||
| 21 | +- Tests: `src/test_skill_query.py` (7 cases incl. two path-traversal-rejection cases) and | ||
| 22 | + `src/test_backend_server.py` (3 cases at ~line 1710-1722). | ||
| 23 | + | ||
| 24 | +Origin: a prior self-hosted graphlemon run, `.graphlemon/runs/7fc3a7a3-ebe3-48ae-97de-a98f7f3c9d35/` | ||
| 25 | +(task `wa4wewx1g`), whose `test_report.md` describes this exact fix and says it was **"left | ||
| 26 | +uncommitted for Validator review"**. The files on disk already contain the full change when read | ||
| 27 | +directly — but git commit/Validator-approval status was not independently re-verified in this | ||
| 28 | +session (no Bash tool available to this agent). Before treating this as fully closed, check | ||
| 29 | +`git log`/`git status` on `src/skill_query.py`, `src/backend_server.py`, `frontend/app.js` to | ||
| 30 | +confirm the change actually landed on the tracked branch rather than sitting as an uncommitted | ||
| 31 | +worktree diff. | ||
| 32 | + | ||
| 33 | +**How to apply:** if this goal resurfaces, re-read the three files above first — do not replan a | ||
| 34 | +fresh implementation. If still open, the only gap is likely commit/merge status, not missing code. |