Skip to content

[OpenSpec] gate-61-deferral #1237

Description

@github-actions

⚠️ OpenSpec-managed issue — this content is automatically synced
from the openspec/ directory. Manual edits will be overwritten on next sync.

Artifacts

Summary

LessonProgressHandler and XapiCompletionHandler read lessons and enrolments, and write a LessonCompletion or run the enrolment's complete transition, inside the save of the xAPI statement that fired them. Hydra gate 61 (ADR-078: post-*ed work is async by default) flags both: an unbounded findAll() on the write path, and a write inside another object's write. As #1208 did for the competency roll-up, both handlers now only check the statement is a completed or passed xAPI statement in the learniq register and queue it through OpenRegister's ListenerDeferralService; XapiStatementFollowUpJob runs the work as the learner who sent the statement.

Specs

Tasks

  • Tests written first and red
  • Implement
  • openspec validate gate-61-deferral passes
  • composer check:strict, npm run lint, hydra gates (gate 61 PASS), each with its exit code in the PR body

Synced from openspec/changes/gate-61-deferral by OpenSpec workflow
App: learniq

Activity

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions