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¶
2.6.0 (2026-09-09)¶
Features¶
2.5.0 (2026-09-09)¶
Features¶
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¶
2.3.0 (2026-09-09)¶
Features¶
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¶
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¶
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¶
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_DIRandPROJECT_DIRemit aDeprecationWarningand no longer resolve from an installed wheel. They never did:DATA_DIRpointed at a directory besidesite-packagesthat was never shipped, so the 1.x wheel was already broken for any consumer that touched it. Usepersonality_questionnaire.asset().DOMAIN_SCALES_AS_FACET_SCALESis removed. It was never read by any code path.The minimum supported Python is now 3.12.
Features¶
Instruments are now data:
Item,SubscaleandQuestionnairedataclasses 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 shortpqalias is installed alongsidepersonality-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 intests/core/test_theme.py.
Bug Fixes¶
Instrument data ships inside the wheel via
importlib.resources.The VAS-F
prepath 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-dirnow defaults to writing nothing; it previously defaulted todata, 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 runno 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.mdanddocs/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.