chrismdp / systems / factory
The AWML factory
How an issue on chrismdp/awml becomes a merged pull request. A maintainer labels an issue build; Claude drafts the change, the checks run, two fresh sessions review it for bugs and security, and a classifier weighs its risk before the pull request opens. Every pull request from the repository's own people is then reviewed again as GitHub checks, and a failed review is fixed by another session, which adds a commit. Once CI has run, a rule merges a straightforward change or asks for review. A failed try starts the build again, up to three times.
AWML checks each workflow you can see in this system, given together with the others at their latest versions, so a copy of a part that disagrees with the part it refers to is found. Here is each check it ran on each workflow, in the order its spec gives them.
chrismdp/issue-to-pull-request.yaml
Checked by AWML v0.8.0
- The file is YAML
file.yamlPassedEach file can be read, and holds a YAML mapping of fields.
- The file is of the version this release reads
file.versionPassedawml is "0.8". An older file is upgraded with awml convert.
- Every field is known and none is missing
fields.knownPassedEach file, scope, part, line, implementation, block and comment has the fields it needs and no others, and each list is a list of mappings.
- Every kind is known
kinds.knownPassedEach part and line has a kind the spec defines.
- No id is used twice
ids.uniquePassedScope, part, block and comment ids are unique across the file.
- Every id is well written
ids.writtenPassedAn id is letters, digits and underscores, starting with a letter, and a block's platform is a company id or owner/platforms/slug.
- Every value that should be text is text
values.textPassedIds, labels, kinds and references are text, not something YAML read as true, false, a number or a date.
- Every reference names something in the file
references.knownPassedEach in, from and to, each part a block names and each part a comment ties names a scope, block or part the file has.
- No scope or block is nested in itself
nesting.acyclicPassedFollowing in from any scope or block never leads back to it.
- A comment is linked only by tie lines
comments.tie-onlyPassedA comment moves nothing, so only a tie, or a hidden line, may touch it.
- Every tie has a comment at one end
ties.commentPassedA tie links a comment to what it explains, so one of its ends is a comment.
- No line goes into a trigger
triggers.no-line-inPassedA trigger only starts its own workflow, so no line but a tie or a hidden one goes into it. A workflow starts another with an outside action whose ref names the other's trigger.
- Every op is known and on a step
ops.knownPassedAn op is one of the operations the spec lists, on an ai, code or person step.
- Only a do step leads to an outside action
operations.only-do-actsPassedA step that leads to an outside action, straight or through a review or a standing approval, is a do step.
- An answer or check step never writes to a context
operations.answer-check-read-onlyPassedAn answer step and a check step read contexts and speak on surfaces, but never write to a context.
- Every outside action's label ends with its tier
tiers.writtenPassedAn outside action's label ends with Allow, Ask or Block after a colon.
- Every tier agrees with what stands in front of it
tiers.shapePassedAn Ask action has a review, a standing approval or a person's own step on every way in, an Allow action has no review or standing approval in front of it, and only red lines lead to a Block action.
- Every standing approval lists its actions on a surface
approvals.listedPassedA standing approval leads to the surface where each action it covers is listed.
- Every processing is well written
processing.writtenPassedA scope's processing is any, none, or a map from company ids to any or a list of known operations.
- An inner scope allows no more processing than its outer one
processing.nestedPassedA scope inside another allows no company or operation that the outer scope doesn't.
- Only a block takes a platform
platform.blocks-onlyPassedplatform belongs to a block of an implementation, never to a scope.
- Every wait is a duration on a trigger
wait.durationPassedwait is an ISO 8601 duration in weeks, days, hours, minutes or seconds, given only on a trigger.
- Every at is a path on a context
at.pathPassedat is a relative path of plain names, given only on a context.
- Only a trigger, connector or context is marked untrusted
untrusted.partsPasseduntrusted is true or false, and is true only on a trigger, connector or context.
- Only a code step cleans
cleans.code-onlyPassedcleans is true or false, and is true only on a code step, since strangers' text can steer an AI step however it's written.
- No untrusted text reaches an outside action unstopped
untrusted.outsidePassedText from a part marked untrusted reaches an outside action only past a review, a person's own step or a code step marked cleans, which stops it, or through a standing approval in front of the action, which accepts the risk. Workflows given together are followed through the parts they share and the workflows they start.
- Every ref is well written
refs.writtenPassedA ref is owner/slug#id for a published workflow, or a path to a file alongside, ending .yaml, then # and the part's id.
- Only a context, connector, surface or outside action takes a ref
refs.partsPassedWorkflows share the contexts, connectors and surfaces both reach, and an outside action names the trigger of the workflow it starts. A trigger belongs to the workflow it starts, so it never refers.
- No part is placed twice in an implementation
placement.oncePassedEach part sits in at most one block of each implementation.
- Every part that needs a block has one
placement.completePassedEvery part but a trigger or comment sits in a block of each implementation.
- Every ref names a part of the workflow it refers to
refs.knownPassedA ref to a workflow given with it names a part that workflow has. A ref to a workflow not given is left alone.
- Every copy agrees with the part it refers to
refs.agreePassedA context, connector or surface that refers to another workflow's has the same kind, label and at, and a scope with the same people and terms.
- Every outside action's ref names a trigger
refs.startsPassedAn outside action that refers to a workflow given with it names that workflow's trigger, which it starts.
- Every shared part has one owner
refs.ownerPassedA ref names a part of another workflow, never its own, and following refs from any copy ends at the one that owns the part, rather than going round in a circle.
- No do step is decided by AI
warn.do-by-codePassedA do step should be code acting on what an earlier step decided; this warns and never fails.
- Each do step makes one change
warn.one-changePassedA do step should lead to one change, counting each outside action and surface and all contexts together as one; this warns and never fails.
- The file holds one workflow
warn.several-workflowsPassedA trigger's run is every part its start lines reach, and triggers whose runs share a part are one workflow, so triggers in more than one group mean the file should be split at its triggers; this warns and never fails.
- Every part is linked to a trigger
warn.unlinked-partPassedFollowing lines either way from the triggers, leaving out comments and their ties, reaches every part; this warns and never fails.
- Every comment is tied to a part
warn.untied-commentPassedA comment explains what it is tied to, so each has a tie; this warns and never fails.
- Every step is started by a trigger
warn.unstarted-stepPassedEach step, review and standing approval is in some trigger's run, the parts its start lines reach; this warns and never fails.
- No context is written by more than one workflow
warn.shared-writersPassedA context that workflows given together share is written by only one of them, since each may change what another relies on; this warns and never fails.
- No connector is read by more than one workflow
warn.shared-readers1 warningA connector that workflows given together share brings items in for only one of them, since each may take an item another expects; this warns and never fails.
Warnings don't fail the check.
- connector "token" is read by chrismdp/issue-to-pull-request.yaml, chrismdp/land-a-pull-request.yaml, chrismdp/retry-a-build.yaml, chrismdp/review-a-pull-request.yaml and chrismdp/fix-review-findings.yaml: each may take an item another expects
- Every platform description value is of the right kind
description.valuesSkippedplatform is a mapping, off_for_up_to a duration, steps code or agent, agents and calls lists of company ids, and holds a list.
Skipped because no file given is a platform description.
- Every company id and path is well written
description.idsSkippedA platform description's id is a company id or owner/platforms/slug, its company ids are lower-case letters, digits and hyphens, and what it holds are relative paths.
Skipped because no file given is a platform description.
chrismdp/land-a-pull-request.yaml
Checked by AWML v0.8.0
- The file is YAML
file.yamlPassedEach file can be read, and holds a YAML mapping of fields.
- The file is of the version this release reads
file.versionPassedawml is "0.8". An older file is upgraded with awml convert.
- Every field is known and none is missing
fields.knownPassedEach file, scope, part, line, implementation, block and comment has the fields it needs and no others, and each list is a list of mappings.
- Every kind is known
kinds.knownPassedEach part and line has a kind the spec defines.
- No id is used twice
ids.uniquePassedScope, part, block and comment ids are unique across the file.
- Every id is well written
ids.writtenPassedAn id is letters, digits and underscores, starting with a letter, and a block's platform is a company id or owner/platforms/slug.
- Every value that should be text is text
values.textPassedIds, labels, kinds and references are text, not something YAML read as true, false, a number or a date.
- Every reference names something in the file
references.knownPassedEach in, from and to, each part a block names and each part a comment ties names a scope, block or part the file has.
- No scope or block is nested in itself
nesting.acyclicPassedFollowing in from any scope or block never leads back to it.
- A comment is linked only by tie lines
comments.tie-onlyPassedA comment moves nothing, so only a tie, or a hidden line, may touch it.
- Every tie has a comment at one end
ties.commentPassedA tie links a comment to what it explains, so one of its ends is a comment.
- No line goes into a trigger
triggers.no-line-inPassedA trigger only starts its own workflow, so no line but a tie or a hidden one goes into it. A workflow starts another with an outside action whose ref names the other's trigger.
- Every op is known and on a step
ops.knownPassedAn op is one of the operations the spec lists, on an ai, code or person step.
- Only a do step leads to an outside action
operations.only-do-actsPassedA step that leads to an outside action, straight or through a review or a standing approval, is a do step.
- An answer or check step never writes to a context
operations.answer-check-read-onlyPassedAn answer step and a check step read contexts and speak on surfaces, but never write to a context.
- Every outside action's label ends with its tier
tiers.writtenPassedAn outside action's label ends with Allow, Ask or Block after a colon.
- Every tier agrees with what stands in front of it
tiers.shapePassedAn Ask action has a review, a standing approval or a person's own step on every way in, an Allow action has no review or standing approval in front of it, and only red lines lead to a Block action.
- Every standing approval lists its actions on a surface
approvals.listedPassedA standing approval leads to the surface where each action it covers is listed.
- Every processing is well written
processing.writtenPassedA scope's processing is any, none, or a map from company ids to any or a list of known operations.
- An inner scope allows no more processing than its outer one
processing.nestedPassedA scope inside another allows no company or operation that the outer scope doesn't.
- Only a block takes a platform
platform.blocks-onlyPassedplatform belongs to a block of an implementation, never to a scope.
- Every wait is a duration on a trigger
wait.durationPassedwait is an ISO 8601 duration in weeks, days, hours, minutes or seconds, given only on a trigger.
- Every at is a path on a context
at.pathPassedat is a relative path of plain names, given only on a context.
- Only a trigger, connector or context is marked untrusted
untrusted.partsPasseduntrusted is true or false, and is true only on a trigger, connector or context.
- Only a code step cleans
cleans.code-onlyPassedcleans is true or false, and is true only on a code step, since strangers' text can steer an AI step however it's written.
- No untrusted text reaches an outside action unstopped
untrusted.outsidePassedText from a part marked untrusted reaches an outside action only past a review, a person's own step or a code step marked cleans, which stops it, or through a standing approval in front of the action, which accepts the risk. Workflows given together are followed through the parts they share and the workflows they start.
- Every ref is well written
refs.writtenPassedA ref is owner/slug#id for a published workflow, or a path to a file alongside, ending .yaml, then # and the part's id.
- Only a context, connector, surface or outside action takes a ref
refs.partsPassedWorkflows share the contexts, connectors and surfaces both reach, and an outside action names the trigger of the workflow it starts. A trigger belongs to the workflow it starts, so it never refers.
- No part is placed twice in an implementation
placement.oncePassedEach part sits in at most one block of each implementation.
- Every part that needs a block has one
placement.completePassedEvery part but a trigger or comment sits in a block of each implementation.
- Every ref names a part of the workflow it refers to
refs.knownPassedA ref to a workflow given with it names a part that workflow has. A ref to a workflow not given is left alone.
- Every copy agrees with the part it refers to
refs.agreePassedA context, connector or surface that refers to another workflow's has the same kind, label and at, and a scope with the same people and terms.
- Every outside action's ref names a trigger
refs.startsPassedAn outside action that refers to a workflow given with it names that workflow's trigger, which it starts.
- Every shared part has one owner
refs.ownerPassedA ref names a part of another workflow, never its own, and following refs from any copy ends at the one that owns the part, rather than going round in a circle.
- No do step is decided by AI
warn.do-by-codePassedA do step should be code acting on what an earlier step decided; this warns and never fails.
- Each do step makes one change
warn.one-changePassedA do step should lead to one change, counting each outside action and surface and all contexts together as one; this warns and never fails.
- The file holds one workflow
warn.several-workflowsPassedA trigger's run is every part its start lines reach, and triggers whose runs share a part are one workflow, so triggers in more than one group mean the file should be split at its triggers; this warns and never fails.
- Every part is linked to a trigger
warn.unlinked-partPassedFollowing lines either way from the triggers, leaving out comments and their ties, reaches every part; this warns and never fails.
- Every comment is tied to a part
warn.untied-commentPassedA comment explains what it is tied to, so each has a tie; this warns and never fails.
- Every step is started by a trigger
warn.unstarted-stepPassedEach step, review and standing approval is in some trigger's run, the parts its start lines reach; this warns and never fails.
- No context is written by more than one workflow
warn.shared-writersPassedA context that workflows given together share is written by only one of them, since each may change what another relies on; this warns and never fails.
- No connector is read by more than one workflow
warn.shared-readersPassedA connector that workflows given together share brings items in for only one of them, since each may take an item another expects; this warns and never fails.
- Every platform description value is of the right kind
description.valuesSkippedplatform is a mapping, off_for_up_to a duration, steps code or agent, agents and calls lists of company ids, and holds a list.
Skipped because no file given is a platform description.
- Every company id and path is well written
description.idsSkippedA platform description's id is a company id or owner/platforms/slug, its company ids are lower-case letters, digits and hyphens, and what it holds are relative paths.
Skipped because no file given is a platform description.
chrismdp/retry-a-build.yaml
Checked by AWML v0.8.0
- The file is YAML
file.yamlPassedEach file can be read, and holds a YAML mapping of fields.
- The file is of the version this release reads
file.versionPassedawml is "0.8". An older file is upgraded with awml convert.
- Every field is known and none is missing
fields.knownPassedEach file, scope, part, line, implementation, block and comment has the fields it needs and no others, and each list is a list of mappings.
- Every kind is known
kinds.knownPassedEach part and line has a kind the spec defines.
- No id is used twice
ids.uniquePassedScope, part, block and comment ids are unique across the file.
- Every id is well written
ids.writtenPassedAn id is letters, digits and underscores, starting with a letter, and a block's platform is a company id or owner/platforms/slug.
- Every value that should be text is text
values.textPassedIds, labels, kinds and references are text, not something YAML read as true, false, a number or a date.
- Every reference names something in the file
references.knownPassedEach in, from and to, each part a block names and each part a comment ties names a scope, block or part the file has.
- No scope or block is nested in itself
nesting.acyclicPassedFollowing in from any scope or block never leads back to it.
- A comment is linked only by tie lines
comments.tie-onlyPassedA comment moves nothing, so only a tie, or a hidden line, may touch it.
- Every tie has a comment at one end
ties.commentPassedA tie links a comment to what it explains, so one of its ends is a comment.
- No line goes into a trigger
triggers.no-line-inPassedA trigger only starts its own workflow, so no line but a tie or a hidden one goes into it. A workflow starts another with an outside action whose ref names the other's trigger.
- Every op is known and on a step
ops.knownPassedAn op is one of the operations the spec lists, on an ai, code or person step.
- Only a do step leads to an outside action
operations.only-do-actsPassedA step that leads to an outside action, straight or through a review or a standing approval, is a do step.
- An answer or check step never writes to a context
operations.answer-check-read-onlyPassedAn answer step and a check step read contexts and speak on surfaces, but never write to a context.
- Every outside action's label ends with its tier
tiers.writtenPassedAn outside action's label ends with Allow, Ask or Block after a colon.
- Every tier agrees with what stands in front of it
tiers.shapePassedAn Ask action has a review, a standing approval or a person's own step on every way in, an Allow action has no review or standing approval in front of it, and only red lines lead to a Block action.
- Every standing approval lists its actions on a surface
approvals.listedPassedA standing approval leads to the surface where each action it covers is listed.
- Every processing is well written
processing.writtenPassedA scope's processing is any, none, or a map from company ids to any or a list of known operations.
- An inner scope allows no more processing than its outer one
processing.nestedPassedA scope inside another allows no company or operation that the outer scope doesn't.
- Only a block takes a platform
platform.blocks-onlyPassedplatform belongs to a block of an implementation, never to a scope.
- Every wait is a duration on a trigger
wait.durationPassedwait is an ISO 8601 duration in weeks, days, hours, minutes or seconds, given only on a trigger.
- Every at is a path on a context
at.pathPassedat is a relative path of plain names, given only on a context.
- Only a trigger, connector or context is marked untrusted
untrusted.partsPasseduntrusted is true or false, and is true only on a trigger, connector or context.
- Only a code step cleans
cleans.code-onlyPassedcleans is true or false, and is true only on a code step, since strangers' text can steer an AI step however it's written.
- No untrusted text reaches an outside action unstopped
untrusted.outsidePassedText from a part marked untrusted reaches an outside action only past a review, a person's own step or a code step marked cleans, which stops it, or through a standing approval in front of the action, which accepts the risk. Workflows given together are followed through the parts they share and the workflows they start.
- Every ref is well written
refs.writtenPassedA ref is owner/slug#id for a published workflow, or a path to a file alongside, ending .yaml, then # and the part's id.
- Only a context, connector, surface or outside action takes a ref
refs.partsPassedWorkflows share the contexts, connectors and surfaces both reach, and an outside action names the trigger of the workflow it starts. A trigger belongs to the workflow it starts, so it never refers.
- No part is placed twice in an implementation
placement.oncePassedEach part sits in at most one block of each implementation.
- Every part that needs a block has one
placement.completePassedEvery part but a trigger or comment sits in a block of each implementation.
- Every ref names a part of the workflow it refers to
refs.knownPassedA ref to a workflow given with it names a part that workflow has. A ref to a workflow not given is left alone.
- Every copy agrees with the part it refers to
refs.agreePassedA context, connector or surface that refers to another workflow's has the same kind, label and at, and a scope with the same people and terms.
- Every outside action's ref names a trigger
refs.startsPassedAn outside action that refers to a workflow given with it names that workflow's trigger, which it starts.
- Every shared part has one owner
refs.ownerPassedA ref names a part of another workflow, never its own, and following refs from any copy ends at the one that owns the part, rather than going round in a circle.
- No do step is decided by AI
warn.do-by-codePassedA do step should be code acting on what an earlier step decided; this warns and never fails.
- Each do step makes one change
warn.one-changePassedA do step should lead to one change, counting each outside action and surface and all contexts together as one; this warns and never fails.
- The file holds one workflow
warn.several-workflowsPassedA trigger's run is every part its start lines reach, and triggers whose runs share a part are one workflow, so triggers in more than one group mean the file should be split at its triggers; this warns and never fails.
- Every part is linked to a trigger
warn.unlinked-partPassedFollowing lines either way from the triggers, leaving out comments and their ties, reaches every part; this warns and never fails.
- Every comment is tied to a part
warn.untied-commentPassedA comment explains what it is tied to, so each has a tie; this warns and never fails.
- Every step is started by a trigger
warn.unstarted-stepPassedEach step, review and standing approval is in some trigger's run, the parts its start lines reach; this warns and never fails.
- No context is written by more than one workflow
warn.shared-writersPassedA context that workflows given together share is written by only one of them, since each may change what another relies on; this warns and never fails.
- No connector is read by more than one workflow
warn.shared-readersPassedA connector that workflows given together share brings items in for only one of them, since each may take an item another expects; this warns and never fails.
- Every platform description value is of the right kind
description.valuesSkippedplatform is a mapping, off_for_up_to a duration, steps code or agent, agents and calls lists of company ids, and holds a list.
Skipped because no file given is a platform description.
- Every company id and path is well written
description.idsSkippedA platform description's id is a company id or owner/platforms/slug, its company ids are lower-case letters, digits and hyphens, and what it holds are relative paths.
Skipped because no file given is a platform description.
chrismdp/review-a-pull-request.yaml
Checked by AWML v0.8.0
- The file is YAML
file.yamlPassedEach file can be read, and holds a YAML mapping of fields.
- The file is of the version this release reads
file.versionPassedawml is "0.8". An older file is upgraded with awml convert.
- Every field is known and none is missing
fields.knownPassedEach file, scope, part, line, implementation, block and comment has the fields it needs and no others, and each list is a list of mappings.
- Every kind is known
kinds.knownPassedEach part and line has a kind the spec defines.
- No id is used twice
ids.uniquePassedScope, part, block and comment ids are unique across the file.
- Every id is well written
ids.writtenPassedAn id is letters, digits and underscores, starting with a letter, and a block's platform is a company id or owner/platforms/slug.
- Every value that should be text is text
values.textPassedIds, labels, kinds and references are text, not something YAML read as true, false, a number or a date.
- Every reference names something in the file
references.knownPassedEach in, from and to, each part a block names and each part a comment ties names a scope, block or part the file has.
- No scope or block is nested in itself
nesting.acyclicPassedFollowing in from any scope or block never leads back to it.
- A comment is linked only by tie lines
comments.tie-onlyPassedA comment moves nothing, so only a tie, or a hidden line, may touch it.
- Every tie has a comment at one end
ties.commentPassedA tie links a comment to what it explains, so one of its ends is a comment.
- No line goes into a trigger
triggers.no-line-inPassedA trigger only starts its own workflow, so no line but a tie or a hidden one goes into it. A workflow starts another with an outside action whose ref names the other's trigger.
- Every op is known and on a step
ops.knownPassedAn op is one of the operations the spec lists, on an ai, code or person step.
- Only a do step leads to an outside action
operations.only-do-actsPassedA step that leads to an outside action, straight or through a review or a standing approval, is a do step.
- An answer or check step never writes to a context
operations.answer-check-read-onlyPassedAn answer step and a check step read contexts and speak on surfaces, but never write to a context.
- Every outside action's label ends with its tier
tiers.writtenPassedAn outside action's label ends with Allow, Ask or Block after a colon.
- Every tier agrees with what stands in front of it
tiers.shapePassedAn Ask action has a review, a standing approval or a person's own step on every way in, an Allow action has no review or standing approval in front of it, and only red lines lead to a Block action.
- Every standing approval lists its actions on a surface
approvals.listedPassedA standing approval leads to the surface where each action it covers is listed.
- Every processing is well written
processing.writtenPassedA scope's processing is any, none, or a map from company ids to any or a list of known operations.
- An inner scope allows no more processing than its outer one
processing.nestedPassedA scope inside another allows no company or operation that the outer scope doesn't.
- Only a block takes a platform
platform.blocks-onlyPassedplatform belongs to a block of an implementation, never to a scope.
- Every wait is a duration on a trigger
wait.durationPassedwait is an ISO 8601 duration in weeks, days, hours, minutes or seconds, given only on a trigger.
- Every at is a path on a context
at.pathPassedat is a relative path of plain names, given only on a context.
- Only a trigger, connector or context is marked untrusted
untrusted.partsPasseduntrusted is true or false, and is true only on a trigger, connector or context.
- Only a code step cleans
cleans.code-onlyPassedcleans is true or false, and is true only on a code step, since strangers' text can steer an AI step however it's written.
- No untrusted text reaches an outside action unstopped
untrusted.outsidePassedText from a part marked untrusted reaches an outside action only past a review, a person's own step or a code step marked cleans, which stops it, or through a standing approval in front of the action, which accepts the risk. Workflows given together are followed through the parts they share and the workflows they start.
- Every ref is well written
refs.writtenPassedA ref is owner/slug#id for a published workflow, or a path to a file alongside, ending .yaml, then # and the part's id.
- Only a context, connector, surface or outside action takes a ref
refs.partsPassedWorkflows share the contexts, connectors and surfaces both reach, and an outside action names the trigger of the workflow it starts. A trigger belongs to the workflow it starts, so it never refers.
- No part is placed twice in an implementation
placement.oncePassedEach part sits in at most one block of each implementation.
- Every part that needs a block has one
placement.completePassedEvery part but a trigger or comment sits in a block of each implementation.
- Every ref names a part of the workflow it refers to
refs.knownPassedA ref to a workflow given with it names a part that workflow has. A ref to a workflow not given is left alone.
- Every copy agrees with the part it refers to
refs.agreePassedA context, connector or surface that refers to another workflow's has the same kind, label and at, and a scope with the same people and terms.
- Every outside action's ref names a trigger
refs.startsPassedAn outside action that refers to a workflow given with it names that workflow's trigger, which it starts.
- Every shared part has one owner
refs.ownerPassedA ref names a part of another workflow, never its own, and following refs from any copy ends at the one that owns the part, rather than going round in a circle.
- No do step is decided by AI
warn.do-by-codePassedA do step should be code acting on what an earlier step decided; this warns and never fails.
- Each do step makes one change
warn.one-changePassedA do step should lead to one change, counting each outside action and surface and all contexts together as one; this warns and never fails.
- The file holds one workflow
warn.several-workflowsPassedA trigger's run is every part its start lines reach, and triggers whose runs share a part are one workflow, so triggers in more than one group mean the file should be split at its triggers; this warns and never fails.
- Every part is linked to a trigger
warn.unlinked-partPassedFollowing lines either way from the triggers, leaving out comments and their ties, reaches every part; this warns and never fails.
- Every comment is tied to a part
warn.untied-commentPassedA comment explains what it is tied to, so each has a tie; this warns and never fails.
- Every step is started by a trigger
warn.unstarted-stepPassedEach step, review and standing approval is in some trigger's run, the parts its start lines reach; this warns and never fails.
- No context is written by more than one workflow
warn.shared-writersPassedA context that workflows given together share is written by only one of them, since each may change what another relies on; this warns and never fails.
- No connector is read by more than one workflow
warn.shared-readersPassedA connector that workflows given together share brings items in for only one of them, since each may take an item another expects; this warns and never fails.
- Every platform description value is of the right kind
description.valuesSkippedplatform is a mapping, off_for_up_to a duration, steps code or agent, agents and calls lists of company ids, and holds a list.
Skipped because no file given is a platform description.
- Every company id and path is well written
description.idsSkippedA platform description's id is a company id or owner/platforms/slug, its company ids are lower-case letters, digits and hyphens, and what it holds are relative paths.
Skipped because no file given is a platform description.
chrismdp/fix-review-findings.yaml
Checked by AWML v0.8.0
- The file is YAML
file.yamlPassedEach file can be read, and holds a YAML mapping of fields.
- The file is of the version this release reads
file.versionPassedawml is "0.8". An older file is upgraded with awml convert.
- Every field is known and none is missing
fields.knownPassedEach file, scope, part, line, implementation, block and comment has the fields it needs and no others, and each list is a list of mappings.
- Every kind is known
kinds.knownPassedEach part and line has a kind the spec defines.
- No id is used twice
ids.uniquePassedScope, part, block and comment ids are unique across the file.
- Every id is well written
ids.writtenPassedAn id is letters, digits and underscores, starting with a letter, and a block's platform is a company id or owner/platforms/slug.
- Every value that should be text is text
values.textPassedIds, labels, kinds and references are text, not something YAML read as true, false, a number or a date.
- Every reference names something in the file
references.knownPassedEach in, from and to, each part a block names and each part a comment ties names a scope, block or part the file has.
- No scope or block is nested in itself
nesting.acyclicPassedFollowing in from any scope or block never leads back to it.
- A comment is linked only by tie lines
comments.tie-onlyPassedA comment moves nothing, so only a tie, or a hidden line, may touch it.
- Every tie has a comment at one end
ties.commentPassedA tie links a comment to what it explains, so one of its ends is a comment.
- No line goes into a trigger
triggers.no-line-inPassedA trigger only starts its own workflow, so no line but a tie or a hidden one goes into it. A workflow starts another with an outside action whose ref names the other's trigger.
- Every op is known and on a step
ops.knownPassedAn op is one of the operations the spec lists, on an ai, code or person step.
- Only a do step leads to an outside action
operations.only-do-actsPassedA step that leads to an outside action, straight or through a review or a standing approval, is a do step.
- An answer or check step never writes to a context
operations.answer-check-read-onlyPassedAn answer step and a check step read contexts and speak on surfaces, but never write to a context.
- Every outside action's label ends with its tier
tiers.writtenPassedAn outside action's label ends with Allow, Ask or Block after a colon.
- Every tier agrees with what stands in front of it
tiers.shapePassedAn Ask action has a review, a standing approval or a person's own step on every way in, an Allow action has no review or standing approval in front of it, and only red lines lead to a Block action.
- Every standing approval lists its actions on a surface
approvals.listedPassedA standing approval leads to the surface where each action it covers is listed.
- Every processing is well written
processing.writtenPassedA scope's processing is any, none, or a map from company ids to any or a list of known operations.
- An inner scope allows no more processing than its outer one
processing.nestedPassedA scope inside another allows no company or operation that the outer scope doesn't.
- Only a block takes a platform
platform.blocks-onlyPassedplatform belongs to a block of an implementation, never to a scope.
- Every wait is a duration on a trigger
wait.durationPassedwait is an ISO 8601 duration in weeks, days, hours, minutes or seconds, given only on a trigger.
- Every at is a path on a context
at.pathPassedat is a relative path of plain names, given only on a context.
- Only a trigger, connector or context is marked untrusted
untrusted.partsPasseduntrusted is true or false, and is true only on a trigger, connector or context.
- Only a code step cleans
cleans.code-onlyPassedcleans is true or false, and is true only on a code step, since strangers' text can steer an AI step however it's written.
- No untrusted text reaches an outside action unstopped
untrusted.outsidePassedText from a part marked untrusted reaches an outside action only past a review, a person's own step or a code step marked cleans, which stops it, or through a standing approval in front of the action, which accepts the risk. Workflows given together are followed through the parts they share and the workflows they start.
- Every ref is well written
refs.writtenPassedA ref is owner/slug#id for a published workflow, or a path to a file alongside, ending .yaml, then # and the part's id.
- Only a context, connector, surface or outside action takes a ref
refs.partsPassedWorkflows share the contexts, connectors and surfaces both reach, and an outside action names the trigger of the workflow it starts. A trigger belongs to the workflow it starts, so it never refers.
- No part is placed twice in an implementation
placement.oncePassedEach part sits in at most one block of each implementation.
- Every part that needs a block has one
placement.completePassedEvery part but a trigger or comment sits in a block of each implementation.
- Every ref names a part of the workflow it refers to
refs.knownPassedA ref to a workflow given with it names a part that workflow has. A ref to a workflow not given is left alone.
- Every copy agrees with the part it refers to
refs.agreePassedA context, connector or surface that refers to another workflow's has the same kind, label and at, and a scope with the same people and terms.
- Every outside action's ref names a trigger
refs.startsPassedAn outside action that refers to a workflow given with it names that workflow's trigger, which it starts.
- Every shared part has one owner
refs.ownerPassedA ref names a part of another workflow, never its own, and following refs from any copy ends at the one that owns the part, rather than going round in a circle.
- No do step is decided by AI
warn.do-by-codePassedA do step should be code acting on what an earlier step decided; this warns and never fails.
- Each do step makes one change
warn.one-changePassedA do step should lead to one change, counting each outside action and surface and all contexts together as one; this warns and never fails.
- The file holds one workflow
warn.several-workflowsPassedA trigger's run is every part its start lines reach, and triggers whose runs share a part are one workflow, so triggers in more than one group mean the file should be split at its triggers; this warns and never fails.
- Every part is linked to a trigger
warn.unlinked-partPassedFollowing lines either way from the triggers, leaving out comments and their ties, reaches every part; this warns and never fails.
- Every comment is tied to a part
warn.untied-commentPassedA comment explains what it is tied to, so each has a tie; this warns and never fails.
- Every step is started by a trigger
warn.unstarted-stepPassedEach step, review and standing approval is in some trigger's run, the parts its start lines reach; this warns and never fails.
- No context is written by more than one workflow
warn.shared-writersPassedA context that workflows given together share is written by only one of them, since each may change what another relies on; this warns and never fails.
- No connector is read by more than one workflow
warn.shared-readersPassedA connector that workflows given together share brings items in for only one of them, since each may take an item another expects; this warns and never fails.
- Every platform description value is of the right kind
description.valuesSkippedplatform is a mapping, off_for_up_to a duration, steps code or agent, agents and calls lists of company ids, and holds a list.
Skipped because no file given is a platform description.
- Every company id and path is well written
description.idsSkippedA platform description's id is a company id or owner/platforms/slug, its company ids are lower-case letters, digits and hyphens, and what it holds are relative paths.
Skipped because no file given is a platform description.