Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

The Update Demand

Source of truth: this chapter is mirrored from the “Update Demand” section of CLAUDE.md. Both files are kept in lock-step; CLAUDE.md is authoritative if they ever diverge (a TestUpdateDemandTableCovers CI gate enforces table coverage against the registries).

Any change to Pulse code, configuration, file format, or public surface MUST update the corresponding skill file(s) and CLAUDE.md in the same PR. This is not a courtesy. It is a non-skippable CI failure if any of the trigger conditions below is met without the corresponding doc update.

Trigger → required update

If you change…You MUST also update…Enforced by
A registered aggregatorskills/aggregation-design.md (add or update the section for that aggregator)TestSkillsCoverAllComponents
A registered attributeskills/attribute-composition.mdTestSkillsCoverAllComponents
A registered filtererskills/aggregation-design.md (filtering section)TestSkillsCoverAllComponents
A registered grouperskills/grouper-design.mdTestSkillsCoverAllComponents
A registered window operatorskills/window-design.mdTestSkillsCoverAllWindowTypes
An error code (added/removed/renamed)errors/fixup_metadata.go (codeMetadata Message + Fixups; surfaced per-code via pulse_errors_lookup / pulse errors lookup CODE)TestCodesHaveFixups, TestManifestErrorCodesComplete
A CLI leaf (added/removed/flag added)CLAUDE.md “Common Claude Code Workflows” + skills/session-bootstrap.md if user-facingTestSkillsCoverAllCliLeaves
A --json envelope or format_versionCLAUDE.md “Output Format Contract”TestClaudeMdMentionsFormatVersion
A .pulse file format change (header layout, new field type)CLAUDE.md “Code Conventions” + skills/cohort-schema-design.mdTestClaudeMdMentionsFormatVersion, TestSkillsCoverAllFieldTypes
A new non-skippable CI gateCLAUDE.md (gate listed by name in the relevant section)TestClaudeMdMentionsAllNonSkippableGates
A new architectural decisionCLAUDE.md (relevant section) + PRD if applicablereviewer enforcement
An environment variableCLAUDE.md “Build / Dev / Test Workflow” + skills/session-bootstrap.mdTestClaudeMdMentionsAllEnvVars
A registered MCP tool (added/removed)docs/src/internals/adding-mcp-tool.md + mcp/toolmeta/meta.go (name + description)TestSkillsCoverAllMCPTools, TestManifestMCPToolsComplete
A new MCP action tool with field-name parametersmcp/bind.go (add a per-tool JSON Schema builder + entry in Bind) + docs/src/internals/adding-mcp-tool.md (Schema-bound enums section)TestMCPSchemaBinding_RemovesInvalidFields, TestMCPSchemaBinding_AllFieldsInFiltererEnum, TestMCPSchemaBinding_SampleAndFacetFieldEnum, TestMCPSchemaBinding_DedupAndSort, TestMCPSchemaBinding_NilSchema
A registered feature operatorskills/feature-engineering.md (operator catalog) + capability declaration in descriptor/capabilities_features.goTestSkillsCoverAllComponents, TestManifestOperatorsComplete
A registered synth distribution kindskills/synthetic-data.md (Supported distributions) + capability declaration in descriptor/capabilities_distributions.goTestSkillsCoverAllSynthDistributions, TestManifestDistributionsComplete
A registered statistical test (TEST_*)skills/statistical-testing.md (Operator catalog) + types/streamability.go + types/streamability_test.go + capability declaration in descriptor/capabilities_tests.goTestStreamability_TestsKnown, TestManifestTestsComplete
A registered tier-2 post-test variantCapability declaration in descriptor/capabilities_tests.go (postTestCapabilities)TestManifestPostTestsComplete
A registered aggregator/attribute/filterer/grouper/window capability metadataCapability declaration in descriptor/capabilities_<category>.go (params, accepts_types, emits_type, streamable_hint)TestManifestOperatorsComplete
A new error codeDescription row in descriptor/capabilities_errors.go (errorMetaTable)TestManifestErrorCodesComplete
An error code’s fixup templateEntry in errors/fixup_metadata.go (codeMetadata) — surfaced per-code via pulse_errors_lookup / pulse errors lookup CODETestCodesHaveFixups
A new operator’s streaming capabilitytypes/streamability.go (case for the new type) + table in types/streamability_test.goTestRegistryStreamabilityMatchesTypes, TestStreamability_*Known, TestManifestStreamableMatchesTypes
The default operator tableCLAUDE.md “Code Conventions → Smart defaults” + skills/session-bootstrap.md (“Smart defaults” section)TestDefaults_Applied + reviewer enforcement

The Update Demand applies recursively to itself: when a new trigger row is added (e.g., a new component category, a new contract), this table MUST be updated in the same PR. TestUpdateDemandTableCovers (non-skippable) parses this table and asserts every registered component category and contract type has a row.

If you find yourself wanting to defer the doc/skill update to “a follow-up PR,” stop. The follow-up PR will not happen, and the next Claude Code session will read a stale CLAUDE.md and produce wrong code. Update in the same PR or do not merge.