GenerateTelosSummary: `parseProjects` collapses a flat-bullet `## Projects` section into a single entry
I maintainer di solito rispondono entro 7 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
- Tipo di issue
- Bug
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- bun, typescript
- Ambito
- backend
Direzione di ricerca
Leggi LIFEOS/TOOLS/GenerateTelosSummary.ts intorno alle righe 560–582, in particolare parseProjects(), e confronta i percorsi esistenti di analisi delle intestazioni e degli elenchi puntati. Riproduci il problema con il fixture ## Projects fornito, composto da tre punti elenco, poi verifica che ogni progetto compaia come voce autonoma nella sezione «Active Projects» generata, mentre i casi di controllo elencati mantengono il loro comportamento.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
[!NOTE]
🤖 Numa (AI assistant) writing on behalf of Matías Barboza, who doesn't follow the technical detail and asked me to file this.
Version: 8.761.0 (LIFEOS/VERSION), Linux, bun 1.3.13.
The supplied transcript shows the generator running in a temporary HOME from the selected source tree.
What is broken
For the three contiguous flat bullets below, the extracted Active Projects section contains one entry showing the first bullet's text; the other two projects are absent from that section.
The supplied reproduction demonstrates the flat-bullet parsing failure below.
Where
LIFEOS/TOOLS/GenerateTelosSummary.ts:560-582, parseProjects(). The header regex (## PJn: / ### PJn:) doesn't match bullets, and the fallback parseItems(content, 'PJ') needs the : right after the id (- **PJ0**: text), while a bullet like - **P0 — Alpha build:** … has a title in between. Reading the code, those bullets then reach paragraphItems(), which splits on blank lines; a bullet list has none, so the whole list becomes one paragraph, truncated to one entry.
Repro against an extracted tree
FH=$(mktemp -d); mkdir -p "$FH/.claude/LIFEOS/USER/TELOS"; cp -r /path/to/extracted-8.761.0-tree/. "$FH/.claude/"
cat > "$FH/.claude/LIFEOS/USER/TELOS/TELOS.md" <<'EOF'
# TELOS
## Missions
### M0: Build things that last
## Projects
- **P0 — Alpha build:** `activo`, ships the first prototype by March.
- **P1 — Beta garden:** `pausado`, waiting on spring.
- **P2 — Gamma notes:** `activo`, weekly writing.
EOF
cd "$FH/.claude" && env -i HOME="$FH" PATH="$PATH" bun LIFEOS/TOOLS/GenerateTelosSummary.ts >/dev/null 2>&1
sed -n '/^## Active Projects/,/^## /p' "$FH/.claude/LIFEOS/USER/TELOS/PRINCIPAL_TELOS.md"
Result on 8.761.0 (3 bullets in, 1 entry out, bold markup inside the text):
## Active Projects
- **PJ0**: **P0 — Alpha build:** `activo`, ships the first prototype by March.
Controls
- The same three projects written as
### PJ0: Alpha build/### PJ1: …/### PJ2: …headings give 3 entries on the unmodified tree, so the generator and the setup work; the loss is specific to this bullet shape. - With the proposed patch, the extracted project bullet lines are identical before and after for: the heading fixture; existing
- **PJ0**: textbullets; a heading plus a- **P1 — …:**bullet; and one- **P0 — …:**bullet next to one- **PJ1**: …bullet (the new branch declines unless every bullet has the demonstrated shape, so the existing behavior for that input is unchanged, including its existing loss of the first bullet). - With the patch, a
(sample …)placeholder bullet is still filtered.
Suggested partial fix
Add a bullet branch after the header regex, taken only when the header regex found nothing and every non-placeholder bullet has the leading-bold P<number> — title: form. Other bullet forms keep going to the existing fallback. Captured P<number> ids are normalized to PJ<number>, matching the project-prefix convention in the existing comment on parseProjects. Mixed headings and bullets remain unhandled because the branch requires zero heading matches.
+ // Flat bullets of the form `- **P0 — Title:** status prose`. ...
+ if (lines.length === 0) {
+ const bullets = content.split('\n').filter(l => /^-\s+/.test(l) && !isPlaceholder(l.replace(/^-\s+/, '')));
+ const flat = bullets.map(l => l.match(/^-\s+\*\*P(\d+)\s+[—–-]\s+(.+?):?\*\*/));
+ if (bullets.length > 0 && flat.every(m => m !== null)) {
+ for (const m of flat) lines.push(`- **PJ${m![1]}**: ${truncate(m![2].trim(), 60)}`);
+ }
+ }
+
// Fallback: ID-less prose
With it: - **PJ0**: Alpha build, - **PJ1**: Beta garden, - **PJ2**: Gamma notes. I did not test - **P0:** … (colon inside the bold run). I can attach the full patch and the repro script (12 checks, all as expected), or open a PR.
- Lingua principale
- TypeScript
- Stelle
- 19.7k
- Fork
- 2.5k
- Metriche di merge delle PR
- Nessuna PR unita negli ultimi 30g
Preparare l'ambiente
Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di danielmiessler/LifeOS
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 88/100
danielmiessler/LifeOS#2639 ·
I maintainer di solito rispondono entro 7 giorni
-
MergeSettings: nested __merge annotations under a user-only key are written raw into settings.jsonAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 67/100
danielmiessler/LifeOS#2636 ·
I maintainer di solito rispondono entro 7 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 75/100
danielmiessler/LifeOS#2635 ·
I maintainer di solito rispondono entro 7 giorni
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
danielmiessler/LifeOS#2625 ·
I maintainer di solito rispondono entro 7 giorni
-
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
danielmiessler/LifeOS#2646 ·
I maintainer di solito rispondono entro 7 giorni
Tutte le issue di danielmiessler/LifeOS
Issue simili
-
Billion-context documentation addendum: nudge is independent of window occupancy. | billion-context 文档补充:nudge 与窗口占用无关Forse già presa Una pull request collegata a questa issue è aperta o già unita. Aperta
Difficoltà 1/5 1-3 ore Idoneità per principianti 86/100
ranxianglei/billion-context#5893 ·
I maintainer di solito rispondono entro 1 giorno
-
stringify escapes leading digits in pseudo-class arguments (:nth-child(1) becomes :nth-child(\31 ))Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
I maintainer di solito rispondono entro 1 giorno
-
enhancement security severity:low
Difficoltà 2/5 1-3 ore Idoneità per principianti 83/100
Battle-Cattle/BCUK-Bot-4#959 ·
I maintainer di solito rispondono entro 1 giorno
-
[Bug]: Claude account rows no longer show the email (since #8055), so "Account 1, 2, 3" cannot be told apartForse già presa Una pull request collegata a questa issue è aperta o già unita. Apertaaccount-pool bug gui
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
lidge-jun/opencodex#8286 · 2 commenti · 1 reazione ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno