Skip to content

M2 polish: snippet hardening + one contract note #2

Description

@aharlap

Track-as-issue items from the Milestone 2 final review (none blocking):

  • Negative CORS test: assert /admin/* responses carry no Access-Control-Allow-Origin (guards the /xapi/* middleware scope against glob-broadening regressions)
  • Test: token identity mode must NOT mint/store a proof:device id (pins a privacy-relevant guarantee that's currently implicit)
  • test:watch doesn't chain build:snippet — stale-bundle dev footgun; chain it or document it
  • embed.md: add one sentence that the snippet <script> tag must precede any inline proof.* calls (synchronous-load ordering)

Contract note (deliberate decision, recorded for M3): step/question statements store their child IRI (<activityIri>/steps/<id>, .../questions/<id>) in statements.activity_iri AND create a pseudo-activity row in activities per distinct child. The M3 dashboard must filter/namespace by the /steps/|/questions/ path segment when listing activities, and can parse child IRIs back to step/question ids for the funnel. This shape is frozen with the public snippet wire format.

🤖 Generated with Claude Code

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions