Changelog

All notable changes to this project are documented in this file.

The format follows Keep a Changelog and this project adheres to Semantic Versioning. From 2.0.0 onward, releases and version bumps are automated by release-please driven by Conventional Commits.


2.7.0 (2026-09-09)

Features

  • add React/TypeScript static demo alongside the Gradio Space (#28) (4ceb046)

2.6.0 (2026-09-09)

Features

  • demo: add a public, no-storage Gradio demo (#26) (6afc797)

2.5.0 (2026-09-09)

Features

  • ui: add an analyze tab for in-app reliability and descriptives (#23) (fd74581)

2.4.1 (2026-09-09)

Documentation

  • add a second README/docs screenshot of the questionnaire tab (9eaa00a)

2.4.0 (2026-09-09)

Features

  • ui: add a five-tab NiceGUI application (#21) (6b675f2)

2.3.0 (2026-09-09)

Features

  • cli: add records and export commands, and persist completed runs (341974b)

  • db: persist records with reproducibility metadata (#17) (341974b)

Bug Fixes

  • cli: stop treating –questionnaire on a subcommand as the legacy form (341974b)

Documentation

  • document the record schema, its design decisions and the export shapes (341974b)

2.2.0 (2026-09-09)

Features

  • instruments: add the PANAS affect schedule (#15) (b395cda)

  • scoring: let a subscale declare how it aggregates its items (b395cda)

Bug Fixes

  • scoring: report a clean zero at the floor of a normalised scale (b395cda)

Documentation

  • document the PANAS, its two reported forms and its time frame (b395cda)

2.1.0 (2026-09-09)

Features

  • instruments: add the BFI-2-XS and BFI-10 short forms (#13) (eb995e0)

Documentation

  • document the short forms and when to choose each Big Five form (eb995e0)

2.0.0 (2026-09-09)

⚠ BREAKING CHANGES

  • restructure onto a questionnaire registry and correct BFI-2 scoring (#1)

  • the three Negative Emotionality facets change sign. Pass legacy_facet_polarity=True to bfi2() to restore pre-2.0 values; domain scores are unaffected. DATA_DIR and PROJECT_DIR now warn and do not resolve from an installed wheel – DATA_DIR pointed at a directory beside site-packages that was never shipped, so the 1.x wheel was already broken for any consumer that touched it; use personality_questionnaire.asset() instead. DOMAIN_SCALES_AS_FACET_SCALES is removed, having never been read by any code path. The minimum supported Python is now 3.12. Every other published name – bfi2(), bfi2_trait(), flip_trait_dimension(), vasf(), DOMAIN_SCALES, FACET_SCALES, ANSWER, BFI2_QUESTIONNAIRE, VASF_QUESTIONNAIRE and ANSWER_DIMS – keeps its exact signature and return value.

Features

  • cli: replace the –questionnaire flag with list, info, run and score subcommands (2179b13)

  • core: add a theme module with a WCAG AA verified palette and repository mark (2179b13)

  • instruments: give the VAS-F its own Fatigue and Energy subscales (2179b13)

  • record package version, git SHA and instrument hash with every scoring run (2179b13)

  • restructure onto a questionnaire registry and correct BFI-2 scoring (#1) (2179b13)

  • ship py.typed so downstream type checkers see the annotations (2179b13)

Bug Fixes

  • cli: default –output-dir to writing nothing instead of the tracked data directory (2179b13)

  • cli: exit rather than block forever when input ends mid-questionnaire (2179b13)

  • cli: stop returning a failure exit code from the VAS-F pre path (2179b13)

  • instruments: compose VAS-F prompts in the instrument, correcting an anchor typo (2179b13)

  • io: report the offending line number instead of raising an opaque numpy error (2179b13)

  • io: set an explicit encoding and newline so CSV rows are not double-spaced (2179b13)

  • ship instrument data inside the wheel via importlib.resources (2179b13)

Documentation

  • add a README, instrument reference, design notes and migration guide (2179b13)

  • add the coverage badge and correct the Python badge to 3.12-3.14 (2179b13)

  • publish the Sphinx site to GitHub Pages (2179b13)

Build System

  • raise the minimum supported Python to 3.12 (2179b13)

2.0.0

⚠ BREAKING CHANGES

Negative Emotionality facets changed sign

The Anxiety, Depression and Emotional Volatility facets are now scored in the direction their names describe. Previously they were flipped unconditionally while the neuroticism domain was flipped only when flip_neuroticism=True, so with default arguments the two levels of the returned dictionary contradicted each other: FACET[:, 9:12].mean(axis=1) equalled 1 - OCEAN[:, 4].

Verified against the published scoring key — Soto & John (2017), Big Five Inventory-2, APA PsycTESTS, doi:10.1037/t64008-000 — which defines reverse-keying as an item-level operation only and prescribes no transformation after averaging. Confirmed independently against the LCBC-UiO questionnaires R package, whose bfi_sums() reverse-codes items and then simply sums them.

Item membership was already correct: all twenty scales matched the published key exactly, and tests/test_bfi2.py::TestAgainstPublishedScoringKey now pins them.

Domain scores are unchanged. To reproduce pre-2.0 numbers:

bfi2(answers, legacy_facet_polarity=True)  # deprecated; removed in 3.0

Other breaking changes

  • DATA_DIR and PROJECT_DIR emit a DeprecationWarning and no longer resolve from an installed wheel. They never did: DATA_DIR pointed at a directory beside site-packages that was never shipped, so the 1.x wheel was already broken for any consumer that touched it. Use personality_questionnaire.asset().

  • DOMAIN_SCALES_AS_FACET_SCALES is removed. It was never read by any code path.

  • The minimum supported Python is now 3.12.

Features

  • Instruments are now data: Item, Subscale and Questionnaire dataclasses with a registry, and a single vectorised scorer shared by every instrument. Adding an instrument adds no arithmetic.

  • The VAS-F gains its own Fatigue and Energy subscales, plus a clearly-named derived Fatigue (composite). Previously it returned only an item-wise pre/post delta.

  • New CLI subcommands: pq list, pq info, pq run, pq score. A short pq alias is installed alongside personality-questionnaire.

  • Records carry provenance: package version, git SHA, dirty-tree flag and a hash of the administered instrument.

  • The package ships py.typed.

  • A theme module (personality_questionnaire.core.theme) holds every colour the project uses, shared by the repository mark, the documentation and the coming localhost application. Every foreground/background pairing meets WCAG AA, asserted in tests/core/test_theme.py.

Bug Fixes

  • Instrument data ships inside the wheel via importlib.resources.

  • The VAS-F pre path no longer exits with status 1 on success.

  • VAS-F prompts are composed in the instrument, fixing a "while and 10 means" typo and removing an index-range branch from the CLI.

  • --output-dir now defaults to writing nothing; it previously defaulted to data, writing participant files into the repository’s own tracked directory.

  • CSV writers set an explicit encoding and newline="", so rows are not double-spaced on Windows.

  • CSV readers report the offending line number instead of raising an opaque numpy error, and no longer grow the result array quadratically.

  • pq run no longer blocks forever when input is unavailable. Reading a closed stdin used to hang silently with no output; input ending mid-questionnaire now exits 4 and names the item it stopped at, because a partial questionnaire cannot be scored. Piping answers in remains supported.

Documentation

  • New README, plus docs/instruments.md, docs/design.md and docs/migration.md, published to GitHub Pages via Sphinx.

Continuous Integration

  • Full pipeline added: uv, ruff, ty, coverage (90% gate), Makefile, GitHub Actions CI/CD, release-please, pre-commit, CodeQL, Dependabot and Codecov.


1.1.2 and earlier

Released before this changelog was kept. See the commit history.