Part VII - Software Platform Engineering
SYSE.30 - Make Software Builds Repeatable and Traceable
Normativity: Guidance within the stated software-engineering use; examples are illustrative.
SYSE.30:1 - Problem frame
Use this pattern when two builds of “the same source” produce unexplained differences, a package cannot be rebuilt after a worker disappears, or nobody can recover which inputs produced a tested artifact. Start with one required output and one actual build attempt. Recover its source, resolved dependencies, instructions, toolchain and environment before interpreting a source label as a complete build identity.
The result is a repeatable build procedure and an input/output account, or a precise uncontrolled input that prevents that result. In Software Platform Engineering this makes later test and artifact claims refer to recoverable bytes. It does not prove that those bytes behave correctly or came from a trustworthy builder.
If the needed artifact already exists and the task is to transfer that exact artifact, use SYSE.32. If separately developed changes still need integration into a checked mainline, use the direct CI source route in SYSE.31; reproducible isolated branches are not an integrated application.
SYSE.30:2 - Problem
A source revision omits many influences on a build: dependency resolution, generated inputs, tool versions, platform defaults and ambient state. “Run the same command again” can reuse yesterday’s output or resolve a different dependency today. The command may succeed in both cases without reproducing the claimed artifact.
Without an explicit output and comparison criterion, a team can also confuse repeatable execution, equivalent behavior and byte identity. Each supports a different later use.
SYSE.30:3 - Forces
| Force | Practical tension |
|---|---|
| Reconstruction | Recording more inputs helps recovery; irrelevant detail increases maintenance and hides the inputs that actually change output. |
| Fast builds | Caches reduce delay but can hide an undeclared dependency or a build that never ran. |
| Byte identity | Strict comparison detects unexplained variation; some outputs deliberately contain separately varying operational information. |
| Availability | Pinned inputs stabilize meaning, but a version name is not enough when its bytes later disappear. |
SYSE.30:4 - Solution
SYSE.30:4.1 - Fix the output and the claim
Name the artifacts needed by the next consumer: for example an executable package and its dependency bundle. Distinguish them from build logs and other ancillary results. State whether the current need is to repeat the procedure, explain provenance, compare functional behavior, or reproduce the specified artifacts byte for byte.
Use the Reproducible Builds meaning of a reproducible build only for the byte-identical specified artifacts under the declared source, environment and instructions. If a comparison deliberately ignores selected metadata, state that narrower equivalence and why it is enough for the receiving use; do not report the same result as byte reproducibility. Do not exclude a differing file merely to make the result pass.
SYSE.30:4.2 - Recover what the build actually consumed
Begin with the source revision and any uncommitted or generated input included in the attempt. Recover the exact build instructions, resolved dependency versions and content identities, toolchain, build configuration and relevant environment conditions. A dependency declaration and the dependencies actually resolved are separate evidence.
Inspect influences that can change the selected output: local files, network downloads, compiler flags, environment variables, locale, paths, timestamps, random values and ordering. Remove an irrelevant influence when the operation permits it; otherwise control or record it. A container image can help identify a toolchain without describing every relevant host or external-service condition.
Retain the inputs or a usable authorized acquisition route for the intended reconstruction interval. A recorded URL that no longer supplies the identified bytes is a recovery gap. Reuse existing build metadata and configuration records when they answer these questions; no particular manifest format is required.
SYSE.30:4.3 - Construct one controlled execution
Turn the recovered instructions into an executable procedure with explicit inputs and outputs. Start in a clean workspace and obtain the named inputs. Prevent an undeclared local file or an unbounded “latest” dependency from silently changing the result. Keep secrets outside public logs and use the authorized access mechanism.
Treat caches according to their role. An identified dependency cache can supply a known input; an old final package cannot demonstrate that the present build procedure works. For the reconstruction check, execute the relevant build work rather than copy a previously produced output. If complete isolation is expensive, state which remaining influences are controlled, observed or unresolved.
Bind the resulting artifact identities to the actual input set and execution. SYSE.13 supplies configuration identity. A successful exit without the promised output is not successful construction.
SYSE.30:4.4 - Compare independent repetitions and explain differences
When the receiving use needs reproducibility, repeat from the identified inputs in a fresh execution. Where the claim includes transfer between builders, use the relevant independent builder or environment, not just a second invocation on the same dirty worker.
Compare the specified output bytes, commonly through a suitable cryptographic digest followed by a useful difference inspection when they differ. Change one suspected influence at a time when that can discriminate the cause. Explain the variation before accepting an equivalence claim.
For incidental build timestamps, prefer removing them from the specified artifact or deriving a needed date from the named source. Retain actual execution time in separate build evidence when it is needed. A tool-specific fixed-date mechanism works only where the selected tool supports it; changing a clock globally can affect behavior that depends on elapsed time. Rebuild and compare after the repair.
A matching pair is bounded evidence, not proof against every future environment. If a dependency, toolchain or output requirement changes, qualify the affected build again. Preserve a useful partial result: “the build runs from these inputs, but archive order remains uncontrolled” is more informative than “reproducible” with an unexplained exception.
SYSE.30:4.5 - Return the right result to the next use
Return the procedure, recoverable input identities, specified artifacts and the comparison result with its conditions. Return an explicit missing input or unexplained difference when that is the honest result.
Behavioral tests consume this artifact through SYSE.31. Artifact authenticity, trust expectations and promotion use SYSE.32. Actual runtime installation uses SYSE.41. None of those results is established by a build digest. Identify a package rebuilt for another environment and compare its bytes with those of the previously tested artifact before deciding which earlier evidence remains applicable.
SYSE.30:5 - Archetypal Grounding
In a constructed ParcelWorks case, the developer supplies service revision r17 and asks for the package that will be tested. Two workers report successful builds with different package digests. Both claim r17. The team first names the service package as the reproducible artifact; the execution log is separate evidence.
Inspection recovers build recipe b3, dependency set d9 and runner image i7 from both attempts. The package contains the same service files but also a generated line, “built at 10:02” in the first attempt and “built at 10:07” in the second. The source label was correct but incomplete: wall-clock time changed a specified output.
The application does not use that line for business behavior, and exact execution time is needed only for diagnosis. The team removes the line from the package and retains it in the separate build evidence. A required source-version label remains r17. Two fresh executions of the repaired recipe, with the same d9 and i7, produce identical specified package bytes. The result names that tested input set and comparison.
Now change the case: a dependency named “stable” resolves to different bytes on the second worker. Removing the timestamp cannot repair this difference. The next result is the exact unresolved dependency identity and a bounded acquisition/pinning repair. If the original bytes cannot lawfully be obtained, exact reconstruction remains unavailable even though a newer package could be built and tested as a different candidate.
A third case reuses the first worker’s final package from cache. Matching digests prove that the same cached bytes were returned, not that the procedure reconstructed them. A fresh execution is still needed for the reconstruction claim.
What changes in practice is the next debugging question. Instead of debating whether r17 is “the same version,” the team can identify which input changed, which artifact was tested and which claim the comparison actually supports. A later test failure still requires behavioral investigation.
SYSE.30:6 - Bias-Annotation
Successful builds on a familiar worker can hide dependence on its local state. A focus on byte equality can also distract from malicious or incorrect but deterministic output. Include the environment transfer relevant to the real use, and keep correctness and builder trust as separate questions.
SYSE.30:7 - Conformance Checklist
- The specified output and comparison criterion are explicit before differences are judged.
- Actual source, resolved inputs and relevant environment are recoverable, not merely declared.
- The procedure produces the named output from a clean execution under stated conditions.
- A reconstruction check does not substitute a cached final artifact for execution.
- Differences are explained or returned as a bounded gap; ignored metadata is not silently removed from the claim.
- Correctness, authenticity, mainline integration and deployment remain separate results.
SYSE.30:8 - Common Anti-Patterns and How to Avoid Them
| Misuse | Repair |
|---|---|
| A source commit is treated as the complete build input. | Recover resolved dependencies, generated inputs and relevant environment conditions. |
| Two successful exits are called reproducibility. | Compare the specified outputs under an explicit criterion. |
| A build report names an available version but its bytes cannot be recovered. | Preserve the identified input or state the unavailable reconstruction dependency. |
| Equal digests are accepted as proof of safe software. | Use the separate behavior and trust questions for the actual artifact. |
SYSE.30:9 - Consequences
Differences become diagnosable and tested bytes remain identifiable. Controlled inputs and retention cost storage, maintenance and sometimes build speed. Apply stronger reconstruction controls when the receiving claim needs them; transferring an already verified artifact should not force a needless rebuild.
SYSE.30:10 - Rationale
A build is an operation over more than a source-tree name. Recovering its actual inputs closes a practical explanation gap, while an explicit output criterion prevents a weaker comparison from being reused as a stronger result. Independent reconstruction and artifact trust then contribute different evidence.
SYSE.30:11 - SoTA-Echoing
For “What establishes that this package can be reconstructed?”, adopt the controlled-input and specified-artifact comparison in the Reproducible Builds definition. The serious default is repeated command success from the same source label. Section 4.1 rejects that weaker result as byte reproducibility, and section 4.4 requires a comparison. The stronger evidence costs an additional controlled execution; it is warranted only for the claim being made.
Adapt recording the build environment and its timestamp guidance in sections 4.2–4.4. Compared with recording every ambient value forever, remove irrelevant variation where possible and retain the inputs that can change the output. The worked case separates source identity from execution time. Tool support and format semantics must be checked locally; the source’s historical tool list is not a current compatibility guarantee.
Reopen the selected controls when an independent builder disagrees, an input disappears, a dependency or toolchain changes, or the receiving use needs a different output/equivalence claim. These sources do not establish application correctness or trustworthy provenance.
SYSE.30:12 - Relations
SYSE.13 supplies configuration identity. SYSE.31 constructs meaningful feedback and exposes the exact continuous-integration Method when a shared-mainline result is missing. SYSE.32 verifies artifact-specific trust and promotion; SYSE.33 supplies reconstructible development/test conditions; SYSE.41 performs actual deployment. SYSE.4 governs reliance on the resulting evidence for a named engineering claim.
SYSE.30:End
SYSE.31 - Keep Software Feedback and Continuous Integration Fast and Trustworthy
Normativity: Guidance within the stated software-engineering use; examples are illustrative.
SYSE.31:1 - Problem frame
Use this pattern when developers wait too long to learn whether a change works, rerun failures until they disappear, or receive green checks that do not answer the current engineering question. Start with one change and the decision its feedback must support. Identify what each check can establish, on which source or artifact, under which conditions, and who can act on failure.
The first result is a usable feedback arrangement: maintained checks, interpretable outcomes and a bounded response to a failed or missing result. It is not a target number of tests or a universal time limit. The application team supplies the expected behavior; a software platform can make the feedback available without inventing that behavior or owning the release decision.
If adequate build and tests already exist and only integration of a small change is missing, go directly to the DORA continuous-integration Method in section 4.5. Do not redesign adequate feedback first. If the build inputs themselves cannot be recovered, use SYSE.30; if the conditions cannot be reconstructed, use SYSE.33.
SYSE.31:2 - Problem
A slow result arrives after the developer has changed context or several changes have accumulated. An unreliable result makes repetition cheaper than understanding. A fast but irrelevant result is equally dangerous: the suite can pass on one branch, one fixture or one old artifact while the integrated application fails.
The aim is not merely quicker execution. It is earlier useful discrimination between a usable change, an actual regression, a broken test or environment, and a question for which evidence is still absent.
SYSE.31:3 - Forces
| Force | Practical tension |
|---|---|
| Speed and reach | Small checks give early feedback; some behavior needs a running application, real integration or human exploration. |
| Stable tests and real variation | Controlled fixtures aid diagnosis; removing genuine concurrency or environment variation can remove the defect being sought. |
| Local ownership and cooperation | Developers need to repair feedback quickly while testers and domain specialists contribute different acceptance knowledge. |
| Availability and maintenance | Keeping every test forever increases burden; dropping a test can remove the only evidence for an important claim. |
SYSE.31:4 - Solution
SYSE.31:4.1 - Connect a check to the decision
Name the changed behavior, the assertion under test and the result consumer. Recover the application team’s acceptance meaning rather than deriving it from current implementation. A test that repeats the implementation’s mistaken assumption is not an independent answer to the user question.
Bind each result to the source or artifact actually exercised, relevant configuration, test input and conditions. Distinguish a test description from a completed run. A missing run, lost observation or wrong artifact cannot be reported as a pass.
Begin with a small set that discriminates the consequential failures for the current change. When necessary behavior is not specified well enough to judge, return that precise question to its owner. Do not hide it behind a large existing test count.
SYSE.31:4.2 - Put feedback where it can change the next action
Use fast focused tests for failures they can genuinely detect. Retain integration, acceptance, performance and exploratory work where their distinct results affect reliance. Choose the execution arrangement from those dependencies, not from a fixed proportion of test types.
Run relevant checks close enough to a change that the result remains actionable. Recover the actual waiting, execution and diagnosis time before choosing an improvement: a faster test does not repair a long queue or an unintelligible failure report. Parallel execution is useful only when isolation and capacity preserve the test’s meaning.
A slower test can remain necessary. Make its unresolved result visible to the decision that needs it instead of presenting early fast checks as full acceptance.
SYSE.31:4.3 - Make a failure reproducible and interpretable
Retain the tested revision/artifact, inputs, relevant environment and failure observation. Compare a suspected regression with the previous qualified behavior under matching conditions when that comparison can distinguish the cause.
Investigate variable outcomes. Shared mutable fixtures, uncontrolled clocks, order dependence and unavailable services can corrupt feedback. A nondeterministic product race is still a product defect; calling a test “flaky” does not settle which object failed.
Control a suspected source of interference and repeat a discriminating case. Change only what the comparison can account for. A rerun may help diagnosis, but a later pass does not erase an earlier failure under supported conditions.
SYSE.31:4.4 - Decide who repairs which failure
| Observed problem | Immediate response |
|---|---|
| The tested product violates the agreed behavior. | Return the failing case to the application team and withhold the reliance that required it. |
| The test asserts an obsolete or incorrect expectation. | Resolve the expectation with its owner, repair the test and re-exercise the behavior. |
| The environment or provider failed before the behavior could be observed. | Return that failure for environment/platform repair; retain the missing product evidence. |
| The result cannot be attributed to the candidate or conditions. | Recover attribution or rerun the right case; do not transfer the old pass. |
Use the actual maintainers and their permissions. Platform operators can repair provision; they do not acquire authority to change application behavior, withdraw a source change or approve release merely because they operate the test service.
If a test must be quarantined, identify the claim whose evidence was lost, its current consequence and a usable temporary replacement or stop. Name the repair responsibility and the condition for restoring the check. Quarantine is not an unlimited exemption or a way to improve the displayed pass rate.
SYSE.31:4.5 - Use the exact continuous-integration Method when integration is missing
Apply DORA Continuous integration, “How to implement CI” and “Common pitfalls” for frequent small changes to a shared mainline. Supply the actual mainline, current change, adequate build/tests, accepting application team and permission. Recheck against the current integration base when another change intervenes and check the resulting shared revision.
The first result is a checked integrated mainline revision with qualified feedback, or a blocked/restored mainline and an unresolved change returned to its team. If the mainline breaks, stop qualifying its artifacts; the authorized team repairs or withdraws the offending integration and rebuilds/retests the resulting revision. Separately green branches do not supply that result.
The source’s cadence and TDD guidance need their own fit to the team’s work; they are not universal scheduling or development-method mandates here. A checked mainline is still not an installed application or release permission.
SYSE.31:4.6 - Verify that the arrangement improves useful feedback
Exercise a known passing case, a meaningful failing change and a failure of the feedback mechanism. Check that the responsible person can distinguish them and recover the tested subject. Inspect late-discovered defects: did the arrangement omit a needed question, use the wrong conditions, or fail to deliver its result in time?
Return the checks, their supported questions and conditions, remaining evidence gaps, and the actual failure-response arrangement. Improve from useful detection and repair, not from test count or green percentage alone.
SYSE.31:5 - Archetypal Grounding
In a constructed ParcelWorks case, two address-service tests share the same fixture row. One test removes it during cleanup while another still reads it. The second test sometimes fails on unchanged application bytes; rerunning the suite merely changes the timing.
The developer first preserves the failing order and row identity. The fixture is then made independent for each attempt, with cleanup limited to that attempt’s data. Repeating the conflicting order no longer destroys another test’s input. A deliberately broken address transformation still fails its assertion. The repaired feedback therefore removed fixture interference without deleting the behavior check.
Now consider a different failure: an application permits parcel weights between a minimum and maximum, with the declared invariant minimum <= maximum. Mainline M0 has the range 1..10. Change A raises the minimum to 8; change B, developed from M0, lowers the maximum to 5.
| Tested state | Range | Feedback and consequence |
|---|---|---|
| M0 | 1..10 | The invariant passes. |
| A on M0 | 8..10 | A’s branch passes. |
| B on M0 | 1..5 | B’s branch passes. |
| B combined with already integrated A | 8..5 | The invariant fails despite no textual merge conflict. |
| Withdraw B while retaining A | 8..10 | The rebuilt integrated result passes the invariant again. |
Testing B against the actual current mainline would reject it before integration. If stale branch feedback was nevertheless used, the post-integration check finds the bad combination and blocks artifact qualification. The authorized application team withdraws B and verifies the restored result. The team must resolve the conflicting business intent about the permitted parcel-weight range before B is attempted again.
Finally, fast data-transformation tests can pass while a new address form hides a non-empty display line. The application-level acceptance or exploratory result remains necessary for that user behavior. Running more fast unit tests cannot substitute for the missing observation.
What changes in practice is that a failed result has a usable owner and meaning, and a green result stays bound to the change and behavior it actually exercised.
SYSE.31:6 - Bias-Annotation
Teams can optimize the measured feedback time by excluding slow but necessary questions, or optimize pass rate by suppressing real failures. Developers may also assume that a familiar fixture represents all supported use. Inspect escaped defects and missing observations, including the perspective of application users and testers.
SYSE.31:7 - Conformance Checklist
- Each relied-on check has a concrete question, subject and applicable conditions.
- The arrangement retains distinct slow or human evidence where the decision needs it.
- Product, test, environment and missing-observation failures receive different responses.
- Quarantine exposes the lost assurance and a replacement or stop.
- Integration feedback concerns the current combined mainline, not only isolated branches.
- Repair work has an assigned maintainer; source withdrawal and release require the applicable authorization.
SYSE.31:8 - Common Anti-Patterns and How to Avoid Them
| Misuse | Repair |
|---|---|
| Rerun until green. | Preserve and explain the failed observation; use repetition diagnostically. |
| Delete the slowest test to meet a time target. | Recover the claim it answered and retain an adequate result or explicit limitation. |
| Two green branches imply a green mainline. | Exercise the current combined revision and restore it when the integration fails. |
| Infrastructure failure is reported as product success because no assertion failed. | Mark the product observation missing and repair the feedback mechanism. |
SYSE.31:9 - Consequences
Useful feedback shortens the interval between a change and an informed response. It requires continuing test and environment maintenance and can expose missing acceptance knowledge. Faster feedback is not always less testing; sometimes the gain is a clearer failure or a smaller integrated change.
SYSE.31:10 - Rationale
Feedback is useful only when it helps answer the current question and arrives where someone can act on it. Subject attribution, credible failure meaning and repair ownership protect that connection. Mainline integration supplies an additional result that branch-local build and tests cannot establish.
SYSE.31:11 - SoTA-Echoing
For “How can a change receive prompt, credible feedback?”, adapt the maintained, fast and behavior-relevant test-suite line in DORA Test automation. The serious defaults are late bulk testing and a large unstable suite. Sections 4.1–4.4 select checks by the question, preserve distinct slower work and repair interference instead of rewarding reruns. The trade-off is testability and maintenance effort; no fixed test ratio or ten-minute limit replaces the local decision.
For the already testable change that remains separate from mainline, adopt the exact DORA CI Method at section 4.5 rather than another feedback-redesign cycle. The range example shows why branch-only automation loses the interaction between changes. Current-base feedback and restoration cost effort but expose that failure before later reliance.
Reopen the arrangement when supported failures escape, variable outcomes remain unexplained, feedback arrives after its decision, or changes in architecture or use make the checks answer the wrong question. These source Methods support software-development feedback; they do not establish whole-System usability or release authority.
SYSE.31:12 - Relations
SYSE.30 supplies recoverable build inputs; SYSE.33 supplies development and test conditions. The exact DORA CI Method in section 4.5 supplies actual small-change integration when that is the missing result. SYSE.32 consumes artifact-specific evidence, SYSE.41 performs deployment, and SYSE.36 distinguishes observations of platform tasks from application tasks. SYSE.4 and SYSE.14 govern evidence reliance and release decisions respectively.
SYSE.31:End
SYSE.32 - Promote Verified Artifacts without Rebuilding
Normativity: Guidance within the stated software-engineering use; examples are illustrative.
SYSE.32:1 - Problem frame
Use this pattern when a tested software package must cross an environment, storage service or provider boundary and someone needs to rely on it being the same qualified result. Start with the actual artifact that was exercised, the evidence needed at the destination, and the conditions under which that evidence remains applicable.
The first result is an artifact-specific basis for promotion, or an exact identity, evidence or trust condition that has not been met. Promotion here means making the selected artifact available for a next use without silently replacing it. It does not mean that a runtime has been installed. SYSE.41 performs that installation and checks its actual result.
If an unchanged artifact is already available at the consumer with adequate identity and applicable evidence, use that result. If the missing result is a recoverable build, use SYSE.30. If it is application acceptance, obtain the relevant engineering feedback through SYSE.31. A storage transfer cannot supply either.
SYSE.32:2 - Problem
A version label or source revision can remain unchanged while the bytes change. A later stage may resolve different dependencies, embed another configuration or receive a substituted package. Tests of the earlier package then accompany a different result.
Authenticity is a separate question. A signature can be valid while the signer, source, build procedure or artifact is not the one the consumer expects. Conversely, a package can have the expected digest while the only evidence for that expectation came through an untrusted channel.
SYSE.32:3 - Forces
| Force | Practical tension |
|---|---|
| Reuse and local adaptation | Reusing tested bytes preserves their identity; a destination still needs its own qualified runtime configuration. |
| Convenience and evidence reach | Mutable names simplify selection but can hide substitution after a test or check. |
| Verification and trust | Cryptographic checks establish particular relationships; local trust and acceptance conditions must still be supplied. |
| Continuity and change | Old evidence can be reused for an unchanged subject, but a new artifact or material condition needs a new basis. |
SYSE.32:4 - Solution
SYSE.32:4.1 - Recover the artifact and the claim being carried
Identify the exact package, image or other deliverable that the prior activity produced and exercised. Use an identity appropriate to its form, such as a digest of the specified bytes, together with a retrievable immutable object where available. State which bytes the identity covers; a directory name or a mutable image tag is not that definition.
Recover the evidence needed for the next decision. Distinguish functional tests, build-input traceability, vulnerability or policy checks, and authenticity. Bind each relied-on result to its actual subject and relevant conditions. A test of source code does not automatically cover a separately built binary.
When evidence is absent or attributed only to an ambiguous label, return that gap. The team may re-establish evidence for the selected artifact or select the artifact already covered. Relabeling the new output with the old version is not a repair.
SYSE.32:4.2 - Separate the artifact from destination configuration
Keep destination-specific values in an independently identified configuration when the software supports that separation. Define the compatible artifact/configuration combination and protect secrets through the applicable authorized mechanism; do not publish them merely to make the build look reproducible.
If a destination genuinely requires a different compiled result, treat it as a different artifact and obtain its own evidence. Do not describe a rebuild as promotion of the previously tested bytes. The alternative may be correct engineering, but it changes the question and the result.
Preserve access to the selected artifact for the intended interval. A digest without obtainable bytes is not a usable delivery path. Retention and distribution permissions remain real operating conditions, not properties conferred by the identifier.
SYSE.32:4.3 - Transfer and verify the subject at the relying boundary
Determine where substitution can occur between the earlier check and the next use. Check the actual artifact delivered at the boundary where reliance is made, or establish a controlled chain that preserves both identity and the applicability of the earlier result. SYSE.28 helps place that control.
A failed transfer, incomplete download or digest mismatch prevents reliance on the earlier artifact evidence. Preserve the expected identity and inspect the actual result; do not repair the mismatch by silently changing the expectation to match the received package.
A matching digest establishes identity relative to the expected digest and its trust basis. It does not establish that the original artifact was correct, non-malicious or fit for this target. Keep those claims separate.
SYSE.32:4.4 - Apply the exact authenticity Method when that claim is required
Use SLSA v1.2, Verifying artifacts with the consumer’s configured trust roots and expectations. Its operative verification includes the signature, the actual artifact’s correspondence to the provenance subject, the expected provenance type, and the recognized builder’s trust basis. Compare the claimed build with the expected builder, canonical source, build type and external parameters; a valid signature alone is insufficient.
Supply those expectations through the actual authorized trust arrangement. Unknown or unexpected parameters require the source Method’s explicit disposition, not silent acceptance. Use a verifier qualified for the deployed formats and trust system.
Distinguish missing provenance, invalid verification, an unexpected but correctly signed build, and unavailable verification. Each may require a different investigation or authorized exception decision, but none establishes the missing trust claim. If an authorized holder permits a bounded use without that assurance, retain the limitation and its scope.
SYSE.32:4.5 - Return a usable, bounded promotion basis
Make the selected artifact available with its identity, applicable evidence, separately identified configuration requirements, and unresolved conditions. Use the existing delivery mechanism or working record; a new document is not required when those facts are already available to the consumer.
Exercise at least the consequential substitution and missing-evidence cases for the chosen mechanism. Check that the consumer obtains the intended bytes and can distinguish failure from a completed verification. Reuse an earlier result only while its subject, required claim and material conditions remain the same.
Hand the result to SYSE.41 when an actual runtime deployment is needed. The deployment must still establish the target’s effective configuration, dependencies and observed behavior. SYSE.14 supplies the separately authorized release decision; artifact promotion does not widen exposure by itself.
SYSE.32:5 - Archetypal Grounding
In a constructed ParcelWorks example, integrated source revision r17 produces artifact h1. The labels h1 and h2 stand for distinct artifact digests, not actual cryptographic values. The address-transformation tests exercised h1 under their stated conditions. A staging job later rebuilds r17 and obtains h2 because a build input changed.
The team wants to move the tested software to a candidate runtime. Its immediate question is whether the selected artifact carries the required evidence, not whether that runtime is already usable.
| Candidate situation | What is established | Next action |
|---|---|---|
| The consumer receives h1, and the required results concern h1 under applicable conditions. | Identity and those stated evidence relationships are preserved. | Return the artifact basis; deploy and test the target separately. |
| The consumer receives h2 with h1’s test result. | The source label matches, but the tested artifact does not. | Select h1 or qualify h2 as a new candidate. |
| Provenance names h1 while the consumer receives h2. | Artifact/provenance correspondence fails. | Stop the dependent authenticity claim and inspect the mismatch. |
| Provenance is correctly signed but names an unexpected builder or source. | Signature validity does not meet the consumer’s expectation. | Resolve the unexpected origin through the configured trust decision. |
| The verifier is unavailable. | Verification has not been observed. | Restore verification or obtain an explicit bounded exception; do not report a pass. |
For the normal branch, the consumer obtains the retained h1 bytes through the supported artifact store. The expected identity comes from the qualified build/evidence result, not merely from the same mutable label used for downloading. The consumer verifies the required identity and authenticity conditions. Destination configuration c2 remains separate and has not yet been exercised in a runtime.
The resulting statement is narrow: h1 is available with the named applicable evidence for the intended next use. SYSE.41 must still install h1 with c2, observe the actual target state and perform the bounded deployment test. An application-form defect not covered by the earlier tests remains possible.
In the adverse branch, the staging system insists on rebuilding. The team can either change that delivery mechanism to consume retained h1 or explicitly qualify h2. It cannot retain the claim of unchanged-artifact promotion while taking the second route. If the old artifact is no longer retrievable, the first route is unavailable even though its digest and logs remain.
A second supplier signs a package with a valid key, but the supplied build uses an unapproved source location. Automatic acceptance based only on signature success would admit the wrong origin. The consumer rejects this build for its unapproved source despite the valid signature.
What changes in practice is that a test result follows the artifact it actually exercised, while installation, target configuration, authenticity and release remain separately answerable questions.
SYSE.32:6 - Bias-Annotation
Teams can mistake familiar version names, a green pipeline or a prestigious builder label for evidence. Consumer trust expectations can also be so broad that verification accepts nearly anything the supplier signs. Inspect the consequential mismatch cases and the origin of the expectation, not only the success path.
SYSE.32:7 - Conformance Checklist
- The artifact identity covers the actual bytes or object form used by the consumer.
- Relied-on evidence concerns that artifact and remains applicable to the intended claim.
- Destination configuration is separate, or a changed artifact is openly treated as a new candidate.
- Transfer does not silently rebuild, substitute or relabel the result.
- Required authenticity uses configured trust and artifact/provenance correspondence, not signature success alone.
- Missing, invalid, unexpected and unavailable results remain distinguishable.
- The promotion basis does not claim actual runtime usability or release permission.
SYSE.32:8 - Common Anti-Patterns and How to Avoid Them
| Misuse | Repair |
|---|---|
| Rebuild the same source in every stage and reuse the first test result. | Carry the tested artifact, or qualify each different output on its own basis. |
| Compare two mutable labels. | Compare the actual artifact against a qualified expected identity. |
| Accept any correctly signed provenance. | Apply the consumer’s expected origin, build and trust conditions as well. |
| Treat a missing verifier result as a successful control. | Expose the missing assurance and its dependent stop or authorized limitation. |
SYSE.32:9 - Consequences
The pattern reduces unnoticed substitution and avoids unnecessary rebuilding between environments. It requires artifact retention, evidence attribution and maintained trust expectations. It can expose that an apparently convenient delivery mechanism changes the candidate at every stage; repairing that mechanism or qualifying each output costs work.
SYSE.32:10 - Rationale
Evidence travels through a valid subject-and-condition relationship, not through a shared label. Preserving the artifact makes that relationship easier to maintain. Separating destination configuration and actual deployment prevents a successful storage operation from standing in for an observed running System.
SYSE.32:11 - SoTA-Echoing
For “What must a consumer verify before trusting the promoted artifact?”, adopt the bounded procedure in SLSA v1.2 Verifying artifacts. Reject signature-only acceptance: section 4.4 binds the check to actual bytes and configured expectations. This requires trust maintenance and still does not prove application correctness.
For transfer, adapt the same-artifact line in DORA Deployment automation. The competing convenience is rebuilding per environment. Separating artifact and configuration preserves the tested subject; destinations that truly require different bytes must qualify those outputs instead.
Reopen the arrangement when packaging, consumer boundaries, trust roots, builder identity, artifact retention or the relied-on evidence conditions change. A new source version or a security event may require reassessment; an old valid signature is not perpetual permission to use an artifact.
SYSE.32:12 - Relations
SYSE.30 supplies the build result and its inputs; SYSE.31 supplies engineering feedback. SYSE.13 identifies the artifact/configuration combination, and SYSE.28 places controls at the relying boundary. SYSE.41 consumes the promotion basis to construct an actual deployed runtime. SYSE.4 governs evidence reliance, and SYSE.14 governs release.
SYSE.32:End
SYSE.33 - Provide Reconstructible Software Development and Test Environments
Normativity: Guidance within the stated software-engineering use; examples are illustrative.
SYSE.33:1 - Problem frame
Use this pattern when development or a test works only on one prepared machine, fails because of shared mutable state, or cannot be repeated after an environment is lost. Start with the named task and the conditions it needs, including the resources, dependencies, data and access that must actually be available.
The first result is an environment that can be created and exercised for that task, with its applicable conditions and limits. If a required resource, permission or data source is unavailable, return the reconstructible description and the precise missing result; do not call that a usable environment.
An already adequate environment does not need a new provisioning architecture merely because another tool is fashionable. Exact identity of every incidental machine property is unnecessary unless the task depends on it. This pattern concerns software development and test conditions, not the complete qualification of a physical laboratory or production process.
SYSE.33:2 - Problem
A setup instruction can omit the package installed months ago, a manually altered service, a local credential or a shared fixture. Copying the machine then reproduces some of its history without explaining which conditions the task requires.
Infrastructure descriptions solve only part of the problem. A declared database is not its retained contents, a secret reference is not granted access, and a running machine is not evidence that the intended test can execute. Partial creation and configuration drift make these distinctions consequential.
SYSE.33:3 - Forces
| Force | Practical tension |
|---|---|
| Fidelity and cost | A task needs representative conditions, not an unnecessarily expensive copy of every production component. |
| Isolation and cooperation | Independent attempts avoid interference while some integration questions require controlled shared dependencies. |
| Reconstruction and state | Replaceable infrastructure can be recreated; persistent information needs a separate retention and restoration basis. |
| Automation and authority | A mechanism may know the desired state without permission or capacity to produce it. |
SYSE.33:4 - Solution
SYSE.33:4.1 - Define the environment for its task
Name the task, the software/configuration it exercises, its relevant dependencies, and the observations that will establish readiness for that use. Distinguish a local editing environment, a build worker, an integration test environment and a deployment target when their requirements differ.
Recover the current working conditions from a representative attempt. Identify the runtime and toolchain, resolved packages or images, network/service dependencies, resource needs, test data and access references. Separate relevant constraints from incidental machine history. Return unknown conditions that could change the test’s meaning rather than assuming the current machine is authoritative.
Choose an equivalence criterion appropriate to the use. A behavior test may require the same database semantics and fixture content without requiring the same machine identifier. A timing claim may require additional resource and load conditions. An environment suitable for the first task is not automatically suitable for the second.
SYSE.33:4.2 - Separate description, provision and information
Keep the desired configuration under a retrievable versioned identity together with the supported creation or reconciliation procedure. Name actual resources independently so that their current state can be observed and their ownership established.
Distinguish replaceable resources, persistent state, disposable fixtures and credentials. Use synthetic data or data explicitly permitted for this task. Supply credentials through the authorized access mechanism; a reference can be retained without exposing the secret itself.
Decide which information may be discarded, which must be retained, and what a reconstruction is expected to restore. If continued use depends on preserved data, obtain the relevant recovery result through SYSE.34 or the qualified storage Method. Recreating an empty database does not satisfy a promise to restore its former contents.
SYSE.33:4.3 - Choose a creation and change mechanism
Compare a controlled push procedure with a pull-and-reconcile arrangement for the actual resources and operating conditions. A push procedure can be adequate for a bounded short-lived test environment. Continuous reconciliation may help where drift and continuing desired state are material. Neither choice removes the need to observe the resulting environment.
The OpenGitOps v1.0.0 principles supply a specific line: versioned declarative desired state, automatic retrieval and continuing attempts to reconcile observed state. Use it where those conditions fit. Do not infer successful convergence from a committed declaration or an agent’s presence.
For either mechanism, define the operation’s bounded target, permitted changes and behavior after partial completion. Know how to identify resources already created by an attempt. Repeat a step only when its replay behavior is qualified; a repeated creation request must not silently create a second independently chargeable or stateful resource.
SYSE.33:4.4 - Provide isolation, lifetime and assistance
Give each independent attempt enough isolation to protect the meaning of its work. This may concern files, database rows, queues, network names or whole resources. Shared use is possible when the interference conditions are understood and controlled.
Set an appropriate lifetime and an actual holder for maintenance, assistance and disposition of retained information. A temporary environment must not disappear in the middle of promised work merely because a default expiry was reached. Conversely, indefinite retention of unused environments consumes resources and can preserve unnecessary access.
Limit cleanup to the resources and data actually owned by that environment and authorized for removal. If ownership or retained-data consequences are uncertain, return the uncertainty before deleting. A broad naming convention alone is not proof that every matching resource belongs to the current attempt.
SYSE.33:4.5 - Exercise clean creation, change and partial failure
Create an environment from the retained description without relying on the original machine’s hidden setup. Observe the actual resources, effective configuration and dependency reachability, then run the representative task. A successful provisioning job without the task result establishes less.
Change one relevant configuration and verify both the intended new condition and the continuing task. If a manual intervention was needed, either make its necessary effect part of the supported procedure or identify the still-manual dependency. Do not let a reconciler and an unrecorded repair repeatedly undo each other.
Exercise a consequential partial-creation failure. Recover the actual effects before retrying, then reconcile, remove or retain them under the applicable permissions and data conditions. An unavailable observation leaves partial state unknown; it does not mean nothing was created.
Return the description/procedure, actual exercised environment, supported task and conditions, lifetime/support arrangement, and any remaining gap. Existing configuration and operating records can carry these facts; the pattern does not require a new inventory system.
SYSE.33:5 - Archetypal Grounding
In a constructed ParcelWorks example, address-service tests pass on a developer’s machine but fail on a shared worker. Two causes are suspected: an unrecorded runtime version and tests that overwrite the same address row.
The team defines a bounded integration-test environment t7. Its description identifies the application artifact, runtime image, compatible database version, required text-handling settings, synthetic address fixtures and authorized test-service access reference. Each independent attempt gets its own fixture namespace. Production data and production credentials are outside this environment’s permission.
For the normal construction, the provisioner creates the named resources and loads the synthetic fixtures. The test reads and changes an address containing a line separator, then checks the exact resulting display text. The team observes the effective runtime/database conditions rather than assuming that the description was applied. A fresh t8 can exercise the same task without copying the developer’s home directory or t7’s mutable fixture state.
The relevant equivalence is the qualified behavior and conditions, not equality of t7 and t8’s resource identifiers. A later performance claim would need a new qualification of capacity and load; this successful functional test does not supply it.
The team next changes the configured test-service endpoint from one authorized sandbox to another. The environment’s effective configuration and dependency test must reflect the new endpoint. If the desired file changes but the running process retains the old value, the change is not complete.
| Adverse observation | Correct interpretation | Bounded response |
|---|---|---|
| Creation times out; lookup finds the worker but no database. | The attempt partially took effect. | Reuse the identified worker and create the missing database only under qualified replay conditions. |
| Lookup itself is unavailable. | Resource state is unknown. | Restore observation or obtain assistance before another potentially duplicating creation. |
| The database exists but the fixture-loading permission is absent. | Infrastructure exists; the test environment is not usable for its named task. | Return the exact permission gap. |
| A declaration requests the new endpoint, but the process uses the old one. | Desired and actual state differ. | Repair the application/reconciliation step and re-exercise the dependency. |
| An old test database contains retained results needed by a user. | “Temporary” does not establish permission to discard those results. | Resolve their disposition before cleanup. |
For this short-lived use, the team selects a controlled creation procedure with explicit observation rather than installing a permanent reconciliation service. Another environment with continuing drift could reasonably make the other choice. The test’s result, failure recovery and data limits govern that decision.
What changes in practice is that the next person can construct and exercise the required conditions, or see the exact missing prerequisite, without inheriting an unexplained machine.
SYSE.33:6 - Bias-Annotation
A familiar workstation can become an accidental standard, while a production-like environment can be assumed necessary for every task. Inspect which conditions actually affect the question. Automation can also make provision failures less visible by reporting success before access, fixture loading or a dependent service has been exercised.
SYSE.33:7 - Conformance Checklist
- The environment is defined for a named task and an appropriate equivalence criterion.
- Desired configuration, actual resources, persistent information and access are distinguished.
- Hidden setup is removed from the supported creation path or exposed as a remaining dependency.
- Isolation and shared-state conditions preserve the meaning of independent attempts.
- Clean creation, a relevant change and partial failure have usable responses.
- A real task result, not only provisioning completion, supports readiness for the stated use.
- Cleanup respects resource ownership, retained information and actual permission.
SYSE.33:8 - Common Anti-Patterns and How to Avoid Them
| Misuse | Repair |
|---|---|
| Clone the one working machine indefinitely. | Recover required conditions and exercise a clean construction. |
| Declare the environment in Git and report it ready. | Observe actual state and run the named task. |
| Treat infrastructure recreation as data restoration. | Obtain and exercise the separate information-recovery procedure. |
| Retry all creation after timeout. | Recover partial effects and repeat only qualified operations. |
SYSE.33:9 - Consequences
Reconstructible environments reduce hidden dependencies and make failures easier to compare. They require maintained descriptions, controlled fixture/access arrangements and attention to partial effects. Isolation can increase cost; excessive fidelity can slow feedback without improving the question being tested.
SYSE.33:10 - Rationale
An environment serves a task through actual conditions, not through a description alone. Separating desired state, observed provision and information retention makes both successful reconstruction and a precise missing prerequisite possible. The same separation prevents automation from overstating recovery.
SYSE.33:11 - SoTA-Echoing
For “How should intended environment state be maintained?”, adapt OpenGitOps v1.0.0 as the pull-and-reconcile alternative to controlled push. Compared with a procedure that ends after issuing provisioning changes, it adds continuing observation and reconciliation. Section 4.3 retains that choice but requires actual convergence and task evidence; continuous agents add operating responsibility and are not universally necessary.
For reconstructible deployment conditions, adapt DORA Deployment automation. Its versioned procedure/configuration line displaces hidden machine setup. Sections 4.2 and 4.5 qualify the restoration claim: infrastructure, retained data and access each need their own actual result.
Reopen the environment when dependencies, provider behavior, data permissions, supported tasks or relevant fidelity requirements change. A passing historical fixture does not qualify a newly different environment or a performance claim it never exercised.
SYSE.33:12 - Relations
SYSE.26 supplies the supported practitioner path, SYSE.30 supplies recoverable builds, and SYSE.31 consumes credible test conditions. SYSE.13 identifies configuration; SYSE.34 supplies persistent-data compatibility and recovery. SYSE.41 performs the actual application deployment when that is the missing result. SYSE.29 governs migration or retirement of an environment path.
SYSE.33:End
SYSE.34 - Change Software and Persistent Data with a Recovery Boundary
Normativity: Guidance within the stated software-and-data change use; examples are illustrative.
SYSE.34:1 - Problem frame
Use this pattern when a software change can alter stored information, its interpretation, or which old and new consumers can use it. Start with the values that must survive, the permitted writers and readers, and the point at which a previous executable would cease to understand the resulting state.
The first result is a bounded change-and-recovery procedure: compatible states, the selected write/synchronization mechanism, validation, the irreversible boundary, operating limits and the actual decision holder. If a required data fact, database-specific Method or permission is missing, return that precise gap.
Do not undertake a migration merely because an executable changes. An unchanged data contract may need only a compatibility check. Conversely, a schema that looks unchanged can conceal a changed meaning. This pattern does not provide a universal database algorithm or promise zero downtime.
SYSE.34:2 - Problem
“Add fields, copy data, switch readers” leaves important work unspecified. Old writers may continue changing the original representation after a copy. Two new authorities can disagree. A retried backfill may overwrite a legitimate later write with a cached earlier value.
Returning the old executable is not enough when the new software has removed information or written values the old software cannot interpret. Even a successful database restore can omit later business events or repeat external effects. Recovery needs a real state boundary, not only a rollback button.
SYSE.34:3 - Forces
| Force | Practical tension |
|---|---|
| Continuing service and simple change | Coexistence reduces coordinated interruption but adds compatibility and synchronization work. |
| New meaning and reversibility | A richer representation can improve use while making an exact return impossible. |
| Bounded migration and concurrency | Small batches control load; concurrent writes still need an explicit ordering rule. |
| Technical recovery and acceptable loss | A restore mechanism can work while its time or information loss remains unacceptable to the people relying on the service. |
SYSE.34:4 - Solution
SYSE.34:4.1 - Recover meaning, consumers and authority
Describe the old and proposed values using the application’s meaning, including null, empty, ordering, precision and identity distinctions that matter. Define a correspondence and any inverse. Identify inputs that cannot be represented or carried back without loss; do not hide them behind a convenient conversion.
Find every relevant writer and reader, including jobs, imports, replicas, recovery tools and infrequent clients. Recover the actual database/storage edition, constraints, triggers, isolation and permission conditions that the procedure will use.
Obtain the required meaning and acceptance limits from their holders. The platform can support the mechanism without deciding which information may be lost or how long the business can operate without the service.