Observed since 21 Oct, 08:56 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
@0xhoneyjar/quests-protocol
Sealed wire-format schemas for quest engagement — substrate-graded step submission + verdict (instance-1 · cycle 2026-05-03). Future shapes: quest defs, completion criteria, badges, raffles, completion events.
Wire-format contracts for quest engagement. Bridges every freeside-quests consumer (worlds, ruggy, dashboards, future MCP wrappers) to a single coherent vocabulary.
Contract version: 1.0.0 · authority: Effect Schema · sealed.
Cycle 2026-05-03 substrate-integration (instance-1) lands the substrate-step submission/verdict pair — the over-the-wire envelope for substrate-graded activity steps in cubquests-interface.
| export | purpose |
|---|---|
SubstrateStepSubmission | Gateway → Kafka → construct. Discriminated payload (essay/url/structured), trace correlation, lowercased EVM wallet, contract-version stamping. |
SubstrateStepVerdict | Construct → Kafka → resolution listener. Status (APPROVED / REJECTED / NEEDS_HUMAN), confidence on [0,1], human-readable reasoning, optional per-construct dimensions. |
SubstrateStepPayload | Discriminated union of supported submission shapes. Additive minor bumps. |
VerdictStatus | Literal union — terminal states + human-routing. |
SUBSTRATE_STEP_CONTRACT_VERSION | "1.0.0" — semver string for wire-format compatibility checks. |
Three boundaries validate against these schemas:
freeside-quests/apps/api gateway — validates inbound submission, wraps in Hounfour CompletionRequest, publishes to Kafka.0xHoneyJar/construct-lore-essay-grader) — validates narrower per-construct input; emits verdict back into the result topic.freeside-quests/apps/worker resolution listener — validates inbound verdict before any DB update, badge issuance, or Discord ping.Substrate-graded steps are a primitive of the substrate-construct convention. See ~/vault/wiki/concepts/substrate-mental-model-for-product-builders.md — the operator authors lore + grading instructions; the construct enforces them. The protocol package owns the seam.
Source: world-sprawl/cubquests/ + world-sprawl/cubquests-dashboard/. Per ../../docs/EXTRACTION-MAP.md. Not yet shipped:
| file | purpose |
|---|---|
quest.schema.ts | Quest definition — title, description, completion criteria, rewards, partner attribution, dates |
completion-criteria.schema.ts | Typed completion criteria (held NFT count, trait match, social action, onchain action, partner-specific) |
badge.schema.ts | Badge definition + issuance criteria + visual asset references |
raffle.schema.ts | Raffle entry + draw + winner schemas |
event.schema.ts | Quest-completion NATS event shape (quests.completion.{world}.{quest_id}). NEW. |
webhook-payload.schema.ts | HMAC-signed webhook payload format. NEW. |
types.ts | Branded TS types — QuestId, BadgeId, CompletionEventId, PartnerSlug |
Same as freeside-worlds/packages/protocol/VERSIONING.md — imported verbatim from loa-constructs/.claude/schemas/VERSIONING.md. Enum-locked, additive-only minors. Major bumps require new file + migration plan + stable $id.
freeside-quests/packages/engine — substrate-step dispatch validates against these schemasfreeside-quests/packages/ports/ — type ports off these schemas (post-extraction)freeside-quests/packages/adapters/quest-engine-client.ts — validates over wire (post-extraction)freeside-quests/packages/mcp-tools/ — agent-callable surface (post-extraction)world-sprawl/cubquests-dashboard/ — impl validates inputs/outputs against these (post-extraction)0xHoneyJar/freeside-ruggy — consumes event schemas + completion fan-out (post-extraction)freeside-worlds — world manifests reference compose_with: freeside-questsDownload counts and popularity will appear here as the collector receives them.
| Package / target | Requirement | Relationship |
|---|---|---|
effectEnvironment{
"local_name": "effect",
"alias": false,
"peer_metadata": null
} | ^3.10.0 | development |
typescriptEnvironment{
"local_name": "typescript",
"alias": false,
"peer_metadata": null
} | ^5.7.0 | development |
effectEnvironment{
"local_name": "effect",
"alias": false,
"peer_metadata": null
} | ^3.10.0 | peer |
Source distribution
{
"shasum": "18d91caf21e4305de9a7a123b6b7b8bffc547b31",
"tarball": "https://registry.npmjs.org/@0xhoneyjar/quests-protocol/-/quests-protocol-0.1.0.tgz",
"fileCount": 42,
"integrity": "sha512-TBNHc5yen+evN0YiywPtglXKmkMrFk9r1Qwm19oNsd91dLS4gSQMYz2XSjgJejEvttng6PkLTA2jlApCxQBc/A==",
"signatures": [
{
"sig": "MEUCIFEceQxvswUPxu1JBRro4StATY2dBVlG62yrqGKHWCh0AiEAqmXnlyofItueob0Bj3C9quLn4tqeFxHwHzfFKyHojec=",
"keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
}
],
"unpackedSize": 120988
}Shared repository data · GitHub
Observed since 21 Oct, 08:56 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package_version:7cf4efcdd8bbba10b4374adaeca1c88f15c002edd423a564c80c76cfe4a9c48e