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 intoApr 28, 2026
Conversation
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>
WilcoLouwerse
commented
Apr 28, 2026
WilcoLouwerse
commented
Apr 28, 2026
WilcoLouwerse
left a comment
Contributor
Author
There was a problem hiding this comment.
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
commented
Apr 28, 2026
WilcoLouwerse
left a comment
Contributor
Author
There was a problem hiding this comment.
Re-review (Quick mode) — LGTM ✅
All 8 findings from the prior review are confirmed fixed in commit 79f821a49:
- ✅
.git-blame-ignore-revs— 7 truncated SHAs expanded to full 40-char form - ✅
.git-blame-ignore-revs— section comment updated toRetrofit Bucket 2a/2b reverse-spec pass (2026-04-28) - ✅ 87
@specannotations inlib/Event/*.php+lib/Service/Configuration/*.php— blank*line added, triple-space normalised to single-space - ℹ️
@spec openspec/changes/paths — confirmed false alarm; directory exists on branch with all ghost changes - ✅
openspec/specs/object-lifecycle/spec.mdREQ-001 — pipeline accurately describes single (SaveObject::saveObject()) and bulk (SaveObjects::saveObjects()→ per-item) paths; scenario WHEN clause corrected - ✅
openspec/coverage-report.json+coverage-report.md—scopeblock restored with updated counts (45 capabilities, 393 REQs) - ✅
UUIv4→UUIDv4fixed in live spec + archive copy - ✅
CalendarEventTransformermethod count corrected to 5 - ✅
notificatie-engine#REQ-001anchor added to task-1
No new issues introduced by the fix commit. CI is green. Ready to merge.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Full Bucket 2a and Bucket 2b retrofit pass for openregister. No logic changes — annotations and new capability specs only.
object-lifecycle(5 REQs, 252 methods) andcalendar-integration(2 REQs, 19 methods)content-versioning+ REQ-017 (file versioning via Nextcloud files_versions)tenant-lifecycle+ REQ-005openspec/archive/.git-blame-ignore-revsGhost changes archived
retrofit-tenant-lifecycle-2026-04-28--extendretrofit-content-versioning-2026-04-28--extendretrofit-object-lifecycle-2026-04-28--clusterretrofit-calendar-integration-2026-04-28--clusterretrofit-b2b-crossrefs-2026-04-28Review focus
@spectag placement is after@linkin file docblocks and after@return/@throwsin method docblocks, with a blank comment line before the tagobject-lifecycle,calendar-integration) describe observed behavior — not aspirationalopenspec/filesTest plan
@specpath matches an entry in the referencedtasks.md.git-blame-ignore-revsentries match annotation commit SHAs🤖 Generated with Claude Code