@hdwebsoft/hdcode-ai-darwin-x64 0.0.6 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/bin/hdcode +0 -0
  2. package/bin/index.js.map +1 -1
  3. package/bin/worker.js.map +1 -1
  4. package/package.json +1 -1
  5. package/resources/agents/finder.md +1 -1
  6. package/resources/agents/mermaid.md +1 -1
  7. package/resources/opencode.json +2 -1
  8. package/resources/skills/hd-code-review/CODING_STANDARDS.md +14 -114
  9. package/resources/skills/hd-code-review/REVIEW_STANDARDS.md +76 -0
  10. package/resources/skills/hd-code-review/SKILL.md +314 -90
  11. package/resources/skills/hd-code-review/reference/review-checklist.md +104 -101
  12. package/resources/skills/hd-code-review/reference/stacks/apex.md +49 -0
  13. package/resources/skills/hd-code-review/reference/stacks/aura.md +39 -0
  14. package/resources/skills/hd-code-review/reference/stacks/cakephp.md +50 -0
  15. package/resources/skills/hd-code-review/reference/stacks/django.md +53 -0
  16. package/resources/skills/hd-code-review/reference/stacks/dotnet.md +52 -0
  17. package/resources/skills/hd-code-review/reference/stacks/expo.md +39 -0
  18. package/resources/skills/hd-code-review/reference/stacks/flutter.md +48 -0
  19. package/resources/skills/hd-code-review/reference/stacks/go.md +51 -0
  20. package/resources/skills/hd-code-review/reference/stacks/laravel.md +56 -0
  21. package/resources/skills/hd-code-review/reference/stacks/lwc.md +49 -0
  22. package/resources/skills/hd-code-review/reference/stacks/nodejs.md +51 -0
  23. package/resources/skills/hd-code-review/reference/stacks/php.md +52 -0
  24. package/resources/skills/hd-code-review/reference/stacks/python.md +50 -0
  25. package/resources/skills/hd-code-review/reference/stacks/react.md +51 -0
  26. package/resources/skills/hd-code-review/reference/stacks/reactnative.md +54 -0
  27. package/resources/skills/hd-code-review/reference/stacks/scala.md +48 -0
  28. package/resources/skills/hd-code-review/reference/stacks/visualforce.md +38 -0
  29. package/resources/skills/hd-code-review/reference/stacks/vuejs.md +52 -0
  30. package/resources/skills/hd-code-review/reference/stacks/wordpress.md +54 -0
  31. package/resources/skills/hd-daily-goals/SKILL.md +41 -9
  32. package/resources/skills/hd-daily-goals/reference/ticket-autofill.md +104 -0
  33. package/resources/skills/hd-daily-goals/reference/validation-rules.md +13 -0
  34. package/resources/skills/hd-daily-report/SKILL.md +70 -14
  35. package/resources/skills/hd-daily-report/reference/sample-report-qc.md +44 -0
  36. package/resources/skills/hd-daily-report/reference/sample-report.md +18 -15
  37. package/resources/skills/hd-daily-report/reference/validation-rules.md +28 -7
  38. package/resources/skills/hd-daily-viewer/SKILL.md +222 -0
  39. package/resources/skills/hd-docs-init/SKILL.md +33 -0
  40. package/resources/skills/hd-docs-parse/SKILL.md +2 -0
  41. package/resources/skills/hd-docs-parse/scripts/parse_document.py +6 -0
  42. package/resources/skills/hd-docs-sync/SKILL.md +65 -3
  43. package/resources/skills/hd-docs-sync/reference/doc-mapping.md +1 -0
  44. package/resources/skills/hd-help/SKILL.md +24 -0
  45. package/resources/skills/hd-help/reference/skill-map.md +122 -7
  46. package/resources/skills/hd-iso/SKILL.md +409 -0
  47. package/resources/skills/hd-iso/reference/iso-27001-requirements.md +166 -0
  48. package/resources/skills/hd-iso/reference/iso-9001-requirements.md +91 -0
  49. package/resources/skills/hd-iso/reference/role-profiles.md +115 -0
  50. package/resources/skills/hd-iso-ready/SKILL.md +146 -0
  51. package/resources/skills/hd-iso-sync/SKILL.md +217 -0
  52. package/resources/skills/hd-iso-sync/reference/frontmatter-schema.md +89 -0
  53. package/resources/skills/hd-iso-verify/SKILL.md +294 -0
  54. package/resources/skills/hd-issue-resolution/SKILL.md +20 -0
  55. package/resources/skills/hd-task/SKILL.md +12 -0
@@ -0,0 +1,54 @@
1
+ # Stack: WordPress — Additional Review Checks
2
+
3
+ Injected IN ADDITION to `php` preset when WordPress signals are detected:
4
+ - `wp-config.php` in the diff
5
+ - `wp-content/` paths in the diff
6
+ - `functions.php` in a theme directory
7
+ - WordPress function calls (`add_action`, `add_filter`, `get_option`, `WP_Query`, `WP_Post`) in `.php` files
8
+
9
+ Contains WordPress-specific checks only — PHP-level checks are in `php.md`.
10
+
11
+ ---
12
+
13
+ ## Aspect 2 — Correctness (additional)
14
+
15
+ - `WP_Query` without `wp_reset_postdata()` after a custom loop — corrupts the global `$post` variable for any subsequent loop on the same page.
16
+ - `get_option()` return value used without checking for `false` — returns `false` when the option doesn't exist; always provide a default: `get_option('key', $default)`.
17
+ - Direct `$wpdb->query()` with `sprintf` / string concatenation — SQL injection. Use `$wpdb->prepare()` for all queries with variable input.
18
+ - `wp_die()` called in an AJAX handler without `wp_send_json_error()` — AJAX callers receive an HTML error page instead of JSON, breaking the frontend response handler.
19
+
20
+ ---
21
+
22
+ ## Aspect 3 — Possible Breakage (additional)
23
+
24
+ - `add_action` / `add_filter` hook registered at the wrong priority or on the wrong hook — code runs before WordPress is fully loaded or after the targeted data is already rendered; verify hook timing in the WordPress action reference.
25
+ - Plugin/theme adding `admin_enqueue_scripts` without checking `get_current_screen()` — scripts/styles enqueued on every admin page, not just the intended one.
26
+ - Direct database write bypassing WordPress APIs (raw `INSERT` into `wp_posts`) — skips post meta, cache invalidation, and hooks; use `wp_insert_post()` / `wp_update_post()`.
27
+ - Options or transients stored with `autoload = yes` for large datasets — bloats every page load's initial DB query; use `autoload = no` or custom tables for large data.
28
+
29
+ ---
30
+
31
+ ## Aspect 7 — Security (additional)
32
+
33
+ - Missing nonce verification on form submissions or AJAX handlers — CSRF. Add `wp_nonce_field()` in forms and `check_ajax_referer()` / `wp_verify_nonce()` in handlers.
34
+ - Missing capability check before privileged operations — `current_user_can('manage_options')` or the appropriate capability must be verified; absence allows privilege escalation.
35
+ - `echo $_POST['field']` or `echo get_query_var('x')` without escaping — XSS. Use `esc_html()`, `esc_attr()`, `esc_url()`, `wp_kses()` as appropriate.
36
+ - `$wpdb->prepare()` used with `%s` for table/column names — `prepare()` only escapes values, not identifiers; validate table/column names against an explicit allowlist.
37
+ - File upload without MIME type validation via `wp_check_filetype_and_ext()` — allows uploading unexpected file types; use WordPress upload APIs which apply type checking.
38
+ - `add_shortcode` rendering user-submitted content without `wp_kses()` — stored XSS via shortcode attributes.
39
+
40
+ ---
41
+
42
+ ## Aspect 10 — Code Quality (additional)
43
+
44
+ - Hardcoded database table prefix `wp_` instead of `$wpdb->prefix` — breaks multi-site installs and custom-prefix installations.
45
+ - Direct file path construction without `plugin_dir_path()` / `get_template_directory()` — breaks on non-standard WordPress setups.
46
+ - `echo` inside a function intended as a filter callback — filters should `return` the modified value, not echo it; echoed output appears before page headers.
47
+
48
+ ---
49
+
50
+ ## Aspect 12 — Architecture & Design (additional)
51
+
52
+ - Business logic in `functions.php` directly — for plugins and large themes, organize code into classes or separate includes; `functions.php` should only bootstrap hooks.
53
+ - Calling `the_post()` or `setup_postdata()` outside of a loop context — corrupts global post state.
54
+ - `wp_remote_get()` / `wp_remote_post()` called synchronously on page load for a third-party service — blocks page rendering if the remote service is slow or down; run via a scheduled event (`wp_cron`) or queue asynchronously.
@@ -16,6 +16,18 @@ Verify flow: `verify` arg → skip all phases → batch validate pasted reports
16
16
 
17
17
  ---
18
18
 
19
+ ## Startup: Ticket Pattern Bootstrap
20
+
21
+ > Run silently before every session. No user interaction.
22
+
23
+ 1. Read `reference/ticket-autofill.md` to load the algorithm spec into context.
24
+ 2. Read `~/.hd/config.yaml` if it exists → load all `ticket_patterns` entries into `$URL_PATTERN[PREFIX]`.
25
+ 3. Scan last 5 files in `~/.hd/daily-goals/` and `~/.hd/daily-reports/` (whichever exist):
26
+ - Extract any full ticket URLs using the regex from the spec
27
+ - For each found prefix: if `$URL_PATTERN[PREFIX]` is not already set, add it (bootstrap only — config is authoritative and must not be overwritten by history)
28
+
29
+ ---
30
+
19
31
  ## Pre-Check: Verify Mode
20
32
 
21
33
  If first arg is `verify`: load `reference/verify-mode.md` and follow it entirely. Skip all phases below.
@@ -76,6 +88,11 @@ Any format is fine.
76
88
 
77
89
  Accept any format (prose, bullets, partial markdown, or mix).
78
90
 
91
+ **Task link detection:** As the user enters goals, scan for ticket references using the algorithm in `reference/ticket-autofill.md`:
92
+ - Full URL with ticket ID → extract base pattern → store `$URL_PATTERN[PREFIX]`; overwrite if a different URL is seen for the same prefix (correction)
93
+ - Bare ID `PREFIX-NNNN` + `$URL_PATTERN[PREFIX]` known → silently expand to `[PREFIX-NNNN](url)` in the internal goal representation
94
+ - Bare ID `PREFIX-NNNN` + no known pattern → add to `$PENDING_LINKS` for Phase 4 enforcement; do not interrupt Phase 1
95
+
79
96
  ---
80
97
 
81
98
  ## Phase 2: Parse & Preview
@@ -221,6 +238,19 @@ If any issues remain: present the remaining issue list again and repeat.
221
238
  - A value is provided
222
239
  - A written "why" explanation is provided after "don't know"
223
240
 
241
+ ### Task link enforcement
242
+
243
+ After the main validation issues are processed, check `$PENDING_LINKS` for any goals with flagged bare IDs that still have no known pattern.
244
+
245
+ For each such goal, add a `→ Link:` line to its batch prompt (batched with any remaining validation issues for that goal, not a separate turn):
246
+
247
+ ```
248
+ → Link: ? (paste the task URL — or type "none" if no tracker)
249
+ ```
250
+
251
+ - URL provided → extract pattern per `reference/ticket-autofill.md`; silently expand all remaining goals with the same prefix; remove from `$PENDING_LINKS`; do not ask again for this prefix this session
252
+ - `none` / `no tracker` → render the ID as plain text (no link); mark prefix as no-tracker in session; remove from `$PENDING_LINKS`; do not ask again for this prefix this session
253
+
224
254
  ### Mid-loop free chat
225
255
 
226
256
  If the user's response looks like a content edit rather than answering a validation question (e.g., "actually remove that goal", "change the hours to 4h"), apply the change immediately. Re-scan affected goals, update the issue list, then continue the loop.
@@ -244,17 +274,19 @@ After each edit, re-show the updated report. Loop until [Y].
244
274
 
245
275
  ## Phase 7: Output
246
276
 
247
- Before outputting, silently apply: normalize date to `YYYY-MM-DD`; ensure each goal starts with `- To` (capital T); embed "don't know" reasons as `(Note: ...)` at end of goal line; append ` ⭐` at the end of the line that matches `$PRIORITY_GOAL`.
248
-
277
+ Before outputting, silently apply: normalize date to `YYYY-MM-DD`; ensure each goal starts with `- To` (capital T); embed "don't know" reasons as `(Note: ...)` at end of goal line; append ` ⭐` at the end of the line that matches `$PRIORITY_GOAL`; add `📋` emoji to the `##` header; compute total hours (sum of all project sections) and project count, then prepend a snapshot blockquote `> [N]h across [P] projects · Priority: [priority goal text ~60 chars]` — omit the `· Priority:` part if no `$PRIORITY_GOAL` was set, trim to ~60 chars with `…` if longer; use `### 🗂️ Name · Nh` for project headers (replacing `### Project: Name, Nh`); add one blank line between project sections (after each section's last goal, before the next `###`); for any `(Note: ...)` in a goal line — identify the key 1–4 word phrase (the blocker, dependency, person, or constraint) and bold **only that phrase** — if the note value is ≤4 words total, bold the whole value. Example: `(Note: Wait for Ricky's feedback)` → `(Note: **Wait for Ricky's** feedback)`.
249
278
 
250
279
  Output the final report in a copyable markdown block:
251
280
 
252
281
  ````markdown
253
- ## $DATE | $NAME | goals
254
- ### Project: [Name], [N]h
282
+ ## 📋 $DATE | $NAME | goals
283
+
284
+ > [N]h across [P] projects · Priority: [priority goal text, ~60 chars]
285
+ ### 🗂️ [Name] · [N]h
255
286
  - To [goal 1]
256
287
  - To [goal 2]
257
- ### Project: [Name], [N]h
288
+
289
+ ### 🗂️ [Name] · [N]h
258
290
  - To [goal 1]
259
291
  ````
260
292
 
@@ -267,11 +299,11 @@ Then add the send reminder:
267
299
  • If you post to multiple channels (you are following multiple projects and multiple leaders): send the same copy to each — do not split
268
300
  ```
269
301
 
270
- Then ask:
302
+ Write the file to `~/.hd/daily-goals/$DATE.md` automatically, then confirm:
271
303
 
272
304
  ```
273
- Save a copy to history/$DATE-daily-goals/report.md? [Y/N]
305
+ Saved: ~/.hd/daily-goals/$DATE.md
274
306
  ```
275
307
 
276
- - [Y] → write the file and confirm: `✅ Saved: history/$DATE-daily-goals/report.md`
277
- - [N] end session
308
+ **Config flush:**
309
+ After saving, compare session `$URL_PATTERN` against what was loaded at startup. For any prefix where the pattern is new or changed: merge into `~/.hd/config.yaml` under `ticket_patterns` (create the file if it doesn't exist; preserve all existing entries for other prefixes). Show `✅ Config updated: ~/.hd/config.yaml (+N pattern(s))` only when something was actually written. If nothing changed: silent.
@@ -0,0 +1,104 @@
1
+ # Ticket Auto-Fill — Algorithm Spec
2
+
3
+ Reference document loaded by hd-daily-goals, hd-daily-report, and hd-daily-viewer.
4
+
5
+ ---
6
+
7
+ ## 1. Pattern Detection Algorithm
8
+
9
+ **Regex:**
10
+ ```
11
+ https?://[^\s]+?/([A-Z]+-\d+)(/[^\s]*)?
12
+ ↑ ticket ID ↑ optional trailing slug — discard
13
+ ```
14
+
15
+ **Rule:** Find the ticket ID anywhere in the URL path. Everything after the ticket ID segment is discarded (slugs, hash fragments, query params that follow the ID segment).
16
+
17
+ ```
18
+ base_url = url up to end of ticket ID segment
19
+ with ticket ID replaced by {id}
20
+ ```
21
+
22
+ **Worked examples:**
23
+
24
+ | Input URL | Extracted base |
25
+ |-----------|---------------|
26
+ | `https://jira.company.com/browse/XOM-334` | `https://jira.company.com/browse/XOM-{id}` |
27
+ | `https://linear.app/myteam/issue/XOM-334/implement-login-flow` | `https://linear.app/myteam/issue/XOM-{id}` |
28
+ | `https://app.clickup.com/t/TIK-446` | `https://app.clickup.com/t/TIK-{id}` |
29
+
30
+ The ticket prefix is the uppercase part before the dash: `XOM` from `XOM-334`.
31
+
32
+ ---
33
+
34
+ ## 2. Auto-Expansion
35
+
36
+ When a bare ticket ID `PREFIX-NNNN` is encountered and `$URL_PATTERN[PREFIX]` is known:
37
+
38
+ ```
39
+ [PREFIX-NNNN](base_url.replace("{id}", "PREFIX-NNNN"))
40
+ ```
41
+
42
+ Example: `XOM-4423` + base `https://linear.app/myteam/issue/XOM-{id}`
43
+ → `[XOM-4423](https://linear.app/myteam/issue/XOM-4423)`
44
+
45
+ This expansion happens silently — no user prompt.
46
+
47
+ ---
48
+
49
+ ## 3. Config Format
50
+
51
+ File: `~/.hd/config.yaml`
52
+
53
+ ```yaml
54
+ ticket_patterns:
55
+ XOM: https://linear.app/myteam/issue/XOM-{id}
56
+ BUG: https://jira.mycompany.com/browse/BUG-{id}
57
+ TIK: https://app.clickup.com/t/TIK-{id}
58
+ ```
59
+
60
+ One entry per ticket prefix. The `{id}` placeholder receives the full `PREFIX-NNNN` string.
61
+
62
+ ---
63
+
64
+ ## 4. Session Lifecycle
65
+
66
+ ### Startup (before any user interaction)
67
+
68
+ 1. Read `~/.hd/config.yaml` if it exists → load all `ticket_patterns` entries into `$URL_PATTERN[PREFIX]`
69
+ 2. Scan last 5 files in `~/.hd/daily-goals/` and `~/.hd/daily-reports/` (whichever directories exist):
70
+ - For each file, extract any full ticket URLs using the regex
71
+ - For each found prefix: if `$URL_PATTERN[PREFIX]` is NOT already set, add it (bootstrap only — config is authoritative and must not be overwritten by history)
72
+
73
+ ### During Session
74
+
75
+ - Full URL with ticket ID entered → extract prefix + base → store in `$URL_PATTERN[PREFIX]`
76
+ - Correction: new full URL for same prefix → overwrite `$URL_PATTERN[PREFIX]` in session memory
77
+ - Bare ID `PREFIX-NNNN` seen → check `$URL_PATTERN[PREFIX]` → auto-expand if known; flag for Phase 4 prompt if not known
78
+
79
+ ### End of Session (after output file written)
80
+
81
+ 1. Compare current `$URL_PATTERN` against what was loaded at startup
82
+ 2. For any prefix where the pattern is new or changed:
83
+ - Merge into `~/.hd/config.yaml` under `ticket_patterns`
84
+ - If config file did not exist: create it
85
+ - Preserve all existing entries for other prefixes (merge, not overwrite)
86
+ 3. Show `✅ Config updated: ~/.hd/config.yaml (+N pattern(s))` — only when something changed
87
+ 4. If no patterns changed: silent (no confirmation line)
88
+
89
+ ---
90
+
91
+ ## 5. Opt-Out Rule
92
+
93
+ If the user types `none` or `no tracker` when asked for a link:
94
+
95
+ - Mark `$URL_PATTERN[PREFIX] = "no-tracker"` in session memory
96
+ - Render the ticket ID as plain text (no link)
97
+ - Do not ask again for that prefix this session
98
+ - **Do NOT write "no-tracker" to config** — opt-out is session-scoped only
99
+
100
+ ---
101
+
102
+ ## 6. Already-Linked IDs
103
+
104
+ If a ticket ID is already a full markdown link `[PREFIX-NNNN](url)` in the source text, leave it as-is. Do not re-expand or modify it.
@@ -81,6 +81,19 @@ Warn once per goal. If the user adds an outcome in their answer, accept it.
81
81
 
82
82
  ---
83
83
 
84
+ ## Global Task Field: Link
85
+
86
+ Every goal containing a bare ticket ID (`PREFIX-NNNN`) requires a task URL, with two exceptions:
87
+ - Pattern already known (from `~/.hd/config.yaml` or earlier in this session) → auto-expanded silently, no prompt
88
+ - User answered `none` / `no tracker` for this prefix → rendered as plain text, no prompt
89
+
90
+ Enforcement rules:
91
+ - Ask once per prefix per session (not once per goal)
92
+ - Once a URL is provided for a prefix, all remaining goals with that prefix auto-expand immediately
93
+ - Opt-out (`none`) is session-scoped only — never written to `~/.hd/config.yaml`
94
+
95
+ ---
96
+
84
97
  ## Global Rules
85
98
 
86
99
  No silent skip — every blank requires a value or written explanation. `skip`, `idk`, `N/A` alone → re-prompt.
@@ -11,9 +11,24 @@ metadata:
11
11
 
12
12
  > **[LANGUAGE]** Fully language-adaptive. Detect language from Phase 1 free-text. All prompts, validation messages, section headers, and the report mirror it. Keep the emoji; translate only the label text (e.g. `✅ WHAT'S DONE` → `✅ ĐÃ LÀM XONG`, `🔄 IN PROGRESS` → `🔄 ĐANG LÀM`, `🚀 WHAT'S NEXT` → `🚀 TIẾP THEO`, `⚠️ ISSUES & BLOCKERS` → `⚠️ VẤN ĐỀ & BLOCKER`, `📅 TIME ALLOCATION` → `📅 PHÂN BỔ THỜI GIAN`). Do not translate task content.
13
13
 
14
- See `reference/sample-report.md` for a complete example.
14
+ See `reference/sample-report.md` for a complete Dev schema example.
15
+ See `reference/sample-report-qc.md` for a complete QC schema example.
15
16
  See `reference/validation-rules.md` for field-level enforcement rules.
16
17
 
18
+ ## Startup: Ticket Pattern Bootstrap
19
+
20
+ > Run silently before Phase 0. No user interaction.
21
+
22
+ 1. Read `~/.hd/config.yaml` if it exists → load all `ticket_patterns` into `$URL_PATTERN[PREFIX]`.
23
+ Config format: `ticket_patterns: { PREFIX: "https://...PREFIX-{id}" }`
24
+ 2. Scan last 5 files in `~/.hd/daily-goals/` and `~/.hd/daily-reports/` (whichever exist):
25
+ - Extract full ticket URLs using regex `https?://[^\s]+?/([A-Z]+-\d+)(/[^\s]*)?`
26
+ - For each found prefix: if `$URL_PATTERN[PREFIX]` not already set, add it (bootstrap only — config is authoritative)
27
+
28
+ If `~/.hd/config.yaml` is absent: proceed normally. The existing Phase 1 detection and Phase 3 enforcement handle everything in-session.
29
+
30
+ ---
31
+
17
32
  ## Pipeline
18
33
 
19
34
  ```
@@ -50,6 +65,12 @@ Accept any input format without asking the user to choose a mode (prose, bullets
50
65
 
51
66
  **Auto-detect draft mode:** If input contains `### ✅` or `### 🔄` or other report section headers, treat as an existing draft — skip to Phase 3 after preview.
52
67
 
68
+ **Role detection:** After parsing Phase 1 input, silently detect reporter role from content signals. Store as `$ROLE` (default: `dev`).
69
+ - QC signals: "test", "tested", "test case", "BUG-", "passed", "failed", "regression", "verified fix", "re-test", "test plan", "QC", "QA"
70
+ - Dev signals: "PR", "merged", "commit", "deployed", "implemented", "refactored", "hotfix"
71
+ - QC signals detected → `$ROLE = qc` → confirm before Phase 2: `Detected role: QC — applying QC report schema. (Wrong? Type "dev" to switch.)`
72
+ - Dev signals or ambiguous → `$ROLE = dev` → proceed silently, no prompt.
73
+
53
74
  **Multi-project attribution:** If $PROJECTS > 1, infer each task's project from context (task ID prefixes, project names inline, natural grouping). If ambiguous, ask: "Which project does [TASK] belong to?" before parsing.
54
75
 
55
76
  **Task link detection:** Parse task references in any form: full URL, markdown link `[TASK-123](url)`, or bare ID (`TASK-123`, `123`). When the first full URL is seen for a project, extract the base pattern and store as `$URL_PATTERN[project]`. Auto-infer links for all subsequent tasks in that project — do not ask again. If no URL is known for a project yet, flag missing links internally and ask during Phase 3 as part of the per-task batch prompt.
@@ -80,6 +101,8 @@ Here's what I understood. Does this look right?
80
101
  [Y] Looks right, continue [E] Edit something
81
102
  ```
82
103
 
104
+ Empty sections in the preview render as `*(no entries detected — you'll be asked about this)*` instead of `- None`. (`- None` is only written after the user explicitly confirms a section is empty in Phase 3.)
105
+
83
106
  **[E] mode:** User types freely — "remove TASK-3", "move TASK-5 to done", "add a blocker". Apply the change and re-show. Loop until [Y].
84
107
 
85
108
  ---
@@ -92,16 +115,17 @@ Scan every item against `reference/validation-rules.md`.
92
115
 
93
116
  ### Missing fields overview
94
117
 
95
- Before the first prompt for each project, scan all 4 sections and show a compact summary:
118
+ Before the first prompt for each project, scan all 4 sections and show a compact summary. Field labels adapt to `$ROLE`:
96
119
 
97
120
  ```
98
121
  🔍 Reviewing your report — found X missing fields:
99
122
 
100
- ✅ WHAT'S DONE: [HDKIT-101] — Note ❓
101
- 🔄 IN PROGRESS: [HDKIT-104] — Completion % ❓, Understanding % ❓, When complete ❓
102
- [HDKIT-105] — Understanding % ❓, When complete ❓
123
+ ✅ WHAT'S DONE: [HDKIT-101] — Delivered ❓, Note ❓ ← dev schema
124
+ [HDKIT-201] — Result ❓, Bugs ❓ ← qc schema
125
+ 🔄 IN PROGRESS: [HDKIT-104] — Next ❓, Completion % ❓, Understanding % ❓, When complete ❓
126
+ [HDKIT-105] — Next ❓, Understanding % ❓, When complete ❓
103
127
  🚀 WHAT'S NEXT: (nothing missing)
104
- ⚠️ ISSUES: Issue 1 — Severity ❓, Blocked by ❓, Status ❓, Note ❓
128
+ ⚠️ ISSUES: Issue 1 — Severity ❓, Blocking ❓, Workaround ❓, Status ❓, Note ❓
105
129
 
106
130
  💡 You can fill in multiple items at once — paste answers for several tasks in one reply and I'll process them all.
107
131
 
@@ -114,11 +138,30 @@ Let's go through them. Starting with the first:
114
138
 
115
139
  ### Batch prompts — one task at a time
116
140
 
117
- Group all missing fields for one task into a single prompt. Never ask field-by-field for the same task.
141
+ Group all missing fields for one task into a single prompt. Never ask field-by-field for the same task. Field set adapts to `$ROLE`.
142
+
143
+ **WHAT'S DONE — dev example:**
144
+ ```
145
+ [HDKIT-101] (DONE) — a few things missing:
146
+ → Delivered: ? (e.g. PR merged, PR opened, deployed to staging, awaiting review)
147
+ → Note: ? (what should your leader know?)
148
+
149
+ 💡 To go faster: see the overview above and answer multiple items in one reply.
150
+ ```
151
+
152
+ **WHAT'S DONE — QC example:**
153
+ ```
154
+ [HDKIT-201] (DONE) — a few things missing:
155
+ → Result: ? (e.g. 23 passed / 2 failed)
156
+ → Bugs: ? (bug IDs found, or "none found")
157
+
158
+ 💡 To go faster: see the overview above and answer multiple items in one reply.
159
+ ```
118
160
 
119
161
  **In-progress task example:**
120
162
  ```
121
- [HDKIT-4] (IN PROGRESS) — a few things missing:
163
+ [HDKIT-104] (IN PROGRESS) — a few things missing:
164
+ → Next: ? (what's the concrete next step?)
122
165
  → Completion %: ?
123
166
  → Understanding %: ?
124
167
  → When complete (due): ?
@@ -131,6 +174,8 @@ Group all missing fields for one task into a single prompt. Never ask field-by-f
131
174
  [Issue 1] "API Key invalid" — a few things missing:
132
175
  → Severity: [see numbered choices below]
133
176
  → Blocked by: ? (task ID, dependency, external party, or "None")
177
+ → Blocking: ? (which tasks or features does this affect?)
178
+ → Workaround: ? (temporary fix in place, or "none")
134
179
  → Reported: Yes or No?
135
180
  → Status: [see numbered choices below]
136
181
  → Note: ? (what should your leader know?)
@@ -212,7 +257,12 @@ All 5 sections must appear. Empty = `- None`. Before confirming, ask a reflectio
212
257
  | ⚠️ ISSUES | "No issues? Think through anything slowing you down, waiting on others, or that could block you tomorrow." |
213
258
  | 📅 TIME ALLOCATION | "No time allocated today? Confirm with [Y] or add entries." |
214
259
 
215
- `[Y]` write `- None` and continue. `[N]` → "What would you like to add?" → free chat → re-validate section.
260
+ Show the prompt as:
261
+ ```
262
+ [Y] Confirm empty [N] Add something
263
+ 💡 To save time, enter free text with all missing points you can remember — I'll parse them all at once.
264
+ ```
265
+ `[Y]` → write `- None` and continue. `[N]` → accept free-text entry → parse all items → re-validate section.
216
266
 
217
267
  ### Time allocation sanity check
218
268
 
@@ -254,7 +304,13 @@ Show the complete report. Each project block: sections 1–4 + TIME ALLOCATION (
254
304
 
255
305
  ## Phase 5: Output
256
306
 
257
- Output each project as a self-contained 5-section markdown block. **No blank lines anywhere inside a block** — not between `## title` and first `###`, not after any `###` heading, not between last item of a section and the next `###`. Separate multiple blocks with the bold divider (not raw `---`). Every block — including the first — is preceded by the bold divider. TIME ALLOCATION in every block shows all projects' time entries — not just the current project's.
307
+ Output each project as a self-contained 5-section markdown block. **No blank lines anywhere inside a block** — not between `## title` and `>` snapshot, not between `>` snapshot and first `###`, not after any `###` heading, not between last item of a section and the next `###`. Separate multiple blocks with the bold divider (not raw `---`). Every block — including the first — is preceded by the bold divider. TIME ALLOCATION in every block shows all projects' time entries — not just the current project's.
308
+
309
+ **Snapshot line** — immediately after `## title`, insert one `>` line (no emoji, no blank lines around it):
310
+ `> [N] done · [N] in-progress · [N] blocker(s) ([X] open) · [Nh]`
311
+ Counts: done = non-None items in ✅; in-progress = non-None items in 🔄; blockers = non-None items in ⚠️, open count = those with Status: open or in discussion; Nh = total hours from TIME ALLOCATION.
312
+
313
+ **Semantic emphasis** — at output time, for every `📝` note line in WHAT'S DONE, IN PROGRESS, and ISSUES & BLOCKERS: identify the key 1–4 word phrase (the blocker, dependency, person, risk, or constraint) and bold only that phrase. If the note value is ≤4 words total, bold the whole value. The `📝` label is never bolded — only the value. Example: `📝 Wait for Ricky's feedback` → `📝 **Wait for Ricky's** feedback`.
258
314
 
259
315
  **Send reminder** — show this after each project block:
260
316
 
@@ -269,6 +325,7 @@ Format:
269
325
 
270
326
  ````markdown
271
327
  ## {DATE} {NAME} daily report on {PROJECT_1}
328
+ > [N] done · [N] in-progress · [N] blocker(s) ([X] open) · [Nh]
272
329
  ### ✅ WHAT'S DONE
273
330
  ...
274
331
  ### 🔄 IN PROGRESS
@@ -294,11 +351,10 @@ Format:
294
351
 
295
352
  [Send reminder]
296
353
 
297
- Then ask:
354
+ Write the file to `~/.hd/daily-reports/{DATE}.md` automatically, then confirm:
298
355
 
299
356
  ```
300
- Save a copy to history/{DATE}-daily-report/report.md? [Y/N]
357
+ Saved: ~/.hd/daily-reports/{DATE}.md
301
358
  ```
302
359
 
303
- - [Y] write file, confirm: `✅ Saved: history/{DATE}-daily-report/report.md`
304
- - [N] → end session
360
+ **Config flush:** Compare session `$URL_PATTERN` against what was loaded at startup. For any prefix where the pattern is new or changed: merge into `~/.hd/config.yaml` under `ticket_patterns` (create the file if it doesn't exist; preserve all existing entries for other prefixes). Show `✅ Config updated: ~/.hd/config.yaml (+N pattern(s))` only when something was actually written. If nothing changed: silent.
@@ -0,0 +1,44 @@
1
+ # Sample Daily Report — QC Schema
2
+
3
+ > Reference: A complete, well-filled example of `hd-daily-report` output (QC schema).
4
+ > All 5 sections are present. All required fields are filled.
5
+
6
+ ---
7
+
8
+ ## 2026-02-28 Anna Nguyen daily report on HDKit
9
+ > 2 done · 1 in-progress · 1 blocker(s) (1 open) · 8h
10
+ ### ✅ WHAT'S DONE
11
+ - [HDKIT-201](https://linear.app/hd/issue/HDKIT-201): Test login flow regression suite
12
+ → Result: 23 passed / 2 failed
13
+ → Bugs: BUG-45, BUG-46
14
+ → Scope: Login, session expiry, OAuth redirect
15
+ - Reviewed: No ⏳
16
+ - Note: 📝 Two edge cases failed on **OAuth redirect with expired token**.
17
+ - [HDKIT-202](https://linear.app/hd/issue/HDKIT-202): Re-test BUG-43 (fixed by HDKIT-198)
18
+ → Result: 1 passed / 0 failed
19
+ → Bugs: BUG-43 verified ✔️
20
+ - Reviewed: Yes ✔️
21
+ - Note: 📝 **Fix confirmed** on staging. Safe to close.
22
+ → Action needed: please close BUG-43 in the tracker
23
+ ### 🔄 IN PROGRESS
24
+ - [HDKIT-203](https://linear.app/hd/issue/HDKIT-203): Test checkout flow — payment edge cases (40%)
25
+ - 🤔 Understanding: 90%
26
+ - 🎯 When complete (due): tomorrow EOD
27
+ → Next: cover failed-payment and timeout scenarios
28
+ → Environment: staging missing test card data for Stripe sandbox
29
+ ### 🚀 WHAT'S NEXT
30
+ - [HDKIT-204](https://linear.app/hd/issue/HDKIT-204): Write test cases for new notification module (🎯 goal: 80%)
31
+ - [HDKIT-205](https://linear.app/hd/issue/HDKIT-205): Regression sweep on user profile page (🎯 goal: 100%, due: March 2nd)
32
+ ### ⚠️ ISSUES & BLOCKERS
33
+ - Issue 1: (severity: blocker) Stripe test card data missing from staging environment
34
+ - Blocked by: DevOps — staging not seeded with Stripe sandbox credentials
35
+ - Reported: Yes
36
+ - Reported at: https://discord.com/channels/hd/devops/9876543210
37
+ - References:
38
+ - None
39
+ → Blocking: HDKIT-203 payment edge case tests fully blocked
40
+ → Workaround: none — cannot simulate payment failures without test cards
41
+ - Status: open
42
+ - Note: 📝 Reported this morning, **no response yet**. Checkout tests cannot complete until resolved.
43
+ ### 📅 TIME ALLOCATION
44
+ - 🕔 8h on HDKit
@@ -1,31 +1,35 @@
1
1
  # Sample Daily Report
2
2
 
3
- > Reference: A complete, well-filled example of `hd-daily-report` output.
3
+ > Reference: A complete, well-filled example of `hd-daily-report` output (Dev schema).
4
4
  > All 5 sections are present. All required fields are filled.
5
+ > For a QC schema example, see `sample-report-qc.md`.
5
6
 
6
7
  ---
7
8
 
8
9
  ## 2026-02-28 John Smith daily report on HDKit
10
+ > 3 done · 2 in-progress · 2 blocker(s) (1 open) · 8h
9
11
  ### ✅ WHAT'S DONE
10
12
  - [HDKIT-101](https://linear.app/hd/issue/HDKIT-101): Implement daily report skill SKILL.md
11
- - Completed: Yes ✔️
13
+ Delivered: PR #203 opened, awaiting review
12
14
  - Reviewed: No ⏳
13
- - Note: 📝 Draft complete, waiting for team review before merge.
15
+ - Note: 📝 Draft complete, **waiting for team review** before merge.
14
16
  - [HDKIT-102](https://linear.app/hd/issue/HDKIT-102): Write sample report and validation rules reference
15
- - Completed: Yes ✔️
17
+ Delivered: merged to main
16
18
  - Reviewed: Yes ✔️
17
- - Note: 📝 Fully complete, merged to main.
19
+ - Note: 📝 **Fully complete**.
18
20
  - [HDKIT-103](https://linear.app/hd/issue/HDKIT-103): Fix typo in AGENTS.md introduction paragraph
19
- - Completed: Yes ✔️
21
+ Delivered: merged to main
20
22
  - Reviewed: Yes ✔️
21
- - Note: 📝 100% done, trivial fix.
23
+ - Note: 📝 **Trivial fix**, took 10 minutes.
22
24
  ### 🔄 IN PROGRESS
23
25
  - [HDKIT-104](https://linear.app/hd/issue/HDKIT-104): Add hd-daily-report to hd-help skill map (60%)
24
26
  - 🤔 Understanding: 100%
25
27
  - 🎯 When complete (due): may complete tomorrow
28
+ → Next: write the invocation examples section
26
29
  - [HDKIT-105](https://linear.app/hd/issue/HDKIT-105): Write integration tests for Phase 3 validation loop (30%)
27
30
  - 🤔 Understanding: 80%
28
31
  - 🎯 When complete (due): unclear — need to clarify test scope with tech lead first
32
+ → Next: schedule sync with tech lead to define test scope
29
33
  ### 🚀 WHAT'S NEXT
30
34
  - [HDKIT-106](https://linear.app/hd/issue/HDKIT-106): Review PR for authentication module (🎯 goal: 100%, due: March 1st)
31
35
  - [HDKIT-107](https://linear.app/hd/issue/HDKIT-107): Start planning for hd-standup skill (🎯 goal: 50%)
@@ -37,21 +41,20 @@
37
41
  - References:
38
42
  - Slack thread: https://hdwebsoft.slack.com/archives/C123/p456
39
43
  - Provisioning guide: https://wiki.hdwebsoft.com/devops/staging-credentials
44
+ → Blocking: HDKIT-105 fully blocked
45
+ → Workaround: none — cannot test without credentials
40
46
  - Status: in discussion
41
- - Note: 📝 Reported yesterday, no response yet. HDKIT-105 is fully blocked until credentials arrive. Need leadership to escalate if no update by EOD tomorrow.
47
+ - Note: 📝 Reported yesterday, **no response yet**. Need leadership to escalate if no update by EOD tomorrow.
42
48
  - Issue 2: (severity: normal) Validation loop skips empty WHAT'S NEXT section without asking
43
- - Blocked by: HDKIT-105 (integration test suite not yet set up, so hard to reproduce reliably)
49
+ - Blocked by: HDKIT-105 (integration test suite not yet set up)
44
50
  - Reported: Yes
45
51
  - Reported at: https://linear.app/hd/issue/HDKIT-109
46
52
  - References:
47
53
  - None
54
+ → Blocking: quality gate for skill release
55
+ → Workaround: manual check before each output
48
56
  - Status: open
49
- - Note: 📝 Reproduced manually. Will fix after HDKIT-105 is unblocked. Not urgent today but risks shipping a broken validation loop.
50
- - Issue 3: (severity: minor) Sample report date is hardcoded to 2026-02-28
51
- - Blocked by: None
52
- - Reported: No
53
- - Status: open
54
- - Note: 📝 Noticed while reviewing reference files. Will update to use a relative date placeholder before the skill ships.
57
+ - Note: 📝 Reproduced manually. Will fix after **HDKIT-105 is unblocked**.
55
58
  ### 📅 TIME ALLOCATION
56
59
  - 🕔 6h on HDKit
57
60
  - 🕔 2h on Client Alpha project
@@ -21,25 +21,44 @@ Applies to ALL task items across all sections (✅ WHAT'S DONE, 🔄 IN PROGRESS
21
21
 
22
22
  ## ✅ WHAT'S DONE
23
23
 
24
- Each task item must have ALL of:
24
+ Field set depends on `$ROLE`. Both schemas share `Reviewed` and `Note`.
25
25
 
26
- | Field | Required | Enforcement | Format |
27
- |-------|----------|-------------|--------|
28
- | `Completed` | Yes | Re-prompt if missing | `Yes ✔️` or `No ⏳` or `No` |
29
- | `Reviewed` | Yes | Re-prompt if missing | `Yes ✔️` or `No ⏳` or `No` |
26
+ ### Dev schema ($ROLE = dev)
27
+
28
+ | Field | Required | Enforcement | Format / Examples |
29
+ |-------|----------|-------------|-------------------|
30
+ | `→ Delivered:` | Yes | Re-prompt if missing | `PR merged`, `PR #42 opened`, `deployed to staging`, `awaiting review` |
31
+ | `Reviewed` | Yes | Re-prompt if missing | `Yes ✔️` / `No ⏳` / or free text (e.g. `pending PR review`, `shared with lead`, `approved by manager`) |
30
32
  | `Note` | Yes | Re-prompt if blank | Free text with context |
33
+ | `→ Action needed:` | Conditional | Omit if not applicable — no enforcement | `please review PR before EOD`, `escalate with client` |
34
+
35
+ ### QC schema ($ROLE = qc)
36
+
37
+ | Field | Required | Enforcement | Format / Examples |
38
+ |-------|----------|-------------|-------------------|
39
+ | `→ Result:` | Yes | Re-prompt if missing | `23 passed / 2 failed`, `all passed` |
40
+ | `→ Bugs:` | Yes | Re-prompt if missing | Bug IDs e.g. `BUG-45, BUG-46`; or `none found` |
41
+ | `→ Scope:` | Optional | No enforcement | Test area — omit if self-evident from task title |
42
+ | `Reviewed` | Yes | Re-prompt if missing | `Yes ✔️` / `No ⏳` / or free text (e.g. `test log shared with lead`, `pending QA sign-off`) |
43
+ | `Note` | Yes | Re-prompt if blank | Free text with context |
44
+ | `→ Action needed:` | Conditional | Omit if not applicable — no enforcement | Same as dev |
45
+
46
+ **Re-test items:** handled inline in `→ Bugs:` — e.g. `BUG-45 verified ✔️ · BUG-46 still failing (re-opened)`
31
47
 
32
48
  ---
33
49
 
34
50
  ## 🔄 IN PROGRESS
35
51
 
36
- Each task item must have ALL of:
52
+ Each task item must have ALL of (both roles):
37
53
 
38
54
  | Field | Required | Enforcement | Format |
39
55
  |-------|----------|-------------|--------|
40
56
  | Completion % (in title line) | Yes | Strict numeric — re-prompt until valid | `N%` (0–100), e.g. `(60%)` |
41
57
  | `Understanding` | Yes | Strict numeric — re-prompt until valid | `🤔 Understanding: N%` |
42
58
  | `When complete (due)` | Yes | Explanation allowed — re-prompt if blank | Date, timeframe, or written reason |
59
+ | `→ Next:` | Yes | Re-prompt if blank | Concrete next action — 1 line |
60
+ | `→ Action needed:` | Conditional | Omit if not applicable — no enforcement | Leader action required |
61
+ | `→ Environment:` | QC only, informational | No enforcement | `staging OK` / `missing test data` / `build not deployed yet` |
43
62
 
44
63
  ### % format rules
45
64
  - Valid: `80%`, `100%`, `0%`
@@ -67,7 +86,7 @@ Each task item must have:
67
86
 
68
87
  ## ⚠️ ISSUES & BLOCKERS
69
88
 
70
- Each issue must have ALL of:
89
+ Each issue must have ALL of (both roles):
71
90
 
72
91
  | Field | Required | Condition | Enforcement | Format |
73
92
  |-------|----------|-----------|-------------|--------|
@@ -76,6 +95,8 @@ Each issue must have ALL of:
76
95
  | `Reported` | Yes | Always | Re-prompt if missing | `Yes` / `No` |
77
96
  | `Reported at` | Yes | Only if `Reported: Yes` | Re-prompt if missing | URL / platform name |
78
97
  | `Status` | Yes | Always | Present as numbered choice [1]/[2]/[3]; re-show list if invalid | `open` / `in discussion` / `solved` |
98
+ | `→ Blocking:` | Yes | Always | Re-prompt if missing; `N/A` alone not accepted | Task IDs, feature name, module — e.g. `HDKIT-105 fully blocked` |
99
+ | `→ Workaround:` | Yes | Always | Re-prompt if missing | Mitigation in place, or `none` |
79
100
  | `Note` | Yes | Always | Re-prompt if blank or trivial | Free text with real context |
80
101
  | `References` | No | Optional | — | Link list |
81
102