Rendered from spec/core-0.1.md in the repository.
Intentset Core Specification v0.1
Status: initial normative draft for review • Date: 2026-10-02
Specification ID: intentset/core/0.1 • Working name: Intentset
1. Purpose and scope
Intentset is an open framework for keeping product intent, observable behavior, implementation, verification, and published knowledge connected. Repository files are authoritative; the graph, Atlas, reports, and customer knowledge are derived views. A graph database is not required.
This specification defines product semantics and interchange. The VSA specification adds implementation ownership and architecture constraints. The reference profile maps those constraints to TypeScript and Amplify Gen 2. Core adoption does not require either architecture or platform.
MUST, MUST NOT, SHOULD, SHOULD NOT, and MAY express requirements in this draft. SHOULD departures require a recorded reason. Examples are informative unless a rule explicitly makes them normative. The CLI, Atlas, publisher, and MCP interface described here are implementation targets, not shipped software.
2. Semantic model and granularity
| Type | Meaning | Review question |
|---|---|---|
product |
Product identity and scope | What system are we describing? |
intent |
Strategic purpose | Why should this product exist or change? |
outcome |
Desired measurable change | What improvement will show success? |
capability |
Stable product ability | What can a user accomplish? |
behavior |
Observable action or response under stated conditions | What exactly does the system do? |
rule |
Constraint governing behavior | What must remain true? |
scenario |
Concrete conditions, action, and expected result | What example would demonstrate the promise? |
slice |
Implementation owner of a cohesive set of behaviors | Where is the behavior delivered? |
contract |
Maintained interface between implementation owners | What may another component rely on? |
verification |
Definition of an executable check or review procedure | How is a claim assessed? |
knowledge |
Audience-specific explanation grounded in product artifacts | What may we tell this audience? |
decision |
Architecture/product decision and rationale | Why was this design selected? |
A capability MAY contain many behaviors and map to several slices. A behavior SHOULD contain one recognizable promise, including its failure response. Split it when release, ownership, availability, or independent review differ. A rule MAY govern many behaviors; it MUST NOT be duplicated solely to appear in multiple capability pages. A scenario is an example, not proof that all cases work.
Recommended human decomposition is product → intent → outcome → capability → behavior. This is a navigation spine in a typed graph, not a demand that reality form one tree. Technical detail belongs in rules, scenarios, decisions, and implementation views; strategic reviewers should start at capabilities and drill down.
3. Authoritative representation
Each artifact MUST have exactly one authoritative UTF-8 Markdown document with YAML frontmatter in the declared repository scope. Slice documents are named slice.md in this profile; other filenames are not identity. This consolidates the conversation's alternative YAML manifests and Markdown records into one v0.1 carrier. A later standalone YAML binding MAY be specified; v0.1 tools MUST NOT silently merge duplicate records.
Frontmatter MUST be the first block between --- delimiters. It MUST decode to a JSON-compatible object. Reject duplicate keys, custom YAML tags, merge keys, aliases, and non-finite numbers. Quote dates and version strings. Implementations MUST limit file size, nesting, and parser resource use. Document bodies MUST NOT execute code or templates. Ordinary code fences remain inert text.
---
markset: 0
intentset:
spec: "0.1"
profile: intentset/behavior/0.1
id: BEH-ASMT-SCHEDULE
type: behavior
title: Schedule an assessment
status: approved
owner: team-assessment
visibility: internal
audiences: [engineering, product]
parent: CAP-ASMT-ASSIGN
links:
governedBy: [RULE-ASMT-FUTURE]
availability:
products: [PRD-LANTERN]
releases: ["pilot-1"]
roles: [teacher]
editions: [standard]
flags: []
---
markset is required by the Intentset Markset binding, not by language-neutral graph interchange. intentset.profile is an Intentset-owned semantic profile identifier; it is not a claim that Markset has registered a profile API. Unknown top-level frontmatter is preserved, but cannot alter Intentset semantics. Unknown keys inside intentset are errors except under extensions.
4. Common fields and identity
Required common fields are spec, profile, id, type, title, status, owner, visibility, and audiences. spec is the string 0.1. profile MUST equal intentset/<type>/0.1. id MUST match ^[A-Z][A-Z0-9]*(?:-[A-Z0-9]+)+$ and be unique within the product graph. IDs are case-sensitive, immutable, independent of title/path, and MUST never be reused. Recommended prefixes are PRD, INT, OUT, CAP, BEH, RULE, SCN, SLICE, CONTRACT, TEST, KB, ADR. Prefixes aid humans; type determines semantics.
owner is one accountable team/role identifier from the repository's owner registry. audiences is a nonempty array from its audience registry. These are documentation audiences, not runtime authorization. visibility is public, customer, internal, or restricted. Missing access information MUST fail closed for publication.
Optional common fields: parent, links, availability, revision, reviewedAt, reviewedBy, extensions. revision is a positive integer incremented for semantic changes. Review fields identify a review record, not automated proof. Extensions MUST be namespaced (for example org.example/change) and cannot redefine core fields. Source hashes and commit IDs are computed externally, not manually maintained in every document.
Moving a file or correcting wording does not change identity. Splitting a behavior creates new IDs and preserves the old artifact as retired with replacedBy links. Merging works similarly. Historical release snapshots keep the earlier meaning.
5. Relationships and cardinality
Relationships are authored once, in the direction below. Reverse edges are derived and MUST NOT be separately maintained. References MUST resolve in the same graph snapshot. External issue/PR URLs belong in extensions, never as dangling internal IDs.
| Field / relationship | Source → target | Cardinality and meaning |
|---|---|---|
parent |
intent → product; outcome → intent; capability → outcome or capability; behavior → capability | Exactly one except product; navigation parent |
governedBy |
behavior → rule | Zero or more constraints |
illustrates |
scenario → behavior | One or more behaviors exemplified |
implements |
slice → behavior | One or more for product slices; authoritative ownership |
dependsOn |
slice → slice | Zero or more implementation dependencies |
exposes |
slice → contract | Zero or more public contracts |
consumes |
slice → contract | Zero or more consumed contracts |
verifies |
verification → behavior, rule, or scenario | One or more assessed claims |
explains |
knowledge → behavior, rule, or capability | One or more sources of knowledge |
informedBy |
slice, contract, or behavior → decision | Zero or more supporting decisions |
requires |
behavior → behavior | Zero or more functional prerequisites |
supports |
outcome → intent; capability → outcome | Additional associations beyond the navigation parent |
replacedBy |
retired artifact → same type | One or more successors when applicable |
All arrays contain unique IDs. Self-edges, duplicate edges, invalid endpoint types, cycles in parent, cycles in replacedBy, and cycles in requires are errors. Other cycles are evaluated by the relevant profile; dependsOn is governed by VSA. Each non-root navigation chain MUST reach a product. An artifact without a navigation parent is reached through its typed relationships. Active rules MUST have an incoming governedBy; active scenarios, verifications, and knowledge MUST have their corresponding outgoing links. Draft unattached artifacts produce warnings.
At VSA adoption, an approved, implemented, released, or deprecated behavior MUST have exactly one accountable product slice through implements. Other collaborating slices appear through slice dependencies and contracts. This resolves the earlier discussion's “one or more owners” ambiguity while retaining multi-slice implementations. A slice MUST NOT implement a behavior already owned elsewhere.
6. Required narrative by artifact type
Every document MUST contain a level-one heading matching its title and substantive prose. Validators can check section presence; reviewers determine semantic adequacy.
| Type | Required level-two headings |
|---|---|
| product | Scope |
| intent | Rationale |
| outcome | Measure |
| capability | Overview |
| behavior | Behavior; Preconditions; Outcomes |
| rule | Constraint |
| scenario | Given; When; Then |
| slice | Responsibility; Public contract; Verification |
| contract | Interface; Compatibility |
| verification | Procedure; Expected result |
| knowledge | Guidance |
| decision | Context; Decision; Consequences |
A behavior MUST identify actor, trigger, observable success response, and meaningful failure response in these sections. An outcome's Measure MUST state metric, baseline or “unknown,” target, and measurement method. A verification's Procedure MUST identify automation or a reproducible manual review; neither a filename nor a test count is sufficient.
7. Lifecycle, release, and version semantics
status is draft, approved, implemented, released, deprecated, or retired. Default progression follows that order. Drafts may be retired without release. Returning to draft requires a review note and MUST NOT rewrite immutable release snapshots. Released artifacts are changed through a new snapshot; their ID remains stable only when meaning remains recognizably continuous.
Status is an editorial claim, not a test result. approved records intent; implemented records an implementation claim; released requires inclusion in a reviewed release snapshot. deprecated remains available until the stated removal; retired is excluded from current publication and retained for history.
A release snapshot records product ID, exact release label, source commit, graph hash, specification/profile versions, and build time. Release labels are opaque strings: v0.1 performs exact matching, not inferred SemVer ordering. availability, required on behaviors and knowledge, contains nonempty products, releases, roles, and editions arrays plus a flags array. All named flags are required; empty means no flags. No implicit wildcard is allowed. Applicability is AND across dimensions and OR within an array. The repository registries define valid dimension values.
A release may include deprecated behavior; prospective documentation MAY describe future work only in a separately labeled roadmap projection. A status of “released” alone MUST NOT make a feature available to all customers.
8. Verification definitions and run evidence
Verification nodes identify checks. Evidence is a separate run record, since runs change more frequently than product semantics. verification metadata contains method (automated or manual), locator (repository-relative path), and selector (stable test or review case identifier).
A run record MUST include evidence ID, verification ID, source commit, graph hash, environment, exact product/release scope, tool/version or reviewer identity, start/end UTC timestamps, result (pass, fail, skip, error), and an evidence URI. A manual record also MUST identify reviewer and review rationale. URI presence is not proof of trustworthy execution; evidence producers and stores must be controlled by the adopting organization.
Only pass at the assessed commit and graph hash counts as current passing evidence in v0.1. Any older evidence is stale. This deliberately conservative policy avoids pretending change-impact analysis proves unrelated code safe. Skip, error, absence, and stale runs MUST NOT count as pass. Link coverage and current passing coverage MUST be displayed separately. A failing current run MUST remain visible even if a prior run passed.
Informative: where run records live. Because a pass counts only at the assessed commit, a run record committed to the repository it assesses describes a commit that is no longer the latest the moment it lands, and reads as stale. Keep run records in CI artifacts or another store the adopting organization controls, never in the commit under assessment. (Found by the Streamlane pilot, 2026-10-02.)
A claim is “verified in snapshot” only if every applicable required verification linked to it passes. Scenarios and governing rules require their own coverage; a parent behavior pass does not silently satisfy them. Manual and automated coverage MUST be separately countable. Structural validation cannot prove that tests adequately assert the documented behavior.
9. Markset profiles and document publication
Intentset owns metadata, required sections, semantic validation, graph resolution, and publication policy. Markset owns document syntax and rendering. The reference implementation MUST accept Markdown + YAML frontmatter and support Markset validation/rendering through a version-pinned adapter. Plain Markdown fallback MUST remain readable. Profiles MUST NOT introduce :::behavior, :::rule, or any other new Markset directive.
The profiles are intentset/<type>/0.1, plus generated intentset/atlas/0.1 and intentset/publication/0.1. Generated profiles are publication outputs, not canonical graph nodes. Metadata validation and Markset validation MUST produce separately identifiable diagnostics. A successful render MUST NOT imply semantic conformance.
Use ordinary Markdown links with repository-relative paths for authored cross-references. ID resolution is an Intentset graph function. Symbolic-reference syntax and a Markset-native profile registry are deferred; no new syntax is assumed in v0.1. This package uses plain Markdown bodies to avoid reliance on unverified Markset directives. Markset integration details are provisional until the upstream specification and parser version are pinned (see sources).
Publication pipeline:
Canonical files → validated graph → exact release snapshot
→ authorized audience projection → reviewed knowledge
→ generated Markset → HTML / portable text / retrieval chunks
A publisher MUST select authorized artifacts before sending text to a renderer or language model. It MUST deny by default, intersect product/release/role/edition/flag availability, restrict visibility and audience, and exclude draft/retired material. Public projection allows public records only. Customer projection allows public and customer records, with authenticated entitlements; internal/restricted data require separate explicit authorization. Knowledge bodies are curated audience-safe text, not automatically copied engineering prose.
Each published knowledge document MUST retain source IDs, source revisions/hashes, snapshot ID, audience, availability, reviewer, and publication timestamp. If a source changes, dependent knowledge becomes needs-review and MUST NOT be republished as current until reviewed. Generated files MUST be marked derived and MUST NOT be edited as canonical truth. A reference to an excluded source MUST fail publication or be replaced with an explicitly reviewed safe explanation; it MUST NOT leak the source title or internal path.
Retrieval chunks MUST inherit the same access filters and provenance. Authorization must occur before retrieval and again before response assembly; filtering only the final answer is insufficient. Answers MUST cite eligible knowledge, disclose unavailable evidence, and abstain when the requested version is unknown. Documentation metadata MUST NOT be used to grant runtime product access. Generated prose needs review; graph connectivity alone cannot establish that it is accurate.
10. Human review, impact, and agent context
An Atlas SHOULD provide: product/capability overview; behavior detail; engineering ownership; verification status; publication readiness. Summary counts MUST disclose snapshot, denominator, scope, and whether they measure links or current pass evidence. The UI MUST expose missing/stale evidence rather than replace it with a generic green status.
Impact reports MUST show direct changes separately from candidate downstream effects. Starting at an ID, traverse reverse relationships to dependent behaviors, owners, verifications, and knowledge; include outgoing rules, contracts, and decisions as review context. Traverse reverse slice dependencies transitively, with a visited set. Include parent ancestors for navigation. Record each path/reason; do not label reachability as proof that runtime behavior changed.
Before an agent edits implementation it SHOULD load the owning slice, behaviors, rules, scenarios, contracts, and decisions. Afterward it SHOULD update affected semantics and checks in the same review. Agents MUST NOT self-approve release/publication simply because validation passes. MCP and CLI context results MUST identify snapshot and source paths; customer tools MUST use the restricted publication index, never raw engineering context.
11. Conformance and diagnostics
Conformance is a claim about a declared repository scope and snapshot, not a universal product certification. Publish the spec/profile versions, scope, exclusions, waiver count, checker version, and report hash.
| Level | Required conditions |
|---|---|
| L1 Product model | Parse, identity, fields, typed links, hierarchy, lifecycle, narrative checks pass |
| L2 Traceable implementation | L1 + VSA ownership and path attribution for adopted behavior scope |
| L3 Verified product | L2 + applicable behavior/rule/scenario verification definitions and current passing evidence |
| L4 Published knowledge | L3 + reviewed audience projections with availability and provenance checks |
| L5 Continuous product truth | L4 + required CI checks, architecture enforcement, impact reports, release snapshot automation and versioned agent context |
A partial adoption MUST name included capabilities/IDs and show out-of-scope counts; it MUST NOT advertise repository-wide L3 when only a pilot passed. A waiver does not erase a failed MUST: report “with exceptions,” not unqualified conformance. Recommended checks:
| Code | Condition | Default |
|---|---|---|
| CORE001 | Invalid carrier, schema, or required section | Error |
| CORE002 | Duplicate/reused ID | Error |
| CORE003 | Unresolved or wrong-type relationship | Error |
| CORE004 | Invalid/cyclic decomposition or replacement | Error |
| CORE005 | Lifecycle/release claim inconsistent | Error |
| CORE006 | Missing applicable ownership (L2+) | Error |
| CORE007 | Missing/failing/stale required evidence (L3+) | Error; a warning for a draft behavior, rule or scenario that no verification definition names |
| CORE008 | Unauthorized/stale publication (L4+) | Error |
| CORE009 | Draft unattached artifact | Warning |
Diagnostics MUST identify code, severity, artifact, path, field/location, explanation, and remediation. Sort by path, artifact ID, code. Validation MUST be deterministic for identical inputs and MUST NOT silently rewrite files. Proposed CLI exits: 0 pass, 1 validation failure, 2 invocation/tool failure. JSON reports MUST preserve warnings separately.
12. Portability and exclusions
A normalized JSON graph MUST retain metadata, body, source path, source hash, and explicit edges; serialization MUST preserve unknown namespaced extensions. Round trips MUST preserve semantics, not YAML formatting. Generated inverses MUST be marked derived. Importers for issue trackers/ReqIF/OSLC are later adapters and MUST report lossy mappings. Tickets describe changes; product artifacts describe ongoing behavior.
v0.1 does not mandate a database, hosted service, test framework, cloud, commercial product, or universal AI correctness score. It does not assert that documented intent and production reality can be equated by static validation.