Skip to content

docs(fep): QuantPub rev 8 — camelCase payload; FitPub discussion draft (#905) - #1046

Draft
fiddur wants to merge 1 commit into
developfrom
905-fep-rev8-camelcase-fitpub-discussion
Draft

docs(fep): QuantPub rev 8 — camelCase payload; FitPub discussion draft (#905)#1046
fiddur wants to merge 1 commit into
developfrom
905-fep-rev8-camelcase-fitpub-discussion

Conversation

@fiddur

@fiddur fiddur commented Aug 21, 2026

Copy link
Copy Markdown
Owner

Discussion base for fitpub/fitpub#455 — deliberately kept as Draft. Comment here or in #455.

The substantive FitPub alignment already merged in #1045 (rev 7): dual-typing relaxed to RECOMMENDED, the coexistence/incremental-adoption path (now §10), signed GETs as an optional followers-only grant, the route field documented, expanded FitPub prior-art entry.

This draft (rev 8)

  • Payload casing → lowerCamelCase everywhere (startTime, apiBase, heartRateAvg, …), matching AS2 and FitPub style. Aurboda federation has essentially no external implementations yet, so there is no compat burden on our side; Aurboda's implementation catches up once naming settles here.
  • Deferred polish from QuantPub extension polish (deferred review nits from #1034) #1037: route resolution floor (RECOMMENDED ≤500 points, mirroring §6's bucket floor), §8.5 rewording, §7.1 promoted to top-level §10.

QuantPub vs FitPub format (read from FitPub source, 2026-08-21)

Same architecture: plain Note + AS2 startTime/endTime + same-host pointer to an out-of-band detail payload (fitpub:{detailUri}quant:structuredUrl), SSRF-guarded best-effort enrichment.

Aspect FitPub QuantPub
Detail payload Internal API DTO (/api/activities/{id}) Vendor-neutral contract: {key, value, unit} metrics, kind discriminator
Detection fitpub property presence + NodeInfo Object-id convention + /.well-known/quantpub
Time series None (scalars + track geometry) Bucketed series, per-metric per-post opt-in
Followers-only auth Signed GET Capability tokens (baseline) + signed GET (optional grant, §9)
Non-public response 403 404 (unshared ≡ nonexistent)
Typing Single "Note"; inbound casts type to String Dual-typed RECOMMENDED, single-typed allowed

Backwards compatibility for existing FitPub installations

Adoption is fully additive (§10) — no forced simultaneous upgrades:

  1. /.well-known/quantpub + the §5/§6 endpoints are new routes; /api/activities/{id} keeps serving unchanged.
  2. quant:* + quant:structuredUrl ride alongside fitpub.detailUri on the same Note; old peers ignore unknown properties and see the object they saw before.
  3. Dual-typing is optional: start single-typed (old FitPub inbound casts type to String, so an array would break un-upgraded peers), add the second type once the install base tolerates arrays.
  4. No object-id layout change needed — quant:structuredUrl replaces the id convention.

Independent of QuantPub: array-valued type is well-formed AS2 that FitPub's inbound handler should tolerate — Aurboda's dual-typed posts hit that cast today.

🤖 Generated with Claude Code

https://claude.ai/code/session_01CwoP1SqJhHgHiEEoEQtUjT

…sion draft) (#905)

- Payload fields and metric keys snake_case → lowerCamelCase, one casing
  across the JSON-LD and payload layers (matches AS2 and FitPub style;
  no Aurboda-compat burden yet — implementation catch-up follows review)
- Deferred #1037 rev-8 polish: §8.5 parenthetical reworded, route
  resolution floor (RECOMMENDED ≤500 points), §7.1 promoted to §10,
  "despite §1" clause dropped, fep/README privacy blurb
- Implementations: honest note that Aurboda still serves the rev-7
  snake_case payload until naming settles

Kept as Draft: discussion base for fitpub/fitpub#455.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CwoP1SqJhHgHiEEoEQtUjT
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant