Skip to content

GenerateTelosSummary: G2 misclassified as deferred; Deferred / Ongoing and Completed This Year sections silently dropped #1115

@wojteksbt

Description

@wojteksbt

Symptom

Run the renderer against the as-shipped v5.0.0 sample template:

bun ~/.claude/PAI/TOOLS/GenerateTelosSummary.ts

In the generated PRINCIPAL_TELOS.md:

  • G2 (under ## Active in the template) → output as Deferred
  • All ## Deferred / Ongoing items (the no-ID bullets like - (sample) Maintain a 3x/week strength routine ...) → silently dropped
  • All ## Completed This Year items (also no-ID bullets) → silently dropped

So a fresh user running the bootstrap loses two of the three sections from the summary entirely, and the one that survives mis-classifies the third Active goal.

Root cause

In Releases/v5.0.0/.claude/PAI/TOOLS/GenerateTelosSummary.ts:

  1. L53 regex requires an ID:

    const match = line.match(/^-\s+\*?\*?(\w+)\*?\*?:\s*(.+)/);

    Plain bullets without **ID**: (the form used by the Deferred / Ongoing and Completed This Year sections in the shipped template) don't match — they're dropped before classification.

  2. L73-94 classifier uses an ID-number heuristic and ignores section headers:

    // Goals with IDs G9+ are 2026 goals based on the file structure
    if (num >= 9 || [0, 1].includes(num)) {
      active.push(...)
    } else {
      deferred.push(...)
    }

    parseItems is line-based with no awareness of ## Active, ## Deferred / Ongoing, or ## Completed This Year headers. So G2 from the template's ## Active block lands in deferred purely because 2 is not in [0, 1] and not >= 9.

Open question

The classifier in Releases/v5.0.0/.claude/PAI/TOOLS/GenerateTelosSummary.ts (lines 73-94):

// Goals with IDs G9+ are 2026 goals based on the file structure  (L77)
if (num >= 9 || [0, 1].includes(num)) {
  active.push(...)
} else {
  deferred.push(...)
}

looks like it encodes a personal goal-numbering convention — G0/G1 for foundational/long-term, G9+ for current-year milestones, the mid-range for deferred. The comment "based on the file structure" suggests this came from a specific author's GOALS.md, not a framework convention. The shipped template at Releases/v5.0.0/.claude/PAI/USER/TELOS/GOALS.md doesn't follow it (uses G0/G1/G2 under ## Active).

Two questions:

  1. Is this convention intentional and meant for all PAI users? If yes, it should be documented (template comment, README, /interview prompts) so users know to number active goals starting at G9.
  2. Or should parseGoals honor the section headers (## Active / ## Deferred / Ongoing / ## Completed This Year) instead of guessing from IDs? That makes the convention self-documenting in the file itself.

Either direction works — happy to bundle a PR once the call is made.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions