Skip to content
This repository was archived by the owner on May 29, 2026. It is now read-only.

retrofit: legacy-widget-bridge capability (4 REQs / 5 methods)#23

Merged
rubenvdlinde merged 3 commits into
developmentfrom
retrofit/reverse-spec-mydash-legacy-widget-bridge-2026-04-24
Apr 24, 2026
Merged

retrofit: legacy-widget-bridge capability (4 REQs / 5 methods)#23
rubenvdlinde merged 3 commits into
developmentfrom
retrofit/reverse-spec-mydash-legacy-widget-bridge-2026-04-24

Conversation

@rubenvdlinde

Copy link
Copy Markdown
Contributor

Summary

Adds a new legacy-widget-bridge capability describing the observed behaviour of src/services/widgetBridge.js — the client-side compatibility layer that captures legacy Nextcloud widget callbacks (window.OCA.Dashboard.register) and mounts them into the MyDash grid.

4 REQs cover 5 public methods across one file. Code already existed — this PR is documentation of observed behaviour, not new implementation.

What this PR does

  • openspec/specs/legacy-widget-bridge/spec.md — new capability spec with retrofit: true frontmatter (status: implemented)
  • openspec/changes/archive/2026-04-24-retrofit-legacy-widget-bridge/ — archived change (proposal + tasks + design + original delta)
  • src/services/widgetBridge.js@spec tags on file header + 5 public methods, pointing at the archived change's tasks.md (file header tag-1..4, per-method tag-N)
  • openspec/coverage-report.{json,md} — the scan that produced the retrofit plan

Produced as an end-to-end test of the opsx-reverse-spec skill. Learnings from the run already landed in hydra#176 (merged) + hydra#181 (open).

REQs

REQ Title Methods
REQ-LWB-001 Intercept legacy widget registration at bootstrap interceptRegistration
REQ-LWB-002 Mount a captured legacy widget into a DOM container mountWidget
REQ-LWB-003 Mount a captured legacy status widget mountStatusWidget
REQ-LWB-004 Query widget-bridge registration state hasWidgetCallback + getRegisteredWidgetIds

What this PR does NOT do

  • No code behaviour changes — only annotations and the new spec
  • Does not silently fix observed quirks — REQ-LWB-003 Notes calls out the warn-vs-silent asymmetry between mountWidget and mountStatusWidget explicitly (observed, not aspirational)
  • Does not annotate the other 61 Bucket 1 methods — that's a separate /opsx-annotate pass against the existing 9 capability specs

Follow-ups planned (post-merge)

  1. python3 concurrentie-analyse/scripts/sync_spec_content.py mydash — Specter sync picks up retrofit: true and flags the row as part of the retrofit cohort
  2. Create a Hydra ready-to-build issue on this repo pointing at the new capability spec — Hydra's builder re-runs the spec and ideally produces zero diff; any diff is a learning signal (e.g. missing repo-specific ADRs the reverse-spec skill didn't create)

Review focus

  • REQ language matches observed behaviour (not aspirational)
  • Scenarios are testable (GIVEN/WHEN/THEN, input/output concrete)
  • REQ-LWB-003's warn-vs-silent Note is the right way to surface the asymmetry (not silently unify)

Test plan

  • ls openspec/specs/legacy-widget-bridge/spec.md — new capability present
  • grep '@spec openspec' src/services/widgetBridge.js | wc -l → 9 (4 file header + 5 method)
  • Manual review of the 4 REQs against the actual widgetBridge.js code

- New capability: legacy-widget-bridge (4 REQs)
- Annotated 5 public methods + file header in src/services/widgetBridge.js
- Ghost change: retrofit-legacy-widget-bridge-2026-04-24

Manual drive of opsx-reverse-spec (Wilco's feature/skill-improvement branch)
as an end-to-end test of the skill on MyDash.
Merges specs/legacy-widget-bridge/spec.md with retrofit: true into
openspec/specs/, moves change dir to openspec/changes/archive/,
updates widgetBridge.js @SPEC annotations to the archived path.

No code changes on purpose — retrofit describes existing behaviour;
the archive flip is pure bookkeeping so sync_spec_content.py picks
up the new capability as part of the retrofit cohort and Hydra can
re-run the spec against the code for validation (expected no diff).
@rubenvdlinde rubenvdlinde added the openspec OpenSpec-driven change label Apr 24, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Quality Report — ConductionNL/mydash @ f23cd2a

Check PHP Vue Security License Tests
lint
phpcs
phpmd
psalm
phpstan
phpmetrics
eslint
stylelint
composer ✅ 100/100
npm ✅ 342/342
PHPUnit ⏭️
Newman ⏭️
Playwright ⏭️

Quality workflow — 2026-04-24 09:27 UTC

Download the full PDF report from the workflow artifacts.

@rubenvdlinde rubenvdlinde merged commit b26f223 into development Apr 24, 2026
19 of 23 checks passed
@rubenvdlinde rubenvdlinde deleted the retrofit/reverse-spec-mydash-legacy-widget-bridge-2026-04-24 branch April 24, 2026 10:23
@rubenvdlinde rubenvdlinde restored the retrofit/reverse-spec-mydash-legacy-widget-bridge-2026-04-24 branch April 27, 2026 20:29
@rubenvdlinde rubenvdlinde deleted the retrofit/reverse-spec-mydash-legacy-widget-bridge-2026-04-24 branch May 1, 2026 12:17
rubenvdlinde added a commit that referenced this pull request May 3, 2026
…-legacy-widget-bridge-2026-04-24

retrofit: legacy-widget-bridge capability (4 REQs / 5 methods)
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

openspec OpenSpec-driven change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant