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

retrofit: Bucket 2a/2b reverse-spec + annotate openregister (16 commits / ~380 methods)#1350

Merged
WilcoLouwerse merged 17 commits into
feature/reverse-specfrom
retrofit/reverse-spec-openregister-tenant-lifecycle-2026-04-28
Apr 28, 2026
Merged

retrofit: Bucket 2a/2b reverse-spec + annotate openregister (16 commits / ~380 methods)#1350
WilcoLouwerse merged 17 commits into
feature/reverse-specfrom
retrofit/reverse-spec-openregister-tenant-lifecycle-2026-04-28

Conversation

@WilcoLouwerse

@WilcoLouwerse WilcoLouwerse commented Apr 28, 2026

Copy link
Copy Markdown
Contributor

Summary

Full Bucket 2a and Bucket 2b retrofit pass for openregister. No logic changes — annotations and new capability specs only.

  • 2 new capability specs: object-lifecycle (5 REQs, 252 methods) and calendar-integration (2 REQs, 19 methods)
  • 1 spec extension: content-versioning + REQ-017 (file versioning via Nextcloud files_versions)
  • 1 new REQ: tenant-lifecycle + REQ-005
  • ~380 methods annotated across Bucket 2a clusters and Bucket 2b cross-cap refs
  • 6 ghost changes created and archived under openspec/archive/
  • Annotation commit SHAs added to .git-blame-ignore-revs

Ghost changes archived

Change Type REQs
retrofit-tenant-lifecycle-2026-04-28 --extend REQ-005
retrofit-content-versioning-2026-04-28 --extend REQ-017
retrofit-object-lifecycle-2026-04-28 --cluster REQ-001..005
retrofit-calendar-integration-2026-04-28 --cluster REQ-001..002
retrofit-b2b-crossrefs-2026-04-28 cross-cap refs tasks 1–33
+ 4 smaller Bucket 2a clusters cross-cap refs

Review focus

  • @spec tag placement is after @link in file docblocks and after @return/@throws in method docblocks, with a blank comment line before the tag
  • New specs (object-lifecycle, calendar-integration) describe observed behavior — not aspirational
  • No PHP logic was changed; only docblock annotations and openspec/ files

Test plan

  • PHPCS passes on all touched files (verified locally — all clean)
  • Spot-check 3–5 files: confirm @spec path matches an entry in the referenced tasks.md
  • Confirm .git-blame-ignore-revs entries match annotation commit SHAs

🤖 Generated with Claude Code

WilcoLouwerse and others added 16 commits April 28, 2026 11:48
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…apability refs)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…task refs)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…onManager integration)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…ethods

Adds REQ-017 to content-versioning spec describing the FileVersioningHandler's
observed behavior: listing and restoring file versions via NC files_versions app,
with graceful degradation when the app is disabled.

Ghost change: retrofit-content-versioning-2026-04-28 (archived)
Methods annotated: FileVersioningHandler::isVersioningEnabled, listVersions,
restoreVersion, getCurrentUserId
Clusters annotated (237 PHP methods total):
- archival-destruction-workflow: 10 methods → task-5, task-6
- graphql-api: 47 methods → task-37, task-38, task-39, task-40, task-41
- edepot-transfer: 37 methods → task-20, task-21, task-23
- event-driven-architecture: 97 methods → task-26, task-27
- faceting-configuration: 48 methods → task-29, task-31, task-33, task-35

Coverage report refreshed on branch retrofit/reverse-spec-openregister-tenant-lifecycle-2026-04-28 (2026-04-28).
New capability spec: openspec/specs/object-lifecycle/spec.md
REQ-001: Object save pipeline (SaveObjects, SaveObject, CrudHandler, etc.)
REQ-002: Object validation pipeline (ValidateObject, ValidationHandler)
REQ-003: Object cache management (CacheHandler, PerformanceHandler)
REQ-004: Bulk object operations (PreparationHandler, ChunkProcessingHandler)
REQ-005: Object metadata hydration (MetadataHydrationHandler, ComputedFieldHandler)

Cross-cap refs: PermissionHandler→task-7, LinkedEntityEnricher/RelationHandler→task-6,
AuditHandler→task-8, FacetHandler→task-9, SearchQueryHandler→task-10,
ExportHandler→task-11, RevertHandler→task-12, FilePropertyHandler→task-13

Scanner misclassification: all methods were in object-interactions Bucket 2a
but implement core CRUD pipeline, not the notes/tasks/files API.

Ghost change: retrofit-object-lifecycle-2026-04-28 (archived)
New capability spec: openspec/specs/calendar-integration/spec.md
REQ-001: Register objects exposed as CalDAV calendar events (ICalendarProvider impl)
REQ-002: Object→VEVENT transformation (all-day vs datetime, template interpolation)

Files: RegisterCalendarProvider, RegisterCalendar, CalendarEventTransformer (19 methods)
Ghost change: retrofit-calendar-integration-2026-04-28 (archived)
…chived)

All Bucket 2b clusters annotated with cross-capability @SPEC tags:
- ActivityService, Listeners, EventListeners → event-driven-architecture tasks
- ObjectReferenceProvider → deep-link-registry#REQ-002
- N8nAdapter, WorkflowResult, ActionScheduleJob → workflow-engine-abstraction tasks
- BulkLegalHoldJob, DestructionCheckJob → archival-destruction-workflow tasks
- BlobMigrationJob → data-import-export#REQ-001
- SolrNightlyWarmupJob, ObjectsProvider, SolrCommands → zoeken-filteren#REQ-001
- GraphQLSubscriptionListener → graphql-api#REQ-007
- TransferCheckJob → edepot-transfer#REQ-001
- WebhookRetryJob → webhook-payload-mapping#REQ-001
- SyncConfigurationsJob → faceting-configuration#REQ-002
- LogCleanUpTask → retention-management#REQ-009
- OrganisationController → tenant-lifecycle#REQ-001
- TenantQuotaException, LanguageMiddleware → tenant-quotas#REQ-001
- ConfigurationCheckJob → notificatie-engine
- ActionListener, FileChangeListener → event-driven-architecture
- FileExtractionController, ObjectTextExtractionJob → object-lifecycle
- Exception, AppInfo, Sections, Settings → object-lifecycle
- AuthenticationService → rbac-scopes#REQ-001
- Twig, ContactsMenuProvider → object-lifecycle
- SchemaTool, RegisterTool, ToolInterface → object-lifecycle (LLM tool layer)

Ghost change: retrofit-b2b-crossrefs-2026-04-28 (archived)
Completes the bucket-2b-cross-ref ghost change annotation pass.
Methods in AppInfo, BackgroundJob, Command, Contacts, Controller,
Exception, Listener, Repair, Sections, Service, Settings, and Twig
namespaces annotated with @SPEC tags pointing to existing spec tasks.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
CacheWarmupJob + NameCacheWarmupJob → object-lifecycle#REQ-003 (task-30)
SolrWarmupJob → zoeken-filteren#REQ-001 (task-31)
ActionRetryJob + ExecutionHistoryCleanupJob → workflow-engine-abstraction#REQ-010 (task-32)
TransferExecutionJob → edepot-transfer#REQ-001 (task-33)

Extends retrofit-b2b-crossrefs-2026-04-28 with 4 new tasks.
PHPCS clean on all 6 files.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Comment thread .git-blame-ignore-revs Outdated
Comment thread .git-blame-ignore-revs Outdated
Comment thread lib/Event/ActionCreatedEvent.php Outdated
Comment thread lib/Activity/Filter.php
Comment thread openspec/specs/object-lifecycle/spec.md
Comment thread openspec/coverage-report.md
Comment thread openspec/specs/object-lifecycle/spec.md Outdated
Comment thread openspec/archive/retrofit-notificatie-engine-2026-04-28/tasks.md Outdated

@WilcoLouwerse WilcoLouwerse left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

1 blocker requires a fix before merge: seven of eight new .git-blame-ignore-revs SHAs are truncated to 9 characters and will be silently ignored by git. No PHP logic was changed — annotation placement, spec accuracy, and coverage report concerns noted in the inline comments.

- .git-blame-ignore-revs: expand 7 truncated SHAs to full 40-char form;
  truncated SHAs are silently ignored by git blame --ignore-revs-file.
  Update section comment to reflect full Bucket 2a/2b pass scope.

- lib/Event/*.php + lib/Service/Configuration/*.php: fix 87 @SPEC
  annotations that were missing a blank comment line before the tag and
  used triple-space (   ) instead of single-space. All now follow the
  established convention used in the other 1,075+ annotations.

- openspec/specs/object-lifecycle/spec.md (live + archive copy):
  - REQ-001: rewrite pipeline description to accurately reflect two
    distinct paths (single: SaveObject::saveObject(); bulk:
    SaveObjects::saveObjects() → SaveObject per item). Update scenario
    WHEN clause from the non-existent CrudHandler::save() to the real
    SaveObject::saveObject() entry point.
  - REQ-005 scenario: fix UUIv4 typo → UUIDv4.

- openspec/archive/retrofit-calendar-integration-2026-04-28/proposal.md:
  correct CalendarEventTransformer method count from 7 to 5 (matches the
  5 annotated methods listed in the parenthetical).

- openspec/archive/retrofit-notificatie-engine-2026-04-28/tasks.md:
  add missing #REQ-001 anchor to task-1 for consistency with all other
  tasks.md files in the PR.

- openspec/coverage-report.json + coverage-report.md:
  restore scope block / ## Scope table removed during report regeneration.
  Updated counts: spec_capabilities=45, spec_reqs_total=393 (reflecting
  new object-lifecycle, calendar-integration, content-versioning REQ-017,
  and tenant-lifecycle REQ-005). PHP/frontend counts unchanged.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

@WilcoLouwerse WilcoLouwerse left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Re-review (Quick mode) — LGTM ✅

All 8 findings from the prior review are confirmed fixed in commit 79f821a49:

  1. .git-blame-ignore-revs — 7 truncated SHAs expanded to full 40-char form
  2. .git-blame-ignore-revs — section comment updated to Retrofit Bucket 2a/2b reverse-spec pass (2026-04-28)
  3. ✅ 87 @spec annotations in lib/Event/*.php + lib/Service/Configuration/*.php — blank * line added, triple-space normalised to single-space
  4. ℹ️ @spec openspec/changes/ paths — confirmed false alarm; directory exists on branch with all ghost changes
  5. openspec/specs/object-lifecycle/spec.md REQ-001 — pipeline accurately describes single (SaveObject::saveObject()) and bulk (SaveObjects::saveObjects() → per-item) paths; scenario WHEN clause corrected
  6. openspec/coverage-report.json + coverage-report.mdscope block restored with updated counts (45 capabilities, 393 REQs)
  7. UUIv4UUIDv4 fixed in live spec + archive copy
  8. CalendarEventTransformer method count corrected to 5
  9. notificatie-engine#REQ-001 anchor added to task-1

No new issues introduced by the fix commit. CI is green. Ready to merge.

@WilcoLouwerse WilcoLouwerse merged commit a64c9cb into feature/reverse-spec Apr 28, 2026
1 check passed
@WilcoLouwerse WilcoLouwerse deleted the retrofit/reverse-spec-openregister-tenant-lifecycle-2026-04-28 branch April 28, 2026 18:12
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant