Files
log/skills/worklog/SKILL.md
T
jiantw83andClaude Opus 5 42ea0a305b feat(log): 工作日誌支援待寫入暫存
What:新增 tools/worklog-pending.sh,worklog 技能改成寫入前先併入暫存內容、寫成功後才清除。

Why:SDLC 階段跑完沒寫工作日誌時,內容如果只留在對話裡,換一個工作階段就補不回來了。

How:暫存放在 $JSC_HOME/worklog-pending/{HASH}/,檔名帶 UTC 時間與 pid,同一秒的兩個工作階段不會互相覆蓋。jsc-sdlc 的階段回報負責存入,worklog 負責併入與清除;清除排在 wiki 寫入成功之後,先清再寫會兩邊都沒有。

Who:用 jsc-sdlc 跑階段、事後要靠工作日誌回頭查的人。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-26 09:19:43 +08:00

5.2 KiB

name, description
name description
worklog After finishing a work package, collect ten facts (repo, branch, plan link, work package link, elapsed time from session-timer, token usage per CLI, status, details, difficulties, PR target) and append a templated entry to wiki LOG_{HASH} plus LOG_CONTENTS. HASH follows the shared 8-char rule with the H-prefix fallback, and the work-week Friday still drives the page content. Merge whatever tools/worklog-pending.sh holds for that HASH into the same write, then clear the pending area once the wiki write succeeded. Trigger at the end of implement or maintain; not for planning notes.

worklog — work log

After work completes, collect the ten items below and append a templates/log-entry.md entry to the wiki log page. Collection and writing MUST run as a sub agent. The entry content is written in Traditional Chinese (STE100).

Items to collect

# Item Source
1 Repository name Parse {owner}/{repo} from git remote get-url origin. This is the code repo — never pass it to wiki-url, which takes the wiki-hosting repo
2 Branch name git branch --show-current
3 Plan name Absolute link to the plan page: [PLAN_{HASH}](<url>). Resolve the hosting repo with jsc-gitea/tools/gitea.sh wiki-repo PLAN, then take <url> from gitea.sh wiki-url <that repo> PLAN_{HASH} — PLAN and LOG may live in different wiki repos, and [[...]] only resolves inside one wiki. wiki-repo exit 3 (no wiki repo configured for that type) or wiki-url exit 4 (page not found) → fill the literal 「無」 for this row and carry on; a worklog run triggered from maintain normally has no plan page
4 Work package id Absolute link to the work package heading: [WP-xx](<url>#wp-xx). Resolve the hosting repo with gitea.sh wiki-repo ANALYZE, then take <url> from gitea.sh wiki-url <that repo> ANALYZE_{HASH}. Same fallback as row 3: wiki-repo exit 3 or wiki-url exit 4 → fill 「無」 and carry on
5 Elapsed time jsc-hooks/hooks/session-timer.sh report {session_id} (seconds; convert to h/m)
6 Token usage tools/token-usage.sh <cli> {session_id} per CLI that ran; it prints input<TAB>output. Pass the same {session_id} as row 5 so the elapsed time and the token count describe one session. Fill N/A in both columns when it prints N/A; exit 2 means the CLI name is not one of claude / codex / copilot / antigravity / kiro, so fix the name and rerun
7 Task status One of the literal values 「完成」, 「部分完成」, 「阻塞」 (with reason when blocked). Derive it from the session when the session shows it; otherwise ask via jsc-ask:ask, offering those three literals as the options and stating each option's impact scope (「完成」 closes the work package, 「部分完成」 leaves the remainder open for the next run, 「阻塞」 records the blocker and hands it back to the operator)
8 Details and outputs One line per changed file or produced page: what changed there and why
9 Difficulties and resolutions One pair per line. Ask via jsc-ask:ask when the session does not show them
10 PR target branch Link to the PR page

The {HASH} in every page name above is computed with jsc-gitea/tools/hash-id.

Target page and work week

  1. Resolve the wiki repo hosting LOG pages: JSC_WIKI_REPO_LOG first, then JSC_WIKI_REPO, via gitea.sh wiki-repo LOG. Inspect the inherited shell environment variables first; ask the user per the jsc-ask:ask rules only when neither resolves. Never borrow another type's JSC_WIKI_REPO_{TYPE}. Done when the hosting {owner}/{repo} is known.
  2. Compute {HASH} from the code repo's {owner}/{repo} with jsc-gitea/tools/hash-id. Done when the 8-character {HASH} is known.
  3. Run tools/worklog-target.sh "{HASH}" all. Use PAGE for LOG_{HASH} and CONTENTS for LOG_CONTENTS. Done when both page names are known.
  4. Fix the work week: the Friday of the current work week drives the page content and the row dates. Done when that Friday is fixed as a yyyy-MM-dd date.
  5. Collect what the pending area holds for this {HASH}: run tools/worklog-pending.sh cat {HASH}. Exit 3 means nothing is pending — carry on with this run's entry alone. Anything it prints was written by an earlier SDLC stage that ended without a work log, so it goes into this write, ahead of this run's own entry, in the order printed. Done when the pending content is either merged into the entries about to be written, or confirmed empty.
  6. Read PAGE via jsc-gitea:wiki. If it does not exist, create it with the structure described in templates/log-entry.md; otherwise APPEND the new entries at the end and never overwrite existing entries. Done when every entry from step 5 plus this run's own entry exists on PAGE.
  7. Update CONTENTS in the same pass (apply templates/log-contents.md; add the row if missing, otherwise refresh its 條目數 and 最後更新). Done when the row for PAGE carries this week's Friday date.
  8. Clear the pending area: run tools/worklog-pending.sh clear {HASH} only after the wiki write of step 6 succeeded. Clearing first and failing the write loses the content on both sides. Skip this when step 5 found nothing. Done when the script reports the cleared path, or step 5 was empty.