oh-my-customcode 0.58.2 → 0.58.3

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/dist/cli/index.js CHANGED
@@ -9325,7 +9325,7 @@ var init_package = __esm(() => {
9325
9325
  workspaces: [
9326
9326
  "packages/*"
9327
9327
  ],
9328
- version: "0.58.2",
9328
+ version: "0.58.3",
9329
9329
  description: "Batteries-included agent harness for Claude Code",
9330
9330
  type: "module",
9331
9331
  bin: {
@@ -30415,7 +30415,7 @@ async function removeDeprecatedFiles(targetDir, options) {
30415
30415
  return removed;
30416
30416
  }
30417
30417
  function extractFrontmatterName(content) {
30418
- const match = content.match(/^---\n([\s\S]*?)\n---/);
30418
+ const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
30419
30419
  if (!match)
30420
30420
  return null;
30421
30421
  const nameMatch = match[1].match(/^name:\s*(.+)$/m);
package/dist/index.js CHANGED
@@ -1672,7 +1672,7 @@ var package_default = {
1672
1672
  workspaces: [
1673
1673
  "packages/*"
1674
1674
  ],
1675
- version: "0.58.2",
1675
+ version: "0.58.3",
1676
1676
  description: "Batteries-included agent harness for Claude Code",
1677
1677
  type: "module",
1678
1678
  bin: {
@@ -2398,7 +2398,7 @@ async function removeDeprecatedFiles(targetDir, options) {
2398
2398
  return removed;
2399
2399
  }
2400
2400
  function extractFrontmatterName(content) {
2401
- const match = content.match(/^---\n([\s\S]*?)\n---/);
2401
+ const match = content.match(/^---\r?\n([\s\S]*?)\r?\n---/);
2402
2402
  if (!match)
2403
2403
  return null;
2404
2404
  const nameMatch = match[1].match(/^name:\s*(.+)$/m);
package/package.json CHANGED
@@ -3,7 +3,7 @@
3
3
  "workspaces": [
4
4
  "packages/*"
5
5
  ],
6
- "version": "0.58.2",
6
+ "version": "0.58.3",
7
7
  "description": "Batteries-included agent harness for Claude Code",
8
8
  "type": "module",
9
9
  "bin": {
@@ -30,20 +30,13 @@ External from https://github.com/pbakaus/impeccable (v1.0.0)
30
30
 
31
31
  ## Capabilities
32
32
 
33
- ### 10 Impeccable Steering Commands
34
-
35
- | Command | Trigger phrases | What it does |
36
- |---------|----------------|--------------|
37
- | **critique** | "review design", "UX feedback", "design critique" | Holistic UX review: hierarchy, clarity, emotional resonance, and intentionality |
38
- | **audit** | "design audit", "quality check", "design review" | Systematic check across all design dimensions — typography, color, motion, layout, copy |
39
- | **typeset** | "fix fonts", "typography", "improve text hierarchy" | Fix font choices, scale, weight contrast, line-height, and type pairing |
40
- | **colorize** | "add color", "color palette", "fix colors" | Introduce strategic color using OKLCH; build tinted neutrals, avoid pure black/white |
41
- | **animate** | "add motion", "animation", "transitions" | Add purposeful motion using 100ms/300ms/500ms rule; avoid decorative bounce/elastic |
42
- | **normalize** | "align design system", "tokens", "consistency" | Align with design system standards; enforce spacing scale and token usage |
43
- | **polish** | "final pass", "ship ready", "pre-launch review" | Pre-ship quality sweep across all dimensions; AI slop test included |
44
- | **clarify** | "improve copy", "UX writing", "button labels" | Improve unclear labels, microcopy, empty states, and error messages |
45
- | **arrange** | "fix layout", "spacing", "visual rhythm" | Fix layout structure, whitespace, alignment, and visual rhythm |
46
- | **adapt** | "responsive", "mobile", "breakpoints" | Adapt design for different screen sizes and input modes |
33
+ ## Steering Commands
34
+
35
+ 10 Impeccable commands available via the `impeccable-design` skill:
36
+
37
+ **Review**: critique, audit | **Typography**: typeset | **Color**: colorize | **Motion**: animate | **Standards**: normalize, polish | **Copy**: clarify | **Layout**: arrange | **Responsive**: adapt
38
+
39
+ See `impeccable-design` skill for detailed command workflows and triggers.
47
40
 
48
41
  ### AI Slop Test
49
42
 
@@ -7,6 +7,7 @@ memory: project
7
7
  effort: medium
8
8
  skills:
9
9
  - impeccable-design
10
+ - web-design-guidelines
10
11
  tools:
11
12
  - Read
12
13
  - Write
@@ -7,6 +7,7 @@ memory: project
7
7
  effort: medium
8
8
  skills:
9
9
  - impeccable-design
10
+ - web-design-guidelines
10
11
  tools:
11
12
  - Read
12
13
  - Write
@@ -19,8 +19,8 @@ if [ ! -f "$COST_FILE" ]; then
19
19
  exit 0
20
20
  fi
21
21
 
22
- # Read cost data (TSV: cost_usd, ctx_pct, timestamp)
23
- IFS=$'\t' read -r cost_usd ctx_pct timestamp < "$COST_FILE" 2>/dev/null || {
22
+ # TSV: cost_usd, ctx_pct, timestamp, rl_5h_pct, rl_7d_pct, rl_5h_resets, rl_7d_resets
23
+ IFS=$'\t' read -r cost_usd ctx_pct timestamp _rl_5h _rl_7d _rl_5h_resets _rl_7d_resets < "$COST_FILE" 2>/dev/null || {
24
24
  echo "$input"
25
25
  exit 0
26
26
  }
@@ -19,6 +19,12 @@ OUTCOMES_FILE="/tmp/.claude-task-outcomes-${PPID}"
19
19
  DB_PATH="${HOME}/.config/oh-my-customcode/eval-core.sqlite"
20
20
  [ -f "$DB_PATH" ] || exit 0
21
21
 
22
+ # Log file for error diagnostics
23
+ LOG_FILE="/tmp/.claude-feedback-collector-${PPID}.log"
24
+
25
+ # SQL injection safety: escape single quotes
26
+ _sql_escape() { printf '%s' "${1//\'/\'\'}"; }
27
+
22
28
  # Count failures per agent type
23
29
  declare -A FAILURE_COUNTS
24
30
  declare -A TOTAL_COUNTS
@@ -62,7 +68,16 @@ for agent_type in "${!FAILURE_COUNTS[@]}"; do
62
68
  failure_rate=$(awk "BEGIN {printf \"%.2f\", $count/$total}")
63
69
  description="Agent '${agent_type}' failed ${count}/${total} times (${failure_rate} failure rate) in session"
64
70
 
65
- sqlite3 "$DB_PATH" "INSERT INTO improvementActions (targetType, targetName, actionType, description, confidence, feedbackSource, status, createdAt) VALUES ('agent', '${agent_type}', '${action_type}', '${description}', '${confidence}', 'outcome_derived', 'proposed', '${TIMESTAMP}');" 2>/dev/null || true
71
+ escaped_agent_type=$(_sql_escape "$agent_type")
72
+ escaped_action_type=$(_sql_escape "$action_type")
73
+ escaped_description=$(_sql_escape "$description")
74
+ escaped_confidence=$(_sql_escape "$confidence")
75
+ escaped_timestamp=$(_sql_escape "$TIMESTAMP")
76
+
77
+ sqlite3 "$DB_PATH" "INSERT INTO improvement_actions (target_type, target_name, action_type, description, confidence, feedback_source, status, created_at) VALUES ('agent', '${escaped_agent_type}', '${escaped_action_type}', '${escaped_description}', '${escaped_confidence}', 'outcome_derived', 'proposed', '${escaped_timestamp}');" \
78
+ 2>>"$LOG_FILE" || {
79
+ echo "[feedback-collector] INSERT failed for ${agent_type}" >> "$LOG_FILE"
80
+ }
66
81
 
67
82
  INSERTED=$((INSERTED + 1))
68
83
  done
@@ -80,6 +80,13 @@ Use title keywords as additional hints:
80
80
  - `Part of #NNN` or `Depends on #NNN` → sequential constraint
81
81
  - Epic references → group constraint
82
82
 
83
+ **Epic handling**:
84
+ - Epic issues (title starts with "epic:" or has `epic` label) with `verify-done` label:
85
+ - Do NOT include the epic itself in release bins
86
+ - DO scan epic body for child issue references (#NNN)
87
+ - Include any open child issues that have `verify-done` label
88
+ - If all child issues are closed, recommend closing the epic
89
+
83
90
  ### Phase 4: Group into Release Units
84
91
 
85
92
  Apply these grouping rules:
@@ -91,7 +98,7 @@ Apply these grouping rules:
91
98
  3. **Sequential dependencies stay ordered** — if #A depends on #B, they go in the same release or #B's release precedes #A's
92
99
  4. **Independent issues may be batched** — up to the size cap
93
100
  5. **Minimum 1 issue per release** — never create empty releases
94
- 6. **L-sized issues occupy their own release bin** — an L-sized issue that exceeds the M cap is not split; document as a large release with a scope note
101
+ 6. **L-sized issues occupy their own release bin** — an L-sized issue that exceeds the M cap is not split; document as a large release with a scope note. **L-sized issues MUST NOT be deferred to "next session" or "future release" — they are planned in the current run as a standalone release unit.**
95
102
 
96
103
  Grouping algorithm:
97
104
  1. Sort all issues: P1 → P2 → P3, then by size (L first, then M, S, XS)
@@ -141,6 +148,16 @@ For each release group, produce:
141
148
  - {any dependency constraints, breaking changes, or risks}
142
149
  ```
143
150
 
151
+ ### Completeness Check
152
+
153
+ Before generating the plan document, verify:
154
+ - Every verify-done issue is assigned to a release bin (none dropped)
155
+ - Epic child issues with verify-done are included
156
+ - Issue count in plan == issue count from Phase 1 collection (minus epics themselves)
157
+ - No issue is deferred without explicit user approval
158
+
159
+ If any issue is missing from release bins, halt and report the discrepancy.
160
+
144
161
  **Agent suggestion heuristic**:
145
162
  | Issue domain | Suggested agent |
146
163
  |--------------|----------------|
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.58.2",
2
+ "version": "0.58.3",
3
3
  "lastUpdated": "2026-03-24T00:00:00.000Z",
4
4
  "components": [
5
5
  {