feat(manifest): optional set-entry visibility flag (Closes #83)#84
Merged
Conversation
Content repos carry technical reference / conformance fixtures that must stay on disk for engine validation but should not surface to learners in a consumer app (the canonical case: the graded-quiz demo that is the deliberate E-EXT-UNSUPPORTED negative case in conformance-real.mjs). The strict set-entry schema (additionalProperties: false) rejected any app-side metadata for this, forcing a hardcoded consumer-side blocklist. Add an optional visibility: "visible" | "hidden" (default "visible") to ContentSet in content-manifest.schema.json. It is a consumer-display hint only: the engine and the conformance harness still validate hidden sets and never exclude them; only consumer apps filter on it. Absent means visible, so every existing manifest keeps validating. The flag flows through the canonical projection: asContentSetEntry exposes it on ContentSetEntry.visibility (new SetVisibility type), normalizing any out-of-enum value back to "visible". Additive and backward compatible, so x-schema-version stays 1.8; the frozen schema baseline is refreshed. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EK4jFLAbQN1RkEbAcVHBPz
11 tasks
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 join this conversation on GitHub.
Already have an account?
Sign in to comment
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
Adds an optional
visibility: "visible" | "hidden"flag (default"visible") to the content-manifest set entry, so content repos can mark technical reference / conformance fixtures as not-for-learners without an app-side blocklist.The motivating case is the graded-quiz demo in
adaptive-learner-content-test, the deliberateE-EXT-UNSUPPORTEDnegative case inscripts/conformance-real.mjs: it must stay on disk for conformance but should not surface to learners. The strict set-entry schema (additionalProperties: false) previously rejected any such metadata, forcing the interim hardcoded blocklist (frontend/src/lib/content/repos/hidden-sets.ts) in the consumer app - the wrong layer for repo-owned metadata.Critical semantic preserved:
visibilityis a consumer-display hint only. The engine andconformance-real.mjsstill fully validate hidden sets and never exclude them from validation or conformance; only consumer apps filter on it. Absent means visible, so every existing manifest keeps validating unchanged.What changed
schema/content-manifest.schema.json: optionalvisibilityenum onContentSet, default"visible",additionalProperties: falseretained.asContentSetEntryexposes it onContentSetEntry.visibility(newSetVisibilitytype), normalizing any out-of-enum value defensively back to"visible"(fail-safe: an unknown value stays visible rather than silently hiding content).docs/concepts.md; CHANGELOG entry.Design decisions (left open by the issue)
visibilityenum over a booleandev_only- more expressive and forward-compatible.x-schema-versionstays1.8- additive optional field, backward compatible, matching the field-level additive precedent in the lesson schema. The frozen schema baseline is refreshed in the same commit.0.13.3→0.14.0(minor) - new public API surface.Out of scope (downstream chain)
The downstream steps live in other repos and are not part of this engine change: setting the flag on the graded-quiz set in
adaptive-learner-content-test, and reading it / deletinghidden-sets.tsinadaptive-learner. This engine change unblocksadaptive-learner#1707.Closes #83
Checklist
make release-checkis green (lint + typecheck + test + build). 509 tests pass.feat:), one commit per logical change.schema/*.jsonchange is deliberate: byte baseline refreshed in the same commit, changelog entry added. No generated lesson types were affected (the manifest schema has no generated TS mirror).🤖 Generated with Claude Code
https://claude.ai/code/session_01EK4jFLAbQN1RkEbAcVHBPz
Generated by Claude Code