Skip to content

feat: build open OpenSpec changes (shillinq, part 2) - #1958

Open
rubenvdlinde wants to merge 5 commits into
developmentfrom
build/openspecs-2
Open

rubenvdlinde wants to merge 5 commits into
developmentfrom
build/openspecs-2

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

Part 2 of the shillinq OpenSpec build (decisions 121-124), cut from development after part 1 (#1954) landed. Builds Ruben's answers to Q-shillinq-1 and Q-shillinq-2 (decision 129). Checkpointed after two changes because Q2 touches the register (decision 134).

Built

budget-scenarios, task group 8 (Q-shillinq-1): scenario selector on the budget grid

  • GET /api/budget-grid takes an optional scenarioId. The year's default-budget lines plus the scenario's modifiers go through the existing BudgetScenarioEvaluator (new BudgetGridScenarioOverlay), so every budget figure in the grid (rows, computed rows, TOTAAL) shows the scenario. Actuals stay the same. Nothing is written. A scenario outside the administration answers 404, and a malformed id answers 400.
  • BudgetGrid.vue: a labelled "Scenario" select ("Base budget" plus the administration's scenarios) and a "Scenario: X" label.
  • Spec: added REQ-BSC-011, and narrowed the REQ-BSC-010 non-goal, which used to exclude the grid selector.
  • Evidence: red scen-grid-red.txt (3 failures) and scen-js-red.txt (gridRequestParams missing); green: BudgetGridControllerTest 12 OK, vitest 3 OK.
  • Owed: the Playwright test is written (budget-scenarios::grid-scenario-selector) but has not run.

leges-at-intake 1.2 (Q-shillinq-2): task field column on the fee schedule page

  • Account.taskField is optional, with pattern 0.61 / 8.3. It lives in a new fragment, public-sector-account-task-field.json, which moves Account to 0.4.0.
  • FeeSchedule.revenueTaskField (FeeSchedule 0.3.0) is copied from the revenue account's task field whenever a schedule is saved (FeeScheduleValidationListener). It is null when the account has none. The column shows on the Fee schedules page.
  • The IV3 generator already read Account.taskField. It is now pinned by Iv3ReportGeneratorTaskFieldTest.
  • Spec: added REQ-SOPR-011. info.xml moved and the register lock was recorded.
  • Evidence: red taskfield-red.txt (2 failures: no column value, stale value kept); green: listener and IV3 tests 9 OK, plus AppInfo, FeeScheduleService and BudgetGrid tests 53 OK. The lookup lives in the new RevenueTaskFieldLookup, because adding it to FeeScheduleService pushed that class over phpmd's complexity limit of 80.

Also: BudgetGridReader::loadGrid() now names budgetLinesByFiscalYear in its return shape. It already returned that key; phpstan flagged the missing name once the controller read it.

Not built yet (queue for part 3)

purchasing-approval-delegation (its task 4.1 is now question Q-shillinq-4: the openregister issue text goes to Ruben first), public-sector-council-and-auditor-statements, receivables-sepa-direct-debit, sales-quote-and-order-to-invoice, public-sector-grant-accountability. tax-vat-return-from-books is skipped because open PRs #1899 and #1900 build it.

No board check: shillinq has no boards (decision 75).

Checks (head of this branch)

  • composer check:strict: lint 0, psalm 0, phpstan 0, PHPUnit 5875 OK (1 skipped). phpcs and phpmd crashed in that run on a temp-dir setting of mine, then ran separately with exit 0 (build-round/cp2-phpcs.log, cp2-phpmd.log).
  • npm run lint 0; format 0 (after a prettier fix); check:fragment-required, job-registration, manifest, manifest-budget, manifest-shell, markers, nav-reachability, registers, seeds, schema-l10n, l10n-js, test:l10n, l10n-parity, l10n-dutch-tokens all 0; vitest 445 OK.
  • Hydra gates (CI shape): 87 of 87 applicable gates ran. Four fail locally: gate-22 and gate-53 (setup step) and gate-104 and gate-107 (Reports section). These are the same four inherited findings as on feat: build open OpenSpec changes (shillinq, part 1) #1954, where they pass in CI.

Still owed (live instance)

  • Budget grid: run Playwright budget-scenarios::grid-scenario-selector. Create scenario "Krimp" with a LEDGER_AMOUNT_DELTA of -10,000 on Omzet in January, pick it on /begroting/grid, and check that Omzet's January budget reads 40,000, its actual is unchanged, and the label reads "Scenario: Krimp".
  • Fee schedules: after occ upgrade (version 0.5.7-unstable.20261009230000), give account 8300 the task field 8.3, save a fee schedule with revenue account 8300, and check that its Task field column reads 8.3.

… in the budget column

Q-shillinq-1 (answered 9 Oct): the selector swaps the budget column to the
scenario (base plus modifiers), read-only, with a 'Scenario: X' label.
Completes the wip commit 7923bd5 (controller, tests, spec REQ-BSC-011)
with the overlay service and the grid page. Red: build-round/scen-grid-red.txt,
scen-js-red.txt; green: scen-grid-green.txt, scen-js-green.txt.
…e page

Q-shillinq-2 (answered 9 Oct): Account gets an optional taskField; a saved
fee schedule carries its revenue account's task field (revenueTaskField),
shown as a column on Fee schedules. The IV3 generator's read of the same
field is pinned by a test. Account 0.4.0, FeeSchedule 0.3.0, info.xml
0.5.7-unstable.20261009230000 + lock. Also: BudgetGridReader return shape
names budgetLinesByFiscalYear (phpstan on the scenario overlay).
Red build-round/taskfield-red.txt, green taskfield-green*.txt.
@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/shillinq @ db870fa

Check PHP Vue Security License Tests
lint ✅
phpcs ✅
phpmd ✅
psalm ✅
phpstan ✅
phpmetrics ✅
eslint ✅
stylelint ✅
build ✅
check-manifest ✅
check-manifest-shell ✅
format ✅
check-l10n-js ✅
check-schema-l10n ✅
check-manifest-budget ✅
check-markers ✅
check-registers ✅
check-seeds ✅
check-fragment-required ✅
check-nav-reachability ✅
check-job-registration ✅
test-l10n ✅
composer ✅ ✅ 109/109
npm ✅ ✅ 641/641
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit ❌
Newman ❌
Playwright ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it locally with npx playwright test, or from the Actions tab on a branch with no open pull request into development.
Hydra gates ❌

Quality workflow — 2026-10-09 21:18 UTC

Download the full PDF report from the workflow artifacts.

@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/shillinq @ db870fa

Check PHP Vue Security License Tests
lint ✅
phpcs ✅
phpmd ✅
psalm ✅
phpstan ✅
phpmetrics ✅
eslint ✅
stylelint ✅
build ✅
check-manifest ✅
check-manifest-shell ✅
format ✅
check-l10n-js ✅
check-schema-l10n ✅
check-manifest-budget ✅
check-markers ✅
check-registers ✅
check-seeds ✅
check-fragment-required ✅
check-nav-reachability ✅
check-job-registration ✅
test-l10n ✅
composer ✅ ✅ 109/109
npm ✅ ✅ 641/641
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit ❌
Newman ❌
Playwright ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it locally with npx playwright test, or from the Actions tab on a branch with no open pull request into development.
Hydra gates ❌

Quality workflow — 2026-10-09 21:50 UTC

Download the full PDF report from the workflow artifacts.

@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/shillinq @ db870fa

Check PHP Vue Security License Tests
lint ✅
phpcs ✅
phpmd ✅
psalm ✅
phpstan ✅
phpmetrics ✅
eslint ✅
stylelint ✅
build ✅
check-manifest ✅
check-manifest-shell ✅
format ✅
check-l10n-js ✅
check-schema-l10n ✅
check-manifest-budget ✅
check-markers ✅
check-registers ✅
check-seeds ✅
check-fragment-required ✅
check-nav-reachability ✅
check-job-registration ✅
test-l10n ✅
composer ✅ ✅ 109/109
npm ✅ ✅ 641/641
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit ❌ 5875/5875 (no test failed, the job failed for another reason — see its log)
Newman ✅ 69/69
Playwright ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it locally with npx playwright test, or from the Actions tab on a branch with no open pull request into development.
Hydra gates ❌

Quality workflow — 2026-10-10 08:26 UTC

Download the full PDF report from the workflow artifacts.

@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/shillinq @ 468d45f

Check PHP Vue Security License Tests
lint ✅
phpcs ✅
phpmd ✅
psalm ✅
phpstan ✅
phpmetrics ✅
eslint ✅
stylelint ✅
build ✅
check-manifest ✅
check-manifest-shell ✅
format ✅
check-l10n-js ✅
check-schema-l10n ✅
check-manifest-budget ✅
check-markers ✅
check-registers ✅
check-seeds ✅
check-fragment-required ✅
check-nav-reachability ✅
check-job-registration ✅
test-l10n ✅
composer ✅ ✅ 109/109
npm ✅ ✅ 641/641
app:check-code ⏭️
info.xml ✅
REUSE ❌
lockfile sync ✅
PHPUnit ✅ 5882/5882
Newman ✅ 69/69
Playwright ⏭️ deferred: E2E runs locally and on the promotion path only. This pull request targets development, so the suite is asked once per promotion into beta and main rather than once per push per open pull request. Run it locally with npx playwright test, or from the Actions tab on a branch with no open pull request into development.
Hydra gates ❌

Quality workflow — 2026-10-10 09:36 UTC

Download the full PDF report from the workflow artifacts.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant