Cardona CT LabAI Tooling · Design & Accessibility
CourseForge · Governed Classification Marking

ForgeMark

Sensitivity marking that is derived once and rendered identically everywhere a course is published


Try it

The interactive marking demonstrator lets you set a policy and watch the banner, portion tags, authority block, and the five publish gates update live. It mirrors the shipped marking logic and exposes nothing from the private editor.

Executive Summary

ForgeMark is the classification-marking layer inside CourseForge. Training content built for defense and government audiences routinely carries portions at different sensitivity levels, and each portion has to be marked to policy: a banner at the highest level present, a portion mark on every image and paragraph, and a derivative-classification statement that names the authority. Doing this by hand is slow and easy to get wrong, and the marking has to survive every way a course is published.

ForgeMark treats a course's marking policy as structured data, not manual annotation. An author sets the policy once; ForgeMark derives the banner, the portion tags, and the authority block from it, and renders them identically across the browser authoring preview, the SCORM 1.2 and SCORM 2004 packages, and the offline web bundle. Publishing is gated: a course whose markings fail contrast, exceed the allowed level, or carry an incomplete authority block does not ship.

Standards It Follows

The marking model follows the federal rules for portion marking and derivative classification, rather than an ad hoc scheme:

Evidence note

The contrast ratios below were computed from the shipped color tokens. Automated contrast math is necessary but not sufficient for a Section 508 determination; formal conformance is a human review. ForgeMark enforces the measurable floor and leaves the determination to a reviewer.

The Classification Levels

The default US government scheme ships six levels. Each swatch below is rendered in the exact token ForgeMark uses, and the ratio column is the measured contrast of that swatch's text on its background.

Default us-gov-classification scheme
LevelAbbrBackgroundContrast
UNCLASSIFIEDU#007a335.48:1
CUICUI#502b8510.37:1
CONFIDENTIALC#0033a010.60:1
SECRETS#c8102e5.88:1
TOP SECRETTS#ff8c009.00:1
TOP SECRET//SCITS//SCI#fce83a16.74:1

Top Secret and Top Secret//SCI switch to black text, matching the marking convention for the amber and yellow bands. Every level clears the 4.5:1 AA floor. Caveats (NOFORN, REL TO, ORCON, FOUO, ITAR) attach to a marking and appear only at or above the level they apply from, so a caveat cannot be set on a portion that is too low to carry it. A corporate scheme (Public / Internal / Confidential / Restricted) ships alongside for non-government use.

Three Marking Layers

ForgeMark renders marking at three granularities, each with a job:

Banner
A strip at the top and bottom of the page carrying the highest level present, in the level's token color.
Portion tag
A compact badge on each image or rich-media block, e.g. (S) or (S) NOFORN, placed at author-chosen anchors.
Text portion mark
An inline parenthetical preceding a marked paragraph or title, e.g. (U) or (S//NOFORN).
Authority block
The derivative-classification statement, lower left: Classified By, Derived From, Downgrade To, Declassify On.

The banner level is derived, not typed: it is the higher of the course-wide applied level (a floor set once for the whole course) and the highest per-portion marking on the page. Marking a single image Secret raises that frame's banner to Secret without the author touching the banner. An individual portion can be marked below the course floor when it genuinely is lower, which is exactly the portion-marking case the standard exists for.

The Authority Block

A banner and portion marks show what a portion is. They do not make the product authoritative. The derivative-classification statement (32 CFR 2001.22) does, and ForgeMark renders it as a lower-left block on classified frames:

Derivative classification

Classified By: J. Cardona, Program Manager
Derived From: Multiple Sources
Downgrade To: CONFIDENTIAL on 2028-01-01
Declassify On: 2035-08-14

The block is optional and course-level. When it is shown, the two mandatory lines (Classified By and Declassify On) are required to publish, mirroring the rule that a real classified product cannot ship without them. The same statement is stamped into the published package's SCORM manifest, and the course title is prefixed with its highest classification, for example [SECRET//NOFORN] Coffee 101, so the marking is visible in the LMS catalog before a learner ever launches the course.

Rendered Identically Everywhere

A marking that looks right in the editor but drifts in the published package is worse than no marking. CourseForge renders shelled content through more than one path (the authoring preview, an HTML string builder, and the server publisher), so ForgeMark's marking logic exists as a pair of twin renderers, one in the browser and one on the server, held to matching output. The same policy produces the same banner, tags, and authority block whether an author is previewing a frame or an LMS is running the exported SCO.

The banner is placed by reflowing the navigation shell rather than floating over it. The shell scales its own stage to reserve the banner height, so the title, page counter, navigation, drawers, and the interactive runtimes all shift into the space between the top and bottom bands. Nothing is overlapped and nothing is clipped. This mattered for the self-scaling runtimes: an earlier overlay approach that added a competing scale broke the Adobe Animate player, which measures its own container. Reflowing the shell's single existing scale leaves that measurement intact.

Publishing Is Gated

Marking is only meaningful if a mismarked course cannot ship. ForgeMark adds hard gates to the publish preflight. Each is inert until a course actually sets a marking policy:

Marking Is Data, Not Markup

The policy that drives all of this is submitted from the browser, so it crosses a trust boundary. ForgeMark never renders a submitted policy directly. A sanitizer coerces it into a closed shape first: levels are sorted by precedence and de-duplicated, colors must be #RRGGBB, level and caveat references are scoped to ids that actually exist, free text is length-capped, and every enumerated field (banner mode, mark positions, scheme) is constrained to a known set. A malformed or hostile policy resolves to a safe default or clears the marking entirely; it can never inject markup or an off-vocabulary level into a published package.

What This Demonstrates

ForgeMark is a small subsystem that touches the hard parts of the platform at once: a trust-boundary sanitizer, twin renderers held to byte-level parity, a runtime shell that reflows around injected chrome without breaking its own scaling, publish-time gates, and a real regulatory model rendered faithfully rather than approximated. The colors are sourced, the contrast is measured, and the accessibility floor is enforced at publish. It is the kind of feature where the work is in getting the governance and the render parity exactly right, not in the pixels.

At a Glance

Standards
32 CFR 2001.22-24 · ISOO Marking Booklet
Color sources
DoD 5220.22-M · Astro UXDS
Render targets
Authoring preview · SCORM 1.2 / 2004 · Web bundle
Accessibility
WCAG 2.1 AA contrast, enforced at publish
Built with
AI-native workflow, Claude Code