GenerateTelosSummary: `parseProjects` collapses a flat-bullet `## Projects` section into a single entry
Los mantenedores suelen responder en 7 días
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 2/5
- Tiempo estimado
- 1-3 horas
- Aptitud para principiantes
- 78/100
- Tipo de issue
- Error
- Claridad
- Bien especificado
- Estado de actividad
- Activo
- Stack tecnológico
- bun, typescript
- Área
- backend
Línea de trabajo
Lee LIFEOS/TOOLS/GenerateTelosSummary.ts alrededor de las líneas 560–582, especialmente parseProjects(), y compara las rutas existentes para analizar encabezados y viñetas. Reproduce el problema con el fixture ## Projects proporcionado, que contiene tres viñetas, y luego comprueba que cada proyecto aparezca como una entrada propia en la sección «Active Projects» generada, mientras los casos de control indicados conservan su comportamiento.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
[!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.
- Lenguaje dominante
- TypeScript
- Estrellas
- 19.7k
- Forks
- 2.5k
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de danielmiessler/LifeOS
-
MemorySystem.md says memory hooks live in settings.system.json; in 8.x hooks are installer-ownedAbierto
Dificultad 1/5 1-3 horas Aptitud para principiantes 88/100
danielmiessler/LifeOS#2689 ·
Los mantenedores suelen responder en 7 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
danielmiessler/LifeOS#2684 ·
Los mantenedores suelen responder en 7 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
danielmiessler/LifeOS#2682 ·
Los mantenedores suelen responder en 7 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
danielmiessler/LifeOS#2681 ·
Los mantenedores suelen responder en 7 días
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
danielmiessler/LifeOS#2677 ·
Los mantenedores suelen responder en 7 días
Todos los issues de danielmiessler/LifeOS
Issues similares
-
area:models enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
bug frontend ui
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
Los mantenedores suelen responder en 1 día
-
Recording drops clicks on links, filters and checkboxes that share a form with a search fieldPosiblemente ocupada @columbia11 la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Tencent/BrowserSkill#657 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
NousResearch/hermes-agent#151711 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 1/5 Menos de una hora Aptitud para principiantes 65/100
Los mantenedores suelen responder en 2 días