]> Piment Noir Git Repositories - freqai-strategies.git/log
freqai-strategies.git
4 days agorefactor(ReforceXY): cleanup reward space analysis additive enablement handling
Jérôme Benoit [Sun, 21 Dec 2025 19:54:21 +0000 (20:54 +0100)] 
refactor(ReforceXY): cleanup reward space analysis additive enablement handling

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 days agofix(pbrs): canonical mode disables additives; migrate prev_potential API
Jérôme Benoit [Sun, 21 Dec 2025 17:35:10 +0000 (18:35 +0100)] 
fix(pbrs): canonical mode disables additives; migrate prev_potential API

4 days agoperf(qav3): adjust decline_quantile to 0.75
Jérôme Benoit [Sun, 21 Dec 2025 15:36:16 +0000 (16:36 +0100)] 
perf(qav3): adjust decline_quantile to 0.75

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 days agorefactor(qav3): remove unneeded float conversion in vw_path_length calculation
Jérôme Benoit [Sun, 21 Dec 2025 14:19:09 +0000 (15:19 +0100)] 
refactor(qav3): remove unneeded float conversion in vw_path_length calculation

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 days agorefactor(qav3): cleanup numerical stability checks
Jérôme Benoit [Sun, 21 Dec 2025 14:13:05 +0000 (15:13 +0100)] 
refactor(qav3): cleanup numerical stability checks

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 days agofix(qav3): handle edge cases in zero_phase_filter, smooth_extrema, soft_extremum
Jérôme Benoit [Sun, 21 Dec 2025 13:03:13 +0000 (14:03 +0100)] 
fix(qav3): handle edge cases in zero_phase_filter, smooth_extrema, soft_extremum

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
5 days agofix(qav3): computation of volume-weighted ER
Jérôme Benoit [Sat, 20 Dec 2025 23:44:44 +0000 (00:44 +0100)] 
fix(qav3): computation of volume-weighted ER

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
5 days agorefactor(tests): Standardize constants, improve documentation and add docstrings...
Jérôme Benoit [Sat, 20 Dec 2025 21:33:38 +0000 (22:33 +0100)] 
refactor(tests): Standardize constants, improve documentation and add docstrings (#22)

* Refactor: Standardize constant access patterns in test suite

Replace class-based constant access (self.TEST_*, self.TOL_*, etc.) with
direct imports from tests/constants module. This improves code clarity and
follows the DRY principle by using the centralized constants module as the
single source of truth.

Changes:
- Replace self.TEST_* with PARAMS.* across all test files
- Replace self.TOL_* with TOLERANCE.* for all tolerance values
- Replace self.SEED* with SEEDS.* for test seeds
- Replace self.CONTINUITY_* with CONTINUITY.*
- Replace self.EXIT_FACTOR_* with EXIT_FACTOR.*
- Replace self.BH_FP_RATE_THRESHOLD with STATISTICAL.BH_FP_RATE_THRESHOLD
- Add/update imports in 12 test files to include required constants
- Fix PNL_BASE_STD -> PNL_STD (correct constant name)

Files modified:
- tests/test_base.py: Updated imports and all constant references
- tests/api/test_api_helpers.py: Added PARAMS, SEEDS, TOLERANCE imports
- tests/cli/test_cli_params_and_csv.py: Added SEEDS import
- tests/components/test_*.py: Updated to use direct imports
- tests/integration/test_*.py: Updated constant access patterns
- tests/pbrs/test_pbrs.py: Comprehensive constant migration
- tests/robustness/test_robustness.py: Updated all robustness tests
- tests/statistics/test_statistics.py: Added required constants

All tests verified passing after migration.

* docs(tests): Add tolerance justification guide and docstring template

Phase 1.2 & 1.3: Comprehensive documentation for test suite best practices

Added:
1. TOLERANCE_GUIDE.md - Comprehensive guide for tolerance selection
   - Decision matrix for choosing appropriate tolerances
   - Detailed rationale for each tolerance constant
   - Usage examples and anti-patterns
   - Mathematical justification for tolerance magnitudes

2. .docstring_template.md - Standardized test docstring format
   - Multiple template levels (minimal, standard, complex)
   - Section-by-section guidelines
   - Common patterns (property-based, regression, integration)
   - Checklist for new tests

3. Tolerance justification comments in test files
   - test_robustness.py: Added 11 inline comments explaining tolerance choices
   - test_pbrs.py: Enhanced docstring with tolerance rationale
   - Focused on IDENTITY_RELAXED and NUMERIC_GUARD usages

4. Fixed test_statistics.py imports
   - Moved constants import to proper location (top of file)
   - Removed duplicate import that was incorrectly placed mid-function

Benefits:
- New contributors can quickly understand tolerance choices
- Reduces test flakiness by documenting error accumulation models
- Establishes clear standards for test documentation
- Makes tolerance selection systematic rather than arbitrary

See also: tests/constants.py for tolerance constant definitions

* docs(tests): Enhance README with constant management and tolerance guidelines

- Add Constants & Configuration section explaining centralized constants.py
- Add Tolerance Selection section with quick reference table
- Add Test Documentation section referencing .docstring_template.md
- Add Maintenance Guidelines section covering:
  - Constant management best practices
  - Tolerance documentation requirements
  - Test documentation standards
- Add Additional Resources section linking to new docs:
  - TOLERANCE_GUIDE.md (numerical tolerance selection guide)
  - .docstring_template.md (test documentation template)
  - constants.py (frozen dataclass constants)
  - helpers/assertions.py (custom assertion functions)
  - test_base.py (base class utilities)

Completes Phase 1 documentation by integrating the tolerance guide and
docstring template into the authoritative test suite README.

* fix(tests): Correct constant reference in bootstrap reproducibility test

Fix incorrect constant migration: SCENARIOS.BOOTSTRAP_ITERATIONS does not
exist. Should use STATISTICAL.BOOTSTRAP_DEFAULT_ITERATIONS instead.

The migration script incorrectly mapped self.BOOTSTRAP_DEFAULT_ITERATIONS
to SCENARIOS.BOOTSTRAP_ITERATIONS when it should have been mapped to
STATISTICAL.BOOTSTRAP_DEFAULT_ITERATIONS (from StatisticalConfig dataclass).

Fixes test_stats_hypothesis_seed_reproducibility in test_statistics.py.

* docs(tests): Clarify TOLERANCE_GUIDE.md as authoritative source

Make it explicit that TOLERANCE_GUIDE.md is the single authoritative source
for tolerance documentation, with README.md providing only a quick reference.

This follows the 'No duplication' principle from copilot-instructions.md:
maintain single authoritative documentation source; reference other sources
rather than copying.

* refactor(tests): Complete constant migration - remove all self.* references

Run migration script to eliminate remaining 28 self.* constant references
across 4 test files:
- test_api_helpers.py: self.SEED → SEEDS.SMOKE_TEST (fixed mapping)
- test_reward_components.py: self.TEST_RR → PARAMS.RISK_REWARD_RATIO (2×)
- test_reward_calculation.py: self.TEST_RR → PARAMS.RISK_REWARD_RATIO (1×)
- test_robustness.py: self.TEST_RR → PARAMS.RISK_REWARD_RATIO (24×)

The migration script (tests/scripts/migrate_constants.py) automates this
refactoring to maintain consistency. It serves two purposes:
1. Complete initial migration (this commit)
2. Future-proof tool for adding new constants or refactoring patterns

All test classes now use direct imports from tests/constants.py.
Class-level aliases in RewardSpaceTestBase can be removed in a follow-up.

* refactor(tests): Remove migration script and unused aliases

- Delete temporary migration script (tests/scripts/migrate_constants.py)
- Remove unused class constant aliases from test_base.py
- Migrate remaining self.PBRS_* references to PBRS.* in test_pbrs.py
- Fix test_case.TOL_IDENTITY_STRICT reference in test_reward_components.py
- Keep only actively used class constants (DEFAULT_PARAMS, PBRS_TERMINAL_PROB, PBRS_SWEEP_ITER, JS_DISTANCE_UPPER_BOUND)

All 154 tests passing.

* docs(tests): Add 21 docstrings to helpers, robustness and statistics tests

Add comprehensive docstrings following .docstring_template.md format:

- tests/helpers/test_internal_branches.py: 3 docstrings
- tests/helpers/test_utilities.py: 6 docstrings
- tests/robustness/test_branch_coverage.py: 5 docstrings
- tests/statistics/test_feature_analysis_failures.py: 7 docstrings

All 29 tests verified passing.

* docs(tests): Remove TOLERANCE_GUIDE.md

* refactor(tests): Complete test suite standardization

- Consolidate mid-file imports (PEP 8 compliance)
- Extend constants.py with new test values
- Update documentation (README, docstring template)
- Fix marker references
- Add initial docstrings to multiple test files

5 days agofix(ReforceXY): PBRS trade duration term should be pnl sign-aware
Jérôme Benoit [Sat, 20 Dec 2025 13:36:10 +0000 (14:36 +0100)] 
fix(ReforceXY): PBRS trade duration term should be pnl sign-aware

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
6 days agofix(qav3): do not weight the first pivot if cannot be computed
Jérôme Benoit [Fri, 19 Dec 2025 23:30:14 +0000 (00:30 +0100)] 
fix(qav3): do not weight the first pivot if cannot be computed

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
6 days agorefactor(qav3): adjust annotation line offset to stoploss
Jérôme Benoit [Fri, 19 Dec 2025 16:02:43 +0000 (17:02 +0100)] 
refactor(qav3): adjust annotation line offset to stoploss

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
7 days agorefactor(qav3): adjust take profit annotation line start date
Jérôme Benoit [Fri, 19 Dec 2025 00:45:48 +0000 (01:45 +0100)] 
refactor(qav3): adjust take profit annotation line start date

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
7 days agochore(qav3): bump versions
Jérôme Benoit [Thu, 18 Dec 2025 20:38:17 +0000 (21:38 +0100)] 
chore(qav3): bump versions

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
7 days agorefactor!(qav3): cleanup extrema selection methods namespace
Jérôme Benoit [Thu, 18 Dec 2025 20:28:46 +0000 (21:28 +0100)] 
refactor!(qav3): cleanup extrema selection methods namespace

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
8 days agodocs: refine README.md
Jérôme Benoit [Wed, 17 Dec 2025 22:29:14 +0000 (23:29 +0100)] 
docs: refine README.md
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
8 days agochore(qav3): refine configuration template
Jérôme Benoit [Wed, 17 Dec 2025 21:20:30 +0000 (22:20 +0100)] 
chore(qav3): refine configuration template

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
8 days agochore(qav3): bump versions
Jérôme Benoit [Wed, 17 Dec 2025 21:05:59 +0000 (22:05 +0100)] 
chore(qav3): bump versions

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
8 days agofeat(qav3): add volume weighted efficiency_ratio as extrema weighting source
Jérôme Benoit [Wed, 17 Dec 2025 21:03:55 +0000 (22:03 +0100)] 
feat(qav3): add volume weighted efficiency_ratio as extrema weighting source

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
8 days agofix(ReforceXY): compute exit factor properly
Jérôme Benoit [Wed, 17 Dec 2025 16:09:10 +0000 (17:09 +0100)] 
fix(ReforceXY): compute exit factor properly

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
9 days agorefactor(qav3): align variable namespace
Jérôme Benoit [Wed, 17 Dec 2025 01:19:58 +0000 (02:19 +0100)] 
refactor(qav3): align variable namespace

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
9 days agorefactor(qav3): refine take profit plot annotations
Jérôme Benoit [Wed, 17 Dec 2025 00:49:15 +0000 (01:49 +0100)] 
refactor(qav3): refine take profit plot annotations

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
9 days agofeat(qav3): draw take profit on chart
Jérôme Benoit [Wed, 17 Dec 2025 00:29:30 +0000 (01:29 +0100)] 
feat(qav3): draw take profit on chart

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
9 days agofix(qav3): log boolean protections parameters
Jérôme Benoit [Tue, 16 Dec 2025 23:21:53 +0000 (00:21 +0100)] 
fix(qav3): log boolean protections parameters

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
9 days agorefactor(qav3): log model and strategy specific configuration
Jérôme Benoit [Tue, 16 Dec 2025 21:41:22 +0000 (22:41 +0100)] 
refactor(qav3): log model and strategy specific configuration

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
9 days agorefactor(qav3): cleanup extrema weighting hybrid strategy logic
Jérôme Benoit [Tue, 16 Dec 2025 12:04:39 +0000 (13:04 +0100)] 
refactor(qav3): cleanup extrema weighting hybrid strategy logic

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
9 days agorefactor(ReforceXY): factor out reward tunable defaults
Jérôme Benoit [Tue, 16 Dec 2025 10:13:32 +0000 (11:13 +0100)] 
refactor(ReforceXY): factor out reward tunable defaults

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
10 days agorefactor(ReforceXY): factor out reward factor computations
Jérôme Benoit [Mon, 15 Dec 2025 21:08:46 +0000 (22:08 +0100)] 
refactor(ReforceXY): factor out reward factor computations

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
10 days agochore(qav3): bump strategy version to 3.3.183
Jérôme Benoit [Mon, 15 Dec 2025 18:53:53 +0000 (19:53 +0100)] 
chore(qav3): bump strategy version to 3.3.183

10 days agofix(qav3): plot extrema bars with normalized weights
Jérôme Benoit [Mon, 15 Dec 2025 18:46:10 +0000 (19:46 +0100)] 
fix(qav3): plot extrema bars with normalized weights

10 days agoperf(qav3): make extrema weights computation fully numpy-based
Jérôme Benoit [Mon, 15 Dec 2025 13:14:28 +0000 (14:14 +0100)] 
perf(qav3): make extrema weights computation fully numpy-based

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
10 days agochore(deps): lock file maintenance (#21)
renovate[bot] [Mon, 15 Dec 2025 11:29:18 +0000 (12:29 +0100)] 
chore(deps): lock file maintenance (#21)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
11 days agodocs: refine README.md formatting
Jérôme Benoit [Sun, 14 Dec 2025 16:22:43 +0000 (17:22 +0100)] 
docs: refine README.md formatting

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
11 days agorefactor(qav3): better handling of 0 weights in extrema weighting
Jérôme Benoit [Sun, 14 Dec 2025 14:09:33 +0000 (15:09 +0100)] 
refactor(qav3): better handling of 0 weights in extrema weighting

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
11 days agorefactor(qav3): align fallbacks un extrema weights handling
Jérôme Benoit [Sun, 14 Dec 2025 14:01:17 +0000 (15:01 +0100)] 
refactor(qav3): align fallbacks un extrema weights handling

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
11 days agofix(qav3): geometric_mean computation in hybrid extrema weighting
Jérôme Benoit [Sun, 14 Dec 2025 13:35:44 +0000 (14:35 +0100)] 
fix(qav3): geometric_mean computation in hybrid extrema weighting

+ nan-aware computations

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
12 days agorefactor(qav3): namespace alignment
Jérôme Benoit [Sat, 13 Dec 2025 23:14:28 +0000 (00:14 +0100)] 
refactor(qav3): namespace alignment

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
12 days agodocs(qav3): refine configuration template
Jérôme Benoit [Sat, 13 Dec 2025 21:52:29 +0000 (22:52 +0100)] 
docs(qav3): refine configuration template

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
12 days agodocs: add code comment
Jérôme Benoit [Sat, 13 Dec 2025 21:41:14 +0000 (22:41 +0100)] 
docs: add code comment

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
12 days agodocs(qav3): refine extrema weighting docs
Jérôme Benoit [Sat, 13 Dec 2025 21:26:34 +0000 (22:26 +0100)] 
docs(qav3): refine extrema weighting docs

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
12 days agochore(qav3): bump versions
Jérôme Benoit [Sat, 13 Dec 2025 21:09:33 +0000 (22:09 +0100)] 
chore(qav3): bump versions

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
12 days agofeat(qav3): add hybrid extrema weighting strategy
Jérôme Benoit [Sat, 13 Dec 2025 20:10:56 +0000 (21:10 +0100)] 
feat(qav3): add hybrid extrema weighting strategy

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
12 days agofix(qav3): handle NaN with imputation in extrema weighting computation pipeline
Jérôme Benoit [Sat, 13 Dec 2025 11:51:50 +0000 (12:51 +0100)] 
fix(qav3): handle NaN with imputation in extrema weighting computation pipeline

When normalizing extrema weights, NaN values can lead to issues in
Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
13 days agodocs: refine README.md description of extrema selection methods
Jérôme Benoit [Sat, 13 Dec 2025 02:32:59 +0000 (03:32 +0100)] 
docs: refine README.md description of extrema selection methods

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
13 days agofeat(qav3): add extrema weighting by swing efficiency ratio and speed
Jérôme Benoit [Sat, 13 Dec 2025 02:12:34 +0000 (03:12 +0100)] 
feat(qav3): add extrema weighting by swing efficiency ratio and speed

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
13 days agofeat(qav3): properly integrate volume extrema weighting, take 2
Jérôme Benoit [Sat, 13 Dec 2025 00:45:01 +0000 (01:45 +0100)] 
feat(qav3): properly integrate volume extrema weighting, take 2

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
13 days agorefactor: add pivot volumes calculation in zigzag function
Jérôme Benoit [Sat, 13 Dec 2025 00:04:21 +0000 (01:04 +0100)] 
refactor: add pivot volumes calculation in zigzag function

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
13 days agofix(qav3): ensure extrema weighting computation properly handle NaN
Jérôme Benoit [Fri, 12 Dec 2025 22:34:08 +0000 (23:34 +0100)] 
fix(qav3): ensure extrema weighting computation properly handle NaN

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2 weeks agodocs: improve tunables description
Jérôme Benoit [Thu, 11 Dec 2025 16:03:53 +0000 (17:03 +0100)] 
docs: improve tunables description

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2 weeks agochore(qav3): bump versions
Jérôme Benoit [Thu, 11 Dec 2025 15:58:18 +0000 (16:58 +0100)] 
chore(qav3): bump versions

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2 weeks agodocs: improve tunables description
Jérôme Benoit [Thu, 11 Dec 2025 15:56:18 +0000 (16:56 +0100)] 
docs: improve tunables description

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2 weeks agodocs: improve tunables description
Jérôme Benoit [Thu, 11 Dec 2025 15:52:06 +0000 (16:52 +0100)] 
docs: improve tunables description

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2 weeks agodocs: improve README.md configuration tunables description
Jérôme Benoit [Thu, 11 Dec 2025 15:40:32 +0000 (16:40 +0100)] 
docs: improve README.md configuration tunables description

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2 weeks agofeat(qav3): Add volume-weighted amplitude extrema weighting strategy
Jérôme Benoit [Thu, 11 Dec 2025 15:30:01 +0000 (16:30 +0100)] 
feat(qav3): Add volume-weighted amplitude extrema weighting strategy

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2 weeks agochore(qav3): propose a performant configuration template
Jérôme Benoit [Wed, 10 Dec 2025 16:47:52 +0000 (17:47 +0100)] 
chore(qav3): propose a performant configuration template

It's to show what can be achieved by understanding the various tunables
and their interactions.

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2 weeks agorefactor(qav3): remove unneeded intermediate variables
Jérôme Benoit [Tue, 9 Dec 2025 13:25:27 +0000 (14:25 +0100)] 
refactor(qav3): remove unneeded intermediate variables

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2 weeks agorefactor(qav3): align robust standardization namespace
Jérôme Benoit [Mon, 8 Dec 2025 23:57:11 +0000 (00:57 +0100)] 
refactor(qav3): align robust standardization namespace

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2 weeks agofeat(qav3): add MMAD standardization for extrema weighting
Jérôme Benoit [Mon, 8 Dec 2025 23:43:51 +0000 (00:43 +0100)] 
feat(qav3): add MMAD standardization for extrema weighting

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2 weeks agorefactor(qav3): namespace alignment
Jérôme Benoit [Mon, 8 Dec 2025 21:09:01 +0000 (22:09 +0100)] 
refactor(qav3): namespace alignment

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2 weeks agorefactor(qav3): rename savgol params helper
Jérôme Benoit [Mon, 8 Dec 2025 21:05:44 +0000 (22:05 +0100)] 
refactor(qav3): rename savgol params helper

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2 weeks agochore(qav3): bump QuickAdapterRegressorV3 and QuickAdapterV3 to 3.7.125 and 3.3.175...
Jérôme Benoit [Mon, 8 Dec 2025 20:54:00 +0000 (21:54 +0100)] 
chore(qav3): bump QuickAdapterRegressorV3 and QuickAdapterV3 to 3.7.125 and 3.3.175 respectively

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2 weeks agofeat(qav3): add 2 extrema smoothing methods: Savitzky–Golay and Nadaraya-Watson
Jérôme Benoit [Mon, 8 Dec 2025 20:52:33 +0000 (21:52 +0100)] 
feat(qav3): add 2 extrema smoothing methods: Savitzky–Golay and Nadaraya-Watson

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2 weeks agofix(qav3): ensure symetry at extrema smoothing
Jérôme Benoit [Mon, 8 Dec 2025 15:41:15 +0000 (16:41 +0100)] 
fix(qav3): ensure symetry at extrema smoothing

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2 weeks agoperf(qav3): sensibler defaults for reversal confirmation
Jérôme Benoit [Mon, 8 Dec 2025 13:10:06 +0000 (14:10 +0100)] 
perf(qav3): sensibler defaults for reversal confirmation

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2 weeks agodocs(README.md): fix minmax_range type in extrema_weighting config table
Jérôme Benoit [Mon, 8 Dec 2025 11:24:41 +0000 (12:24 +0100)] 
docs(README.md): fix minmax_range type in extrema_weighting config table

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2 weeks agochore(deps): lock file maintenance (#20)
renovate[bot] [Mon, 8 Dec 2025 10:40:23 +0000 (11:40 +0100)] 
chore(deps): lock file maintenance (#20)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2 weeks agorefactor(qav3): decouple extrema weighting standardization and normalization
Jérôme Benoit [Sun, 7 Dec 2025 22:19:37 +0000 (23:19 +0100)] 
refactor(qav3): decouple extrema weighting standardization and normalization

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
2 weeks agoperf(qav3): adjust default max_natr_ratio_percent to 0.05
Jérôme Benoit [Sun, 7 Dec 2025 15:32:52 +0000 (16:32 +0100)] 
perf(qav3): adjust default max_natr_ratio_percent to 0.05

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
3 weeks agofeat(qav3): add configuration section for protections
Jérôme Benoit [Mon, 1 Dec 2025 13:13:03 +0000 (14:13 +0100)] 
feat(qav3): add configuration section for protections

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
3 weeks agochore(deps): lock file maintenance (#19)
renovate[bot] [Mon, 1 Dec 2025 11:52:27 +0000 (12:52 +0100)] 
chore(deps): lock file maintenance (#19)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
3 weeks agorefactor(qav3): factor out optuna MO metrics list
Jérôme Benoit [Sun, 30 Nov 2025 16:44:19 +0000 (17:44 +0100)] 
refactor(qav3): factor out optuna MO metrics list

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
3 weeks agorefactor: propagate github token to devcontainers
Jérôme Benoit [Sat, 29 Nov 2025 23:35:50 +0000 (00:35 +0100)] 
refactor: propagate github token to devcontainers

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
3 weeks agofix: sensible defaults for gh cli devcontainer feature
Jérôme Benoit [Sat, 29 Nov 2025 23:12:00 +0000 (00:12 +0100)] 
fix: sensible defaults for gh cli devcontainer feature

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
3 weeks agochore: add gh cli feature to devcontainers
Jérôme Benoit [Sat, 29 Nov 2025 22:47:53 +0000 (23:47 +0100)] 
chore: add gh cli feature to devcontainers

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
3 weeks agofix: workaround nix feature packages installation issue
Jérôme Benoit [Sat, 29 Nov 2025 17:18:00 +0000 (18:18 +0100)] 
fix: workaround nix feature packages installation issue

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
3 weeks agofix: packages is a comma separated list
Jérôme Benoit [Sat, 29 Nov 2025 15:22:13 +0000 (16:22 +0100)] 
fix: packages is a comma separated list

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
3 weeks agoperf(qav3): refine default config
Jérôme Benoit [Fri, 28 Nov 2025 20:24:07 +0000 (21:24 +0100)] 
perf(qav3): refine default config

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agochore(devcontainers): enable attribute path is nix feature
Jérôme Benoit [Wed, 26 Nov 2025 06:37:26 +0000 (07:37 +0100)] 
chore(devcontainers): enable attribute path is nix feature

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agochore(devcontainer): handle properly symlinks in workspace
Jérôme Benoit [Tue, 25 Nov 2025 20:23:40 +0000 (21:23 +0100)] 
chore(devcontainer): handle properly symlinks in workspace

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agochore(devcontainers): optimize devcontainer configurations
Jérôme Benoit [Tue, 25 Nov 2025 19:37:26 +0000 (20:37 +0100)] 
chore(devcontainers): optimize devcontainer configurations

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agoperf: add cached properties for extrema parameters validation
Jérôme Benoit [Tue, 25 Nov 2025 18:10:52 +0000 (19:10 +0100)] 
perf: add cached properties for extrema parameters validation

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agoperf(qav3): refine protections default configuration
Jérôme Benoit [Tue, 25 Nov 2025 16:45:13 +0000 (17:45 +0100)] 
perf(qav3): refine protections default configuration

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agorefactor: rename amplitude_excess -> amplitude_threshold_ratio and update docs
Jérôme Benoit [Tue, 25 Nov 2025 13:51:11 +0000 (14:51 +0100)] 
refactor: rename amplitude_excess -> amplitude_threshold_ratio and update docs

4 weeks agochore(deps): lock file maintenance (#18)
renovate[bot] [Tue, 25 Nov 2025 10:14:31 +0000 (11:14 +0100)] 
chore(deps): lock file maintenance (#18)

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
4 weeks agofix(devcontainer): opencode usage on macOS
Jérôme Benoit [Mon, 24 Nov 2025 23:28:44 +0000 (00:28 +0100)] 
fix(devcontainer): opencode usage on macOS

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agodocs: correct default label_weights
Jérôme Benoit [Mon, 24 Nov 2025 22:30:54 +0000 (23:30 +0100)] 
docs: correct default label_weights

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agochore: add docker-in-docker support to devcontainer
Jérôme Benoit [Mon, 24 Nov 2025 22:04:04 +0000 (23:04 +0100)] 
chore: add docker-in-docker support to devcontainer

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agochore(devcontainer): move dev tools installation to container start command
Jérôme Benoit [Mon, 24 Nov 2025 21:31:47 +0000 (22:31 +0100)] 
chore(devcontainer): move dev tools installation to container start command

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agoperf(qav3): sensbile reversal confirmation defaults
Jérôme Benoit [Mon, 24 Nov 2025 17:47:09 +0000 (18:47 +0100)] 
perf(qav3): sensbile reversal confirmation defaults

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agorefactor(ReforceXY): remove unnecessary import
Jérôme Benoit [Sun, 23 Nov 2025 23:12:01 +0000 (00:12 +0100)] 
refactor(ReforceXY): remove unnecessary import

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agorefactor: improve type hints
Jérôme Benoit [Sun, 23 Nov 2025 21:59:46 +0000 (22:59 +0100)] 
refactor: improve type hints

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agochore: refine devcontainer configuration
Jérôme Benoit [Sun, 23 Nov 2025 19:52:16 +0000 (20:52 +0100)] 
chore: refine devcontainer configuration

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agorefactor(qav3): improve type hints and variable declarations
Jérôme Benoit [Sun, 23 Nov 2025 18:38:15 +0000 (19:38 +0100)] 
refactor(qav3): improve type hints and variable declarations

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agochore: add opencode vscode plugin to devcontainers
Jérôme Benoit [Sun, 23 Nov 2025 17:36:56 +0000 (18:36 +0100)] 
chore: add opencode vscode plugin to devcontainers

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agochore: update devcontainer and Dockerfile for ReforceXY and QuickAdapter
Jérôme Benoit [Sun, 23 Nov 2025 17:28:22 +0000 (18:28 +0100)] 
chore: update devcontainer and Dockerfile for ReforceXY and QuickAdapter

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agochore: refine devcontainers configuration
Jérôme Benoit [Sun, 23 Nov 2025 14:26:11 +0000 (15:26 +0100)] 
chore: refine devcontainers configuration

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agochore: add devcontainers configuration
Jérôme Benoit [Sun, 23 Nov 2025 14:05:11 +0000 (15:05 +0100)] 
chore: add devcontainers configuration

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agorefactor(reforcexy): use proper types
Jérôme Benoit [Sat, 22 Nov 2025 22:48:27 +0000 (23:48 +0100)] 
refactor(reforcexy): use proper types

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agorefactor(qav3): reuse existing implementation when possible
Jérôme Benoit [Sat, 22 Nov 2025 20:48:43 +0000 (21:48 +0100)] 
refactor(qav3): reuse existing implementation when possible

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agofix(qav3): fix prediction extrema partition method
Jérôme Benoit [Sat, 22 Nov 2025 19:39:14 +0000 (20:39 +0100)] 
fix(qav3): fix prediction extrema partition method

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>
4 weeks agodocs: refine wording
Jérôme Benoit [Sat, 22 Nov 2025 15:08:51 +0000 (16:08 +0100)] 
docs: refine wording

Signed-off-by: Jérôme Benoit <jerome.benoit@piment-noir.org>