tegwick 9404831069 fix(lifecycle): _relative_to_root path doubling with relative workspace
fix(evaluation_io): tolerate code-fenced frontmatter and varied score
shapes from small LLMs

Two bugs surfaced running the first live Lefevre chapter-I smoke
against openai/gpt-4o-mini.

1. _relative_to_root doubled artifact paths when --workspace was a
   relative path (e.g. "."). The function received an already-CWD-
   relative path like infospaces/foo/artifacts/sources/x.md and
   re-prepended root, producing infospaces/foo/infospaces/foo/...
   stored in artifacts/index.yaml — which then failed file reads on
   the subsequent workflow stage. Fix: when raw is relative, try
   CWD-relative resolution first (matches root / sub call shapes);
   fall back to root-prefixing only when the CWD interpretation does
   not land under root (matches bare relative-subpath call shapes
   from rendered template outputs).

2. _read_frontmatter_markdown only accepted a literal ---/---
   delimited block at the start of the file. gpt-4o-mini emitted three
   other shapes across the seven evaluation files this chapter
   produced:

     - ```yaml ... ``` fence (no --- delimiters)
     - ```markdown ... ``` outer fence wrapping --- frontmatter
     - scores as mapping ({groundedness: 4, ...}) instead of the
       canonical list of {name, value} dicts
     - scores as list of single-key dicts ([{groundedness: 4}, ...])

   Fix: _extract_frontmatter_block tolerates ```yaml fences and strips
   ```markdown outer fences; _normalise_scores rewrites mapping- and
   single-key-dict shapes into the canonical form so ScoreEntry.from_dict
   keeps working.

Both fixes are pure-Python; no API changes. 179 tests pass, 2 skipped.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-19 03:26:55 +02:00
2026-05-03 19:25:29 +02:00
2026-05-18 16:55:43 +02:00
2026-05-18 16:55:43 +02:00
2026-05-03 19:25:29 +02:00
2026-05-03 16:52:54 +00:00
2026-05-15 16:01:35 +02:00

infospace-bench

Workspace and service for creating, developing, evaluating, and inspecting structured knowledge spaces.

This repo is the application-layer successor for the infospace work that began inside markitect-main. It focuses on concrete infospaces and their lifecycle, while lower-level markdown tooling and runtime orchestration remain in sibling projects.

Start with:

  • INTENT.md
  • wiki/ProductRequirementsDocument.md
  • wiki/FunctionalRequirementsSpecification.md
  • SCOPE.md
  • docs/infospace-layout.md
  • docs/evaluation-and-inspection.md
  • docs/reference-pilot-decision.md
  • docs/markitect-main-scope-assessment.md
  • docs/markitect-tool-adapter.md
  • docs/entity-relation-model.md
  • docs/evaluation-history-and-metrics.md
  • docs/workflow-generation-pipeline.md
  • docs/kontextual-engine-boundary.md
  • docs/orthogonal-successor-roadmap.md
  • docs/legacy-infospace-feature-inventory.md
  • docs/successor-boundary-interface-map.md
  • docs/replacement-acceptance-matrix.md
  • docs/legacy-command-parity.md
  • docs/legacy-infospace-migration-guide.md
  • docs/replacement-readiness-decision.md
  • docs/wealth-vsm-generation-pipeline.md
  • docs/generic-source-generator.md
  • docs/agentic-memory-profile-pilot.md
  • docs/lefevre-epub3-validation.md
  • infospaces/bootstrap-pilot/
  • infospaces/wealth-vsm-legacy-slice/
  • infospaces/wealth-vsm-generation-pilot/
  • infospaces/agentic-memory-profile-pilot/
  • workplans/

Current development command:

python3 -m pytest
Description
Infospace project/workbench layer to create, develop, evaluate, and inspect concrete infospaces such as books, departments, projects, domains, or research corpora.
Readme MIT-0 1.4 MiB
Languages
Python 99.9%
Makefile 0.1%