@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.
- package/bin/hdcode +0 -0
- package/bin/index.js.map +1 -1
- package/bin/worker.js.map +1 -1
- package/package.json +1 -1
- package/resources/agents/finder.md +1 -1
- package/resources/agents/mermaid.md +1 -1
- package/resources/opencode.json +2 -1
- package/resources/skills/hd-code-review/CODING_STANDARDS.md +14 -114
- package/resources/skills/hd-code-review/REVIEW_STANDARDS.md +76 -0
- package/resources/skills/hd-code-review/SKILL.md +314 -90
- package/resources/skills/hd-code-review/reference/review-checklist.md +104 -101
- package/resources/skills/hd-code-review/reference/stacks/apex.md +49 -0
- package/resources/skills/hd-code-review/reference/stacks/aura.md +39 -0
- package/resources/skills/hd-code-review/reference/stacks/cakephp.md +50 -0
- package/resources/skills/hd-code-review/reference/stacks/django.md +53 -0
- package/resources/skills/hd-code-review/reference/stacks/dotnet.md +52 -0
- package/resources/skills/hd-code-review/reference/stacks/expo.md +39 -0
- package/resources/skills/hd-code-review/reference/stacks/flutter.md +48 -0
- package/resources/skills/hd-code-review/reference/stacks/go.md +51 -0
- package/resources/skills/hd-code-review/reference/stacks/laravel.md +56 -0
- package/resources/skills/hd-code-review/reference/stacks/lwc.md +49 -0
- package/resources/skills/hd-code-review/reference/stacks/nodejs.md +51 -0
- package/resources/skills/hd-code-review/reference/stacks/php.md +52 -0
- package/resources/skills/hd-code-review/reference/stacks/python.md +50 -0
- package/resources/skills/hd-code-review/reference/stacks/react.md +51 -0
- package/resources/skills/hd-code-review/reference/stacks/reactnative.md +54 -0
- package/resources/skills/hd-code-review/reference/stacks/scala.md +48 -0
- package/resources/skills/hd-code-review/reference/stacks/visualforce.md +38 -0
- package/resources/skills/hd-code-review/reference/stacks/vuejs.md +52 -0
- package/resources/skills/hd-code-review/reference/stacks/wordpress.md +54 -0
- package/resources/skills/hd-daily-goals/SKILL.md +41 -9
- package/resources/skills/hd-daily-goals/reference/ticket-autofill.md +104 -0
- package/resources/skills/hd-daily-goals/reference/validation-rules.md +13 -0
- package/resources/skills/hd-daily-report/SKILL.md +70 -14
- package/resources/skills/hd-daily-report/reference/sample-report-qc.md +44 -0
- package/resources/skills/hd-daily-report/reference/sample-report.md +18 -15
- package/resources/skills/hd-daily-report/reference/validation-rules.md +28 -7
- package/resources/skills/hd-daily-viewer/SKILL.md +222 -0
- package/resources/skills/hd-docs-init/SKILL.md +33 -0
- package/resources/skills/hd-docs-parse/SKILL.md +2 -0
- package/resources/skills/hd-docs-parse/scripts/parse_document.py +6 -0
- package/resources/skills/hd-docs-sync/SKILL.md +65 -3
- package/resources/skills/hd-docs-sync/reference/doc-mapping.md +1 -0
- package/resources/skills/hd-help/SKILL.md +24 -0
- package/resources/skills/hd-help/reference/skill-map.md +122 -7
- package/resources/skills/hd-iso/SKILL.md +409 -0
- package/resources/skills/hd-iso/reference/iso-27001-requirements.md +166 -0
- package/resources/skills/hd-iso/reference/iso-9001-requirements.md +91 -0
- package/resources/skills/hd-iso/reference/role-profiles.md +115 -0
- package/resources/skills/hd-iso-ready/SKILL.md +146 -0
- package/resources/skills/hd-iso-sync/SKILL.md +217 -0
- package/resources/skills/hd-iso-sync/reference/frontmatter-schema.md +89 -0
- package/resources/skills/hd-iso-verify/SKILL.md +294 -0
- package/resources/skills/hd-issue-resolution/SKILL.md +20 -0
- 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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
302
|
+
Write the file to `~/.hd/daily-goals/$DATE.md` automatically, then confirm:
|
|
271
303
|
|
|
272
304
|
```
|
|
273
|
-
|
|
305
|
+
✅ Saved: ~/.hd/daily-goals/$DATE.md
|
|
274
306
|
```
|
|
275
307
|
|
|
276
|
-
|
|
277
|
-
|
|
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
|
-
|
|
102
|
-
|
|
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 ❓,
|
|
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-
|
|
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
|
-
|
|
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
|
-
|
|
354
|
+
Write the file to `~/.hd/daily-reports/{DATE}.md` automatically, then confirm:
|
|
298
355
|
|
|
299
356
|
```
|
|
300
|
-
|
|
357
|
+
✅ Saved: ~/.hd/daily-reports/{DATE}.md
|
|
301
358
|
```
|
|
302
359
|
|
|
303
|
-
|
|
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
|
-
|
|
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
|
-
|
|
17
|
+
→ Delivered: merged to main
|
|
16
18
|
- Reviewed: Yes ✔️
|
|
17
|
-
- Note: 📝 Fully complete
|
|
19
|
+
- Note: 📝 **Fully complete**.
|
|
18
20
|
- [HDKIT-103](https://linear.app/hd/issue/HDKIT-103): Fix typo in AGENTS.md introduction paragraph
|
|
19
|
-
|
|
21
|
+
→ Delivered: merged to main
|
|
20
22
|
- Reviewed: Yes ✔️
|
|
21
|
-
- Note: 📝
|
|
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
|
|
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
|
|
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
|
|
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
|
-
|
|
24
|
+
Field set depends on `$ROLE`. Both schemas share `Reviewed` and `Note`.
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
|
29
|
-
|
|
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
|
|