Skip to content

Releases: warith-harchaoui/standpoint

v0.8.5

Choose a tag to compare

@warith-harchaoui warith-harchaoui released this 25 Aug 03:58

Fixed

  • render_figures()/export_all() wrote SVG/PNG/export files non-atomically (plain open(path, "w")), so a crash or a concurrent reader (e.g. a dev-server auto-reloader watching the output directory) could observe or persist a truncated file. Both now write via a new _atomic_write() helper (temp file + os.replace).

Added

  • Pre-push git hook (.githooks/pre-push, git config core.hooksPath .githooks) delegating to the repo's own scripts/check.sh, so ruff check/ruff format --check/pytest failures are caught before reaching origin/main instead of only in CI.

v0.8.4

Choose a tag to compare

@warith-harchaoui warith-harchaoui released this 17 Aug 08:00

[0.8.4] - 2026-08-17

Documentation

  • PCA/ACP was named repeatedly in README.md, LISEZMOI.md, and the
    package's own module docstring, expanded once as an acronym, but never
    actually explained
    — added a plain-language gloss at each file's first
    substantive use: PCA finds the few directions along which the rows
    differ the most, collapsing many criteria into a readable two-axis map.

Fixed

  • export_all() never forwarded attributes to to_svg(), so every
    actually-exported figure (the CLI/GUI deliverable) got the degraded
    role+coordinates hover tooltip instead of the intended per-criterion one —
    Positioning.to_svg() (a separate convenience method) already did this
    correctly, export_all() did not.
  • run()'s vision self-check printed the wrong verdict key:
    vlm_assess()'s returned schema key is axis_labels_visible, but the
    printed summary looked up legend_visible, which never exists in the
    dict — always printing None instead of the model's actual verdict.
  • Test collection could wander into distillation/checkpoints/llama.cpp/'s
    vendored test suites
    on a machine that has done the distillation/
    setup, failing at import time on unrelated deps (appium, wget). Scoped
    [tool.pytest.ini_options] testpaths = ["tests"] so every invocation is
    safe by construction.

Added

  • tests/test_docstrings.py: an AST-walker guard over every
    standpoint/*.py module — fails with the exact missing names if any
    function or class ever ships without a docstring. The project has had
    100% coverage so far, but only by discipline; nothing in the lint gate
    actually enforced it.

v0.8.3

Choose a tag to compare

@warith-harchaoui warith-harchaoui released this 15 Aug 04:17

[0.8.3] - 2026-08-15

Fixed

  • CLI: a library exception on either console-script entry point
    (standpoint, standpoint-click) propagated as a raw Python traceback
    instead of a clean error. standpoint's argparse main() had no
    try/except around run(); click's own main() only special-cases
    ClickException/Abort. Both now print Error: ... to stderr and exit
    1. standpoint-click's console-script entry point moves to a new
      click_cli.main() wrapper (was the bare main_click command).

v0.8.2

Choose a tag to compare

@warith-harchaoui warith-harchaoui released this 13 Aug 13:15

[0.8.2] - 2026-08-10

Fixed

  • requirements.txt drifted from pyproject.toml. It still listed ollama as a
    runtime dependency and was missing best-engine-ai-helper, left over from the
    0.7.0 migration that made best-engine-ai-helper the hard runtime dependency
    and dropped the direct ollama import. ollama is only needed by
    tests/conftest.py for @needs_model tests, so it moves to the dev extra.

v0.8.0

Choose a tag to compare

@warith-harchaoui warith-harchaoui released this 10 Aug 06:03

GUI chrome now matches the sprezzature design reference (neutral grays, pixel-exact sizing). Several fixes: broken mcp extra pin, duplicate label placement, dark-mode checkerboard, Autofill-defeating default, reference/competitor coordinate collision, half-translated GUI title on language override. See CHANGELOG.md.

Standpoint 0.4.2

Choose a tag to compare

@warith-harchaoui warith-harchaoui released this 27 Jul 17:25

A cleaner positioning map, produced by running the Ralph Eyeball Loop on the map itself: render, look at the pixels, fix the source, repeat.

Changed

  • The map drops its redundant colour legend. Every dot is already labelled in place, so a 12-row colour key beside the plot just repeated all the names and squeezed the chart. It is now hidden whenever every dot is labelled (the common case), and the map uses the whole canvas. It reappears only as a fallback when a crowded map forces a label to drop, so densely packed dots stay identifiable.
  • The --check vision self-check now reports axis_labels_visible (are the four italic pole labels legible) instead of legend_visible, since the legend is now conditional. The four pole labels are always drawn.
  • Every shipped example and landscape figure was regenerated. At temperature 0 the landscape top-vertical pole re-named from Comprehensive / Compréhensibilité to Completeness / Complétude; the LANDSCAPE.md and PAYSAGE.md prose was updated to match.

Full local gate green (ruff + format + 50 tests).

Standpoint 0.4.1

Choose a tag to compare

@warith-harchaoui warith-harchaoui released this 26 Jul 22:44

Patch release: a crash fix, a writing-standard pass on the generated output, GUI polish, and a CI repair.

Fixed

  • The skill helper scripts/positioning_summary.py crashed on every run (it still passed the removed use_llm= keyword to the engine). It now takes --model and calls the current API, with a fast regression test (tests/test_skill_script.py) so it cannot break again silently.
  • Stale --no-llm / use_llm= references across README, LISEZMOI, EXAMPLES, the Dockerfile, SKILL.md, and references/interfaces.md, including a non-existent use_llm field in the documented POST /api/position body (corrected to model).
  • Red CI: making the local model a hard prerequisite had turned the test guard into a fixture that errored the whole suite when Ollama was absent (as on the hosted runner). Only the model-backed tests are gated now (@pytest.mark.needs_model); they skip in CI and still fail loudly on a developer machine, so the model-free core suite runs on the runner again.

Changed

  • Writing standard: the generated deliverable no longer uses dash punctuation. The en/fr/es prompt templates were reworded (and no longer nudge the model to emit dashes), the Axes section reads Horizontal (X ↔ Y), and the front-door docs were cleaned to match.
  • GUI: a self-explaining header (tagline + how to read the map) and a Generate button that locks during a run (no concurrent submits). The browser GUI is now documented as a shipped access surface.
  • The FastAPI app version tracks standpoint.__version__; added a __main__ module docstring and a PCAResult class docstring.

Removed

  • The --no-llm flag / use_llm= parameter (the local model is always used; pick one with --model / model=).

Standpoint 0.4.0 — multi-surface

Choose a tag to compare

@warith-harchaoui warith-harchaoui released this 24 Jul 19:26

Standpoint 0.4.0 completes the AI Helpers surface set: the same positioning()
engine — turn a comparison table into a labelled 2D positioning map + written analysis —
now reachable six ways, with nothing reimplemented across them.

Six surfaces, one engine

Library · CLI ×2 (standpoint argparse + standpoint-click) · GUI (standpoint-gui) ·
HTTP API (POST /api/position) · MCP (standpoint-mcp, tools at /mcp) · Claude/OpenCode skill.

Added

  • MCP ([mcp] extra): fastapi-mcp publishes the FastAPI endpoints as MCP tools.
  • Skill (skills/standpoint/): trigger-rich SKILL.md + references/ + a
    positioning_summary.py helper; exhaustive TRIGGERS.md referenced from the READMEs.
  • Docker (installs requirements.txt, serves API + MCP) + .dockerignore; a thin
    conda environment.yaml; a fuller requirements-dev.txt.
  • Prompts moved to standpoint/locales/i18n.yaml (en/fr/es).

Install: pip install standpoint (core) · "standpoint[gui]" · "standpoint[mcp]".

Full notes: CHANGELOG.

Standpoint 0.3.0

Choose a tag to compare

@warith-harchaoui warith-harchaoui released this 24 Jul 19:26

Browser GUI (optional gui extra) + a decision-useful, colour-coded analysis rewrite. See CHANGELOG.

v0.2.0 — AI Helpers suite + first PyPI release

Choose a tag to compare

@warith-harchaoui warith-harchaoui released this 24 Jul 08:39

Standpoint joins the AI Helpers suite (Misc group) and ships to PyPI for the first time.

  • pip install standpoint
  • Suite framing + logo, canonical Documentation section, self-referential positioning map wired into LANDSCAPE.md / PAYSAGE.md from the committed assets/*.csv source.
  • Absolute URLs in README/LISEZMOI so they render on PyPI.

See CHANGELOG.md for the full 0.2.0 notes (domain-agnostic highlight roles, localized figure title, transparent + white figure backgrounds, bilingual docs, CI).