Skip to content

CAP-PFM-INT-017Apply tested customizations where an application allows them

Markdown

CAP-PFM-INT-017

Apply tested customizations where an application allows them

Markdown
  • DocumentDraft
  • Product intentProposed
  • ImplementationObserved

KindCapabilityProduct areaPlatformModuleIntegration access, customer extensions and shared workflow configurationRevision1

Read atservices-platform ad3f6a65react-console baf6dae3

The Formal Contract

The narrative above explains; the sections below are authoritative — the rules, scenarios and tests this document binds.

Outcomes
Contract validation checks a customization before execution.A single-answer point has one authoritative configured answer at each scope.Invocation history supports review of tests and recorded runs.
Surfaces
consoleapi
Intent sources
services-platform:docs/proposals/extensibility/decision-log.md#A2services-platform:docs/proposals/extensibility/decision-log.md#A3services-platform:docs/proposals/extensibility/decision-log.md#A5

Controls

31 controls apply, from the corpus control catalogue.

TC-AZ-001 TC-AZ-002 TC-AZ-003 TC-AZ-004 TC-CRY-001 TC-CRY-002 TC-CRY-003 TC-CRY-004 TC-DAT-001 TC-DAT-003 TC-DAT-004 TC-DAT-006 TC-IAM-001 TC-IAM-006 TC-LOG-002 TC-LOG-003 TC-LOG-004 TC-LOG-005 TC-PI-001 TC-PI-003 TC-PI-005 TC-SEC-001 TC-SEC-002 TC-SEC-003 TC-SEC-004 TC-TEN-001 TC-TEN-002 TC-TEN-003 TC-VEN-001 TC-VEN-002 TC-VEN-003

Permissions

KeyChecked atScope
platform.extension-points.readapitenant
platform.extension-handlers.manageapitenant
platform.extension-rules.manageapitenant
platform.extension-bindings.manageapitenant
platform.extension-handlers.testapitenant
platform.extension-invocations.readapitenant

Business Rules

13 rules, 12 to be proved before approval. A rule's product intent is derived from its origin: 0 confirmed by a product decision, the rest inheriting this capability's proposed.

IdRuleKindEnforced atProvenance
01must prove
Proposed
Handlers may be Lambda functions, declarative rules or built-ins; HTTPS targets are unavailable, target properties are kind-specific and secret-free, and Lambda defaults its qualifier to live.
validationapi, servicetest
services-platform:modules/extensions/tests/integration/services/persistence/extension-handlers.integration.spec.js#refuses an HTTPS handler as not available, naming decision D-02, and writes nothing
02must prove
Proposed
Code-handler management requires extension-handlers manage, while rule authors may use extension-rules manage alone.
permissionapitest
services-platform:modules/extensions/tests/e2e/extensions.e2e.spec.js#refuses a Lambda handler to a caller who may manage only rules
03must prove
Proposed
Handler secrets remain write-only in secret storage, handler deletion schedules their removal and a bound handler cannot be deleted.
invariantservicetest
04must prove
Proposed
Handlers use registered points, unique workspace names and timeouts within every implemented point’s ceiling, with a rule supplied only for rule handlers.
validationservicetest
05must prove
Proposed
Saving a rule checks every implemented point’s current contract, binding checks the selected version and invalid rules identify each problem without writes.
validationservicetest
services-platform:modules/extensions/tests/integration/services/persistence/extension-handlers.integration.spec.js#refuses a rule that does not fit, naming each problem by its path and code, and writes nothing
06must prove
Proposed
Bindings require a live registered point, a permitted and correctly identified scope, an implementing handler, an allowed failure policy with a note for overrides, a usable newly selected contract version and a forward effective window.
validationapi, servicetest
services-platform:modules/extensions/tests/integration/services/persistence/extension-bindings.integration.spec.js#refuses an overriding failure policy without a note, and accepts it with one
07must prove
Proposed
Binding lifecycle permits draft activation, shadow or disable, enabled-shadow interchange, disabled return to draft or use and disable from any state; registration alone orphans bindings, which can only be disabled, and edits require the version read.
lifecycleservicetest
services-platform:modules/extensions/tests/unit/lifecycle.spec.js#allows draft to become enabled, shadow or disabled, enabled and shadow to trade places, disabled to return, and orphaned only to be disabled
08must prove
Proposed
A single-answer point permits at most one enabled or shadow binding at a given scope.
invariantservice, databasetest
services-platform:modules/extensions/tests/e2e/extensions.e2e.spec.js#refuses a second enabled binding at one scope of a single point as 409
09must prove
Proposed
Resolution chooses the enabled binding at the most specific applicable scope then lowest priority, reports ties as configuration errors, ignores expired windows and reports shadow separately; no winner uses the point default.
calculationservicetest
services-platform:modules/extensions/tests/unit/resolution.spec.js#lets a product binding beat a tenant binding
10must prove
Proposed
Handler testing validates input against its contract and executes rule handlers with test invocation history, while code-handler tests report unavailable transport and record no execution.
policyservicetest
services-platform:modules/extensions/tests/e2e/rule-handlers.e2e.spec.js#records each run as a test invocation of the handler
11must prove
Proposed
Record facts are true or false when available, unknown for missing values or refused queries and false for absent records, evaluated as system for the same person within the workspace with request-local caching.
calculationservicetest
services-platform:modules/extensions/tests/unit/rule-handlers.spec.js#answers FALSE for a subject no row answered, known absent
12must prove
Proposed
Invocation readers see newest-first workspace runs filtered by point, handler, outcome, purpose and time, with captured references exposed only while capture is enabled.
permissionapi, servicetest
services-platform:modules/extensions/tests/e2e/extensions.e2e.spec.js#refuses the invocation history without platform.extension-invocations.read
13
Proposed
Handler and binding changes enter security history by changed field name without target or secret values.
invariantservicetest
services-platform:modules/extensions/tests/integration/services/persistence/extension-handlers.integration.spec.js#records the creation in the security trail, naming the secret by field and never by value

Scenarios

IdGivenWhenThenProvenance
01A rule provides a discount for Northeast chapter members.The rule test evaluates a Northeast member and a member elsewhere.The first receives a fifteen-percent discount and the other receives the neutral result.test
services-platform:modules/extensions/tests/e2e/rule-handlers.e2e.spec.js#answers the member elsewhere with the neutral output instead of rule_not_applicable

The Markdown files under specs/ in rhythmsoftware/rhythm-v2-docs are the canonical source of truth. This reader is a generated, read-only projection of them.