Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
33c8020
Increment Version to 1.5.0
JarbasAl Jul 2, 2026
c302275
Add AI disclosure section to README
JarbasAl Jul 2, 2026
87acd52
feat: per-clip WakeWordProbe for benchmark/test harnesses
JarbasAl Jun 26, 2026
679b3e4
ci: install bench extra so WakeWordProbe tests can import numpy
JarbasAl Jul 4, 2026
5cfa950
Merge pull request #97 from OpenVoiceOS/feat/wakeword-probe
JarbasAl Jul 16, 2026
4630bbd
Increment Version to 1.6.0a1
JarbasAl Jul 16, 2026
059a8b5
Update Changelog
JarbasAl Jul 16, 2026
fa191af
Merge pull request #116 from OpenVoiceOS/fix/restore-sessionmanager-b…
JarbasAl Jul 24, 2026
725c66e
Increment Version to 1.6.1a1
JarbasAl Jul 24, 2026
4d4d58e
Update Changelog
JarbasAl Jul 24, 2026
d5df423
fix: always tear down MiniCroft and restore the process-wide session
JarbasAl Jul 31, 2026
538f9f6
fix: report bus coverage as a per-test delta
JarbasAl Jul 31, 2026
2b6a92b
fix: reuse the booted MiniCroft in `ovoscope run`
JarbasAl Jul 31, 2026
e0f588e
fix: report accurate pipeline match verdicts
JarbasAl Jul 31, 2026
5a08e90
fix: emit the stimulus after subscribing in wait_for_match
JarbasAl Jul 31, 2026
257790a
fix: make the OCP HTTP mock see the request URL
JarbasAl Jul 31, 2026
ff9ade2
fix: release harness resources on exit
JarbasAl Jul 31, 2026
d41c76f
fix: raise on PHAL plugin load failure
JarbasAl Jul 31, 2026
1f84a1a
fix: bound the shared MiniCroft lifetime in intent_cases
JarbasAl Jul 31, 2026
db2e0e9
fix: replace a wedged simple-listener thread
JarbasAl Jul 31, 2026
ed9031d
fix: record manifest parse failures in the coverage report
JarbasAl Jul 31, 2026
66dac18
fix: close the bus client when RemoteRecorder.connect times out
JarbasAl Jul 31, 2026
db7f4ad
test: adversarial regression tests for the audit round 1 fixes
JarbasAl Jul 31, 2026
7511ae3
test: split PHAL factory-failure test into strict and tolerated variants
JarbasAl Jul 31, 2026
ccb624f
fix: restore the default session by current object, add tomli for 3.10
JarbasAl Jul 31, 2026
e51811a
fix: snapshot/restore the default session on both bus-client APIs
JarbasAl Jul 31, 2026
f20f6fc
Merge pull request #118 from OpenVoiceOS/audit/han-round1
JarbasAl Jul 31, 2026
a0b14d6
Increment Version to 1.6.2a1
JarbasAl Jul 31, 2026
4132aa1
Update Changelog
JarbasAl Jul 31, 2026
da98a37
fix: make ovoscope validate use pydantic_helpers.validate_fixture whe…
JarbasAl Jul 31, 2026
dfc3415
docs: close the documentation audit gaps (Han audit round 1)
JarbasAl Jul 31, 2026
ff504b4
fix: layer pydantic validation on top of structural checks in cmd_val…
JarbasAl Jul 31, 2026
519e97e
test: layered validation calls both the structural and pydantic checks
JarbasAl Jul 31, 2026
40d5893
Merge pull request #121 from OpenVoiceOS/audit/han-round1-docs
JarbasAl Jul 31, 2026
9fcc98e
Increment Version to 1.6.2a2
JarbasAl Jul 31, 2026
3b83e76
Update Changelog
JarbasAl Jul 31, 2026
e6a793c
fix: SkillApi retention, capture arming, and exact GUI assertions
JarbasAl Jul 31, 2026
115279d
fix: evaluate the accuracy gate in pytest_sessionfinish
JarbasAl Jul 31, 2026
92a57b9
fix: stop false-green fixture diffs and stacked bus-emit wrappers
JarbasAl Jul 31, 2026
c867dc5
fix: unwind harness state when __enter__ fails part-way
JarbasAl Jul 31, 2026
6d32db3
fix: resilience sweep across the listener, probe, and report helpers
JarbasAl Jul 31, 2026
de243d3
test: round-2 regression suite and stub-based CaptureSession tests
JarbasAl Jul 31, 2026
d13d0fe
test: build PipelineHarness through __init__ in the round-1 match test
JarbasAl Jul 31, 2026
b1d55d1
docs: document the exact= flag on the GUI assertions
JarbasAl Jul 31, 2026
533e284
test: assert the session restore uses the snapshot's API family
JarbasAl Jul 31, 2026
8abeb96
Merge origin/dev (docs round + 1.6.2a2) into audit/han-round2
JarbasAl Jul 31, 2026
60c8b1f
docs: keep the Unreleased changelog section at the top
JarbasAl Jul 31, 2026
9f7b89c
Merge pull request #123 from OpenVoiceOS/audit/han-round2
JarbasAl Jul 31, 2026
6beb9e1
Increment Version to 1.6.3a1
JarbasAl Jul 31, 2026
a3cefad
Update Changelog
JarbasAl Jul 31, 2026
76fb9f2
docs: gui-testing.md matches the exact-match assertion semantics
JarbasAl Jul 31, 2026
d9b971e
Merge pull request #125 from OpenVoiceOS/audit/han-round3
JarbasAl Jul 31, 2026
b7048b1
Increment Version to 1.6.3a2
JarbasAl Jul 31, 2026
45dedbe
Update Changelog
JarbasAl Jul 31, 2026
754f966
fix: MiniCroft boots against older ovos-core SkillManager (#128)
JarbasAl Aug 2, 2026
d3f9d0b
Increment Version to 1.6.4a1
JarbasAl Aug 2, 2026
7e9ae86
Update Changelog
JarbasAl Aug 2, 2026
200ab9e
fix: resolve unbounded get_response() hang on FakeBus (mechanism b, #…
JarbasAl Aug 11, 2026
287a800
Increment Version to 1.6.5a1
JarbasAl Aug 11, 2026
e0d0815
Update Changelog
JarbasAl Aug 11, 2026
8f48d44
fix: drain pyee listeners before teardown to avoid reentrant-__del__ …
JarbasAl Aug 11, 2026
130d256
Increment Version to 1.6.6a1
JarbasAl Aug 11, 2026
ed4f723
Update Changelog
JarbasAl Aug 11, 2026
77047a4
fix: accept canonical spec topics in captured-stream assertions (#136)
JarbasAl Aug 13, 2026
b9beab2
Increment Version to 1.6.7a1
JarbasAl Aug 13, 2026
d3214e4
Update Changelog
JarbasAl Aug 13, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/build-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,5 +11,5 @@ jobs:
secrets: inherit
with:
python_versions: '["3.10", "3.11", "3.12", "3.13", "3.14"]'
install_extras: 'audio,pydantic,media,listener'
install_extras: 'audio,pydantic,media,listener,bench'
test_path: 'test/unittests/'
2 changes: 1 addition & 1 deletion .github/workflows/coverage.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,5 +13,5 @@ jobs:
python_version: '3.11'
coverage_source: 'ovoscope'
test_path: 'test/unittests/'
test_extras: 'audio,pydantic,media,listener'
test_extras: 'audio,pydantic,media,listener,bench'
min_coverage: 0
204 changes: 30 additions & 174 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,228 +1,84 @@
# Changelog

## [1.5.0a1](https://github.com/OpenVoiceOS/ovoscope/tree/1.5.0a1) (2026-07-02)
## [1.6.7a1](https://github.com/OpenVoiceOS/ovoscope/tree/1.6.7a1) (2026-08-13)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/1.4.0a1...1.5.0a1)
[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/1.6.6a1...1.6.7a1)

**Merged pull requests:**

- feat: add a pipeline\_id filter to End2EndTest [\#112](https://github.com/OpenVoiceOS/ovoscope/pull/112) ([JarbasAl](https://github.com/JarbasAl))
- fix: accept canonical spec topics in captured-stream assertions [\#136](https://github.com/OpenVoiceOS/ovoscope/pull/136) ([JarbasAl](https://github.com/JarbasAl))

## [1.4.0a1](https://github.com/OpenVoiceOS/ovoscope/tree/1.4.0a1) (2026-06-29)
## [1.6.6a1](https://github.com/OpenVoiceOS/ovoscope/tree/1.6.6a1) (2026-08-11)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/1.3.0a1...1.4.0a1)
[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/1.6.5a1...1.6.6a1)

**Merged pull requests:**

- feat: skill\_id lifecycle filter + eof\_count for End2EndTest [\#110](https://github.com/OpenVoiceOS/ovoscope/pull/110) ([JarbasAl](https://github.com/JarbasAl))
- fix: drain pyee listeners before teardown to avoid reentrant-\_\_del\_\_ deadlock [\#132](https://github.com/OpenVoiceOS/ovoscope/pull/132) ([JarbasAl](https://github.com/JarbasAl))

## [1.3.0a1](https://github.com/OpenVoiceOS/ovoscope/tree/1.3.0a1) (2026-06-29)
## [1.6.5a1](https://github.com/OpenVoiceOS/ovoscope/tree/1.6.5a1) (2026-08-11)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/1.2.0a1...1.3.0a1)
[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/1.6.4a1...1.6.5a1)

**Merged pull requests:**

- feat: emit recognizer\_loop:audio\_output\_start in \_mock\_tts alongside audio\_output\_end [\#108](https://github.com/OpenVoiceOS/ovoscope/pull/108) ([JarbasAl](https://github.com/JarbasAl))
- fix: resolve unbounded get\_response\(\) hang on FakeBus [\#130](https://github.com/OpenVoiceOS/ovoscope/pull/130) ([JarbasAl](https://github.com/JarbasAl))

## [1.2.0a1](https://github.com/OpenVoiceOS/ovoscope/tree/1.2.0a1) (2026-06-29)
## [1.6.4a1](https://github.com/OpenVoiceOS/ovoscope/tree/1.6.4a1) (2026-08-02)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/1.1.0a2...1.2.0a1)
[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/1.6.3a2...1.6.4a1)

**Merged pull requests:**

- feat: MockTTS publishes audio\_output\_end via the full bus \(faithful\) [\#106](https://github.com/OpenVoiceOS/ovoscope/pull/106) ([JarbasAl](https://github.com/JarbasAl))
- fix: MiniCroft boots against older ovos-core SkillManager \(backwards compat\) [\#128](https://github.com/OpenVoiceOS/ovoscope/pull/128) ([JarbasAl](https://github.com/JarbasAl))

## [1.1.0a2](https://github.com/OpenVoiceOS/ovoscope/tree/1.1.0a2) (2026-06-29)
## [1.6.3a2](https://github.com/OpenVoiceOS/ovoscope/tree/1.6.3a2) (2026-07-31)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/1.1.0a1...1.1.0a2)
[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/1.6.3a1...1.6.3a2)

**Merged pull requests:**

- docs: clarify MockTTS bus.ee.emit rationale [\#104](https://github.com/OpenVoiceOS/ovoscope/pull/104) ([JarbasAl](https://github.com/JarbasAl))
- docs: gui-testing.md matches the exact-match assertion semantics [\#125](https://github.com/OpenVoiceOS/ovoscope/pull/125) ([JarbasAl](https://github.com/JarbasAl))

## [1.1.0a1](https://github.com/OpenVoiceOS/ovoscope/tree/1.1.0a1) (2026-06-29)
## [1.6.3a1](https://github.com/OpenVoiceOS/ovoscope/tree/1.6.3a1) (2026-07-31)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/1.0.2a1...1.1.0a1)
[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/1.6.2a2...1.6.3a1)

**Merged pull requests:**

- feat: MockTTS — emit audio\_output\_end on delay for speak\_dialog\(wait=True\) [\#102](https://github.com/OpenVoiceOS/ovoscope/pull/102) ([JarbasAl](https://github.com/JarbasAl))
- fix: Han audit round 2 — SkillApi retention, accuracy gate, false-green assertions, race windows [\#123](https://github.com/OpenVoiceOS/ovoscope/pull/123) ([JarbasAl](https://github.com/JarbasAl))

## [1.0.2a1](https://github.com/OpenVoiceOS/ovoscope/tree/1.0.2a1) (2026-06-27)
## [1.6.2a2](https://github.com/OpenVoiceOS/ovoscope/tree/1.6.2a2) (2026-07-31)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/1.0.1a1...1.0.2a1)
[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/1.6.2a1...1.6.2a2)

**Merged pull requests:**

- fix: MockTTS destructor must not stop the shared playback thread [\#100](https://github.com/OpenVoiceOS/ovoscope/pull/100) ([JarbasAl](https://github.com/JarbasAl))
- docs: close the documentation audit gaps \(Han audit round 1\) [\#121](https://github.com/OpenVoiceOS/ovoscope/pull/121) ([JarbasAl](https://github.com/JarbasAl))

## [1.0.1a1](https://github.com/OpenVoiceOS/ovoscope/tree/1.0.1a1) (2026-06-27)
## [1.6.2a1](https://github.com/OpenVoiceOS/ovoscope/tree/1.6.2a1) (2026-07-31)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/1.0.0a1...1.0.1a1)
[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/1.6.1a1...1.6.2a1)

**Merged pull requests:**

- fix: guard None blacklisted\_skills/intents in final-session check [\#98](https://github.com/OpenVoiceOS/ovoscope/pull/98) ([JarbasAl](https://github.com/JarbasAl))
- fix: Han audit round 1 — teardown safety, session isolation, harness lifecycle [\#118](https://github.com/OpenVoiceOS/ovoscope/pull/118) ([JarbasAl](https://github.com/JarbasAl))

## [1.0.0a1](https://github.com/OpenVoiceOS/ovoscope/tree/1.0.0a1) (2026-06-25)
## [1.6.1a1](https://github.com/OpenVoiceOS/ovoscope/tree/1.6.1a1) (2026-07-24)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.22.1a1...1.0.0a1)

**Breaking changes:**

- feat!: audio harness on OVOS spec bus namespace [\#92](https://github.com/OpenVoiceOS/ovoscope/pull/92) ([JarbasAl](https://github.com/JarbasAl))

## [0.22.1a1](https://github.com/OpenVoiceOS/ovoscope/tree/0.22.1a1) (2026-06-25)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.22.0a1...0.22.1a1)

**Merged pull requests:**

- fix: pytest 9 compatibility for the pytest11 plugin [\#88](https://github.com/OpenVoiceOS/ovoscope/pull/88) ([JarbasAl](https://github.com/JarbasAl))

## [0.22.0a1](https://github.com/OpenVoiceOS/ovoscope/tree/0.22.0a1) (2026-06-25)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.21.1a1...0.22.0a1)

**Merged pull requests:**

- feat: stream audio frames through MiniListener for multi-frame decoders [\#86](https://github.com/OpenVoiceOS/ovoscope/pull/86) ([JarbasAl](https://github.com/JarbasAl))

## [0.21.1a1](https://github.com/OpenVoiceOS/ovoscope/tree/0.21.1a1) (2026-06-25)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.21.0a1...0.21.1a1)

**Merged pull requests:**

- fix: repair ovoscope record in-process path \(default\_pipeline kwarg + from\_message skill\_ids\) [\#85](https://github.com/OpenVoiceOS/ovoscope/pull/85) ([JarbasAl](https://github.com/JarbasAl))

## [0.21.0a1](https://github.com/OpenVoiceOS/ovoscope/tree/0.21.0a1) (2026-06-25)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.20.0a1...0.21.0a1)

**Merged pull requests:**

- feat: export ovos-media OCP harness from the package + add \[media\] extra [\#89](https://github.com/OpenVoiceOS/ovoscope/pull/89) ([JarbasAl](https://github.com/JarbasAl))

## [0.20.0a1](https://github.com/OpenVoiceOS/ovoscope/tree/0.20.0a1) (2026-06-24)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.19.4a1...0.20.0a1)

**Merged pull requests:**

- feat: assert\_template\_shown for SYSTEM\_\* GUI templates [\#83](https://github.com/OpenVoiceOS/ovoscope/pull/83) ([JarbasAl](https://github.com/JarbasAl))

## [0.19.4a1](https://github.com/OpenVoiceOS/ovoscope/tree/0.19.4a1) (2026-06-17)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.19.3a1...0.19.4a1)

**Merged pull requests:**

- fix\(tts-intelligibility\): normalise rendered audio to 16kHz mono before STT [\#81](https://github.com/OpenVoiceOS/ovoscope/pull/81) ([JarbasAl](https://github.com/JarbasAl))

## [0.19.3a1](https://github.com/OpenVoiceOS/ovoscope/tree/0.19.3a1) (2026-06-17)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.19.2a1...0.19.3a1)

**Merged pull requests:**

- fix\(tts-intelligibility\): transcode non-WAV engine output before scoring [\#79](https://github.com/OpenVoiceOS/ovoscope/pull/79) ([JarbasAl](https://github.com/JarbasAl))

## [0.19.2a1](https://github.com/OpenVoiceOS/ovoscope/tree/0.19.2a1) (2026-06-16)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.19.1a2...0.19.2a1)

**Merged pull requests:**

- fix\(tts-intelligibility\): score synthesis failures as total miss, not abort [\#77](https://github.com/OpenVoiceOS/ovoscope/pull/77) ([JarbasAl](https://github.com/JarbasAl))

## [0.19.1a2](https://github.com/OpenVoiceOS/ovoscope/tree/0.19.1a2) (2026-06-15)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.19.1a1...0.19.1a2)

**Merged pull requests:**

- feat: TTS end-to-end intelligibility harness [\#75](https://github.com/OpenVoiceOS/ovoscope/pull/75) ([JarbasAl](https://github.com/JarbasAl))

## [0.19.1a1](https://github.com/OpenVoiceOS/ovoscope/tree/0.19.1a1) (2026-06-14)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.19.0a3...0.19.1a1)

**Merged pull requests:**

- fix: drop removed 'path' arg from pytest\_pycollect\_makemodule hook \(pytest\>=8 compat\) [\#73](https://github.com/OpenVoiceOS/ovoscope/pull/73) ([JarbasAl](https://github.com/JarbasAl))

## [0.19.0a3](https://github.com/OpenVoiceOS/ovoscope/tree/0.19.0a3) (2026-06-13)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.19.0a2...0.19.0a3)

**Merged pull requests:**

- chore: remove agent-audit scratch files [\#71](https://github.com/OpenVoiceOS/ovoscope/pull/71) ([JarbasAl](https://github.com/JarbasAl))

## [0.19.0a2](https://github.com/OpenVoiceOS/ovoscope/tree/0.19.0a2) (2026-06-13)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.19.0a1...0.19.0a2)

**Merged pull requests:**

- docs: standardize NGI0 Commons Fund attribution [\#69](https://github.com/OpenVoiceOS/ovoscope/pull/69) ([JarbasAl](https://github.com/JarbasAl))

## [0.19.0a1](https://github.com/OpenVoiceOS/ovoscope/tree/0.19.0a1) (2026-06-12)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.18.0a1...0.19.0a1)

**Merged pull requests:**

- feat: MiniVoiceLoop + simple/classic listener bus-sequence harnesses [\#67](https://github.com/OpenVoiceOS/ovoscope/pull/67) ([JarbasAl](https://github.com/JarbasAl))

## [0.18.0a1](https://github.com/OpenVoiceOS/ovoscope/tree/0.18.0a1) (2026-06-10)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.17.1a1...0.18.0a1)

**Merged pull requests:**

- feat\(phal\): plugin\_factories for MiniPHAL and PHALTest [\#65](https://github.com/OpenVoiceOS/ovoscope/pull/65) ([JarbasAl](https://github.com/JarbasAl))

## [0.17.1a1](https://github.com/OpenVoiceOS/ovoscope/tree/0.17.1a1) (2026-05-20)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.17.0a1...0.17.1a1)

**Merged pull requests:**

- fix\(pipeline-harness\): default \_SinkSkill bus to FakeBus [\#62](https://github.com/OpenVoiceOS/ovoscope/pull/62) ([JarbasAl](https://github.com/JarbasAl))

## [0.17.0a1](https://github.com/OpenVoiceOS/ovoscope/tree/0.17.0a1) (2026-05-14)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.16.0a1...0.17.0a1)

**Merged pull requests:**

- feat\(intent-cases\): markdown reporter, baseline diff, auto-discovery, deterministic m2v warmup [\#60](https://github.com/OpenVoiceOS/ovoscope/pull/60) ([JarbasAl](https://github.com/JarbasAl))

## [0.16.0a1](https://github.com/OpenVoiceOS/ovoscope/tree/0.16.0a1) (2026-05-14)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.15.0a1...0.16.0a1)

**Merged pull requests:**

- feat\(intent-cases\): file-based intent test layout + pytest accuracy gate [\#58](https://github.com/OpenVoiceOS/ovoscope/pull/58) ([JarbasAl](https://github.com/JarbasAl))

## [0.15.0a1](https://github.com/OpenVoiceOS/ovoscope/tree/0.15.0a1) (2026-05-14)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.14.0a1...0.15.0a1)
[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/1.6.0a1...1.6.1a1)

**Merged pull requests:**

- feat\(e2e\): reusable harness, bus helpers, and intent-registration shims [\#55](https://github.com/OpenVoiceOS/ovoscope/pull/55) ([JarbasAl](https://github.com/JarbasAl))
- fix: restore SessionManager.bus when MiniCroft stops [\#116](https://github.com/OpenVoiceOS/ovoscope/pull/116) ([JarbasAl](https://github.com/JarbasAl))

## [0.14.0a1](https://github.com/OpenVoiceOS/ovoscope/tree/0.14.0a1) (2026-05-14)
## [1.6.0a1](https://github.com/OpenVoiceOS/ovoscope/tree/1.6.0a1) (2026-07-16)

[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/0.13.1...0.14.0a1)
[Full Changelog](https://github.com/OpenVoiceOS/ovoscope/compare/1.5.0...1.6.0a1)

**Merged pull requests:**

- feat: add NEBULENTO\_PIPELINE and PALAVREADO\_PIPELINE stage groups [\#54](https://github.com/OpenVoiceOS/ovoscope/pull/54) ([JarbasAl](https://github.com/JarbasAl))
- feat: per-clip WakeWordProbe for benchmark/test harnesses [\#97](https://github.com/OpenVoiceOS/ovoscope/pull/97) ([JarbasAl](https://github.com/JarbasAl))



Expand Down
35 changes: 35 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# Contributing

## Dev setup

```bash
git clone https://github.com/TigreGotico/ovoscope
cd ovoscope
pip install -e ".[pydantic]"
```

## Running tests

```bash
pytest test/unittests -q
```

The full suite (including live OVOS integration tests) is slower and more
sensitive to the local environment; CI is the source of truth for whether a
change is green.

## Submitting a change

- Branch off `dev`, not `master`.
- Open a **draft** pull request into `dev`. The maintainer merges when it is
ready — do not merge your own PR.
- Use [Conventional Commits](https://www.conventionalcommits.org/) for
commit messages (`feat:`, `fix:`, `docs:`, `refactor:`, `test:`, `chore:`).
- Keep documentation in `docs/` and `README.md` in sync with any behaviour
change in the same PR.
- Add or update tests for the behaviour you change.

## License

By contributing, you agree your contribution is licensed under the
[Apache 2.0 License](LICENSE) that covers this project.
39 changes: 39 additions & 0 deletions FAQ.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
# FAQ

Common questions and gotchas when using OvoScope.

## Does OvoScope need a real OVOS install running?
No. `MiniCroft` runs the skill manager and intent pipeline in-process on a
`FakeBus` — there is no WebSocket server, no PulseAudio/audio stack, and no
network access required for `record`/`run`/`diff`/`validate`. See
[docs/index.md](docs/index.md) for what the in-process harness does and does
not cover, and [docs/phal.md](docs/phal.md) / [docs/audio-testing.md](docs/audio-testing.md)
for the separate PHAL and audio harnesses.

## Why did my test fail with extra/missing messages I didn't expect?
Only the keys you specify in `expected.data` and `expected.context` are
checked — extra keys in the received message are ignored. If a message you
didn't list is showing up as unexpected, check `ignore_messages` (see
[docs/end2end-test.md](docs/end2end-test.md)) — some message types (e.g.
`speak`, `ovos.skills.settings_changed`) are noisy or non-deterministic and
are commonly filtered out.

## My fixture recording is flaky / times out.
Increase `--timeout` on `ovoscope record`, or the `timeout` kwarg on
`End2EndTest.from_message`. If the skill under test depends on plugins that
take time to warm up (e.g. `ovos-m2v-pipeline` syncing its label index),
see `m2v_warmup` in [docs/intent-cases.md](docs/intent-cases.md) for how
`ovoscope.intent_cases` handles that deterministically.

## How do I test a skill that isn't installed as a plugin yet?
Pass it via `extra_skills={"my-skill.test": MySkillClass}` to `MiniCroft` /
`get_minicroft()` instead of `skill_ids`. See
[docs/minicroft.md](docs/minicroft.md).

## How do I test multiple languages?
Pass `secondary_langs=[...]` to `get_minicroft()` so Adapt/Padatious
register vocab for each locale. See "Multilingual Testing" in
[docs/minicroft.md](docs/minicroft.md).

## Where do I report a bug or ask something not covered here?
Open an issue on [GitHub](https://github.com/TigreGotico/ovoscope/issues).
26 changes: 15 additions & 11 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -120,7 +120,10 @@ stages and deliberately excludes persona, Ollama, OCP, and m2v plugins.
| [docs/minicroft.md](docs/minicroft.md) | `MiniCroft` and `get_minicroft()` reference |
| [docs/capture-session.md](docs/capture-session.md) | `CaptureSession` internals |
| [docs/end2end-test.md](docs/end2end-test.md) | `End2EndTest` full parameter reference |
| [docs/e2e-pipeline-harness.md](docs/e2e-pipeline-harness.md) | `E2EPipelineHarness` — testing a single pipeline plugin against raw bus messages |
| [docs/intent-cases.md](docs/intent-cases.md) | File-based intent test cases (`.intent.test`) via `register_intent_case_tests` |
| [docs/pydantic-integration.md](docs/pydantic-integration.md) | Typed message models with `ovos-pydantic-models` |
| [docs/cli.md](docs/cli.md) | `ovoscope` CLI — record/run/diff/validate/coverage/bus-coverage, plus `ovoscope-setup` |
| [FAQ.md](FAQ.md) | Common questions and gotchas |
---

Expand All @@ -142,20 +145,21 @@ under grant agreement No [101135429](https://cordis.europa.eu/project/id/1011354
---

## License

[Apache 2.0](LICENSE)

---

## Contributing

PRs are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.

---

## AI Disclosure
Parts of this project are developed with the assistance of AI tools.
In the interest of transparency, two files are maintained as a public record of AI involvement:
- **[FAQ.md](FAQ.md)** — Frequently asked questions that emerged from real development sessions,
including design rationale, gotchas, and usage patterns. Many entries were authored or
refined with AI assistance during the process of building and testing this framework.
- **[MAINTENANCE_REPORT.md](MAINTENANCE_REPORT.md)** — A chronological log of changes made to
this repository. Each entry records what was changed, why, which AI model was involved, what
actions it took, and what human oversight was applied. This log is updated after every
significant AI-assisted session.
These files are intentionally published so that contributors and users can understand how the
project evolves and where AI assistance has been applied.

Parts of this project — including code, tests, and documentation — are developed with the
assistance of AI coding agents, under human review before merge. Commit messages and pull
request descriptions in the [git history](https://github.com/TigreGotico/ovoscope/commits/dev)
and [CHANGELOG.md](CHANGELOG.md) note when a change originated from an AI-assisted session, so
contributors and users can see where AI assistance has been applied.
2 changes: 1 addition & 1 deletion docs/bus-coverage.md
Original file line number Diff line number Diff line change
Expand Up @@ -174,4 +174,4 @@ If you are building custom tooling, you can access these values via `SkillBusCov
* `observed_emitter_pct`: `(observed_emitters / total_emitters) * 100`
* `asserted_emitter_pct`: `(asserted_emitters / total_emitters) * 100`

Source: `SkillBusCoverage` — `ovoscope/bus_coverage.py:118`
Source: `SkillBusCoverage` — `ovoscope/bus_coverage.py`
Loading