@thebackstoryis/engineering-with-ai 0.2.9
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Docs/README.md +50 -0
- package/Docs/adoption/consultancy-and-multi-project-rollout.md +135 -0
- package/Docs/adoption/non-technical-team-guide.md +126 -0
- package/Docs/archaeology-technology-and-hosting-discovery.md +212 -0
- package/Docs/blast-radius-and-impact-routing-guide.md +325 -0
- package/Docs/blueprints/internal-blueprint-catalogue.md +146 -0
- package/Docs/blueprints/maintaining-organisation-blueprints.md +154 -0
- package/Docs/blueprints/validation-and-troubleshooting.md +168 -0
- package/Docs/cli-reference.md +113 -0
- package/Docs/completed-phase-evidence-amendments.md +74 -0
- package/Docs/consultancy-network-rollout-control-plane-guide.md +202 -0
- package/Docs/context-aware-delivery-companion-guide.md +198 -0
- package/Docs/context-aware-delivery-companion-user-guide.md +184 -0
- package/Docs/context-management-and-token-efficiency.md +113 -0
- package/Docs/design-systems/design-system-implementation-guide.md +85 -0
- package/Docs/design-systems/design-system-pack-authoring-guide.md +95 -0
- package/Docs/design-systems/design-system-review-guide.md +51 -0
- package/Docs/design-systems/design-system-user-guide.md +96 -0
- package/Docs/design-systems/product-owner-guide.md +49 -0
- package/Docs/designing-organisation-blueprint-packs.md +384 -0
- package/Docs/developer-delivery-guide.md +224 -0
- package/Docs/error-reporting-guide.md +110 -0
- package/Docs/error-reporting-provider-guide.md +49 -0
- package/Docs/examples/error-report-adapter.md +70 -0
- package/Docs/examples/meeting-review.md +76 -0
- package/Docs/examples/minimal-design-system.md +67 -0
- package/Docs/examples/prototype-review-inputs.md +175 -0
- package/Docs/examples/reproducible-archaeology-depth-example.md +144 -0
- package/Docs/examples/test-scenario-input.md +68 -0
- package/Docs/examples/worked-examples.md +147 -0
- package/Docs/existing-project-onboarding-guide.md +214 -0
- package/Docs/explanation/core-concepts.md +26 -0
- package/Docs/explanation/delivery-workflow.md +48 -0
- package/Docs/governance/governance-team-guide.md +139 -0
- package/Docs/governed-starter-project-materialisation-guide.md +284 -0
- package/Docs/guide-catalogue.md +117 -0
- package/Docs/guided-discovery-facilitator-guide.md +172 -0
- package/Docs/guided-intent-workspace-guide.md +109 -0
- package/Docs/guided-phase-evidence-drafting-guide.md +119 -0
- package/Docs/human-approval-and-assurance-guide.md +146 -0
- package/Docs/knowledge-proposals-implementer-guide.md +106 -0
- package/Docs/knowledge-proposals-user-guide.md +247 -0
- package/Docs/maintainers/context-benchmarks.md +29 -0
- package/Docs/maintainers/contributing.md +58 -0
- package/Docs/maintainers/evidence-depth-acceptance.md +72 -0
- package/Docs/maintainers/verification-walkthroughs.md +104 -0
- package/Docs/meeting-evidence-implementer-guide.md +132 -0
- package/Docs/meeting-evidence-user-guide.md +200 -0
- package/Docs/operations/dashboard-and-delivery-state.md +153 -0
- package/Docs/operations/dashboard-configuration.md +87 -0
- package/Docs/operations/installation-updating-and-entitlements.md +135 -0
- package/Docs/operations/premium-personas-setup.md +76 -0
- package/Docs/operations/troubleshooting-and-recovery.md +205 -0
- package/Docs/organisation-rollout-guide.md +142 -0
- package/Docs/persona-entitlement-provider-guide.md +199 -0
- package/Docs/persona-guided-prototype-iteration.md +129 -0
- package/Docs/personas/organisation-specific-personas.md +103 -0
- package/Docs/personas/persona-authoring-cookbook.md +176 -0
- package/Docs/personas/persona-engagement-ui.md +133 -0
- package/Docs/personas/persona-governance.md +118 -0
- package/Docs/platform-export-analysis-guide.md +336 -0
- package/Docs/policies/governance-owner-guide.md +36 -0
- package/Docs/policies/implementation-guide.md +42 -0
- package/Docs/policies/organisation-policy-design-gates.md +58 -0
- package/Docs/policies/policy-pack-authoring-guide.md +108 -0
- package/Docs/policies/product-owner-guide.md +43 -0
- package/Docs/policies/technical-owner-guide.md +37 -0
- package/Docs/product-owner-guide.md +327 -0
- package/Docs/project-portfolio-orchestration-guide.md +199 -0
- package/Docs/quality/manual-qa-and-acceptance.md +162 -0
- package/Docs/quality/persona-driven-test-scenarios.md +172 -0
- package/Docs/quality/reproducible-archaeology-depth-review-checklist.md +89 -0
- package/Docs/reference/capabilities-and-project-layout.md +678 -0
- package/Docs/reference/cli-and-configuration.md +398 -0
- package/Docs/reference/contributions-api.md +23 -0
- package/Docs/reference/security-adapter-authoring.md +81 -0
- package/Docs/reference/starter-adapter-authoring.md +74 -0
- package/Docs/repository-source-map-guide.md +381 -0
- package/Docs/reproducible-archaeology-and-discovery-depth.md +292 -0
- package/Docs/screen-prototype-creation-guide.md +324 -0
- package/Docs/security-validation-guide.md +353 -0
- package/Docs/solution-readiness-review-guide.md +123 -0
- package/Docs/standards/project-standards-authoring.md +157 -0
- package/Docs/team-hub-guide.md +162 -0
- package/Docs/team-hub-resource-registry-guide.md +167 -0
- package/Docs/tutorials/first-delivery.md +83 -0
- package/Docs/tutorials/first-session.md +62 -0
- package/Docs/using-lifecycle-hooks.md +381 -0
- package/Docs/working-with-personas.md +274 -0
- package/LICENSE +165 -0
- package/README.md +96 -0
- package/agents-src/claude/ewai-security-reviewer.md +15 -0
- package/bin/ewai +5 -0
- package/config/archaeology-record-families.yaml +59 -0
- package/config/delivery-artifacts.yaml +121 -0
- package/config/delivery-stages.yaml +77 -0
- package/config/design-system.schema.json +46 -0
- package/config/error-reporting.schema.json +79 -0
- package/config/evidence-depth.schema.json +53 -0
- package/config/intent.schema.json +90 -0
- package/config/knowledge-proposals-proposal.schema.json +34 -0
- package/config/lifecycle-event.schema.json +68 -0
- package/config/lifecycle-handler.schema.json +45 -0
- package/config/lifecycle-hook-ack.schema.json +19 -0
- package/config/meeting-evidence-candidate.schema.json +102 -0
- package/config/organisation-policy.schema.json +137 -0
- package/config/pack.schema.json +250 -0
- package/config/persona-pack.schema.json +21 -0
- package/config/persona.schema.json +17 -0
- package/config/policy-evaluation.schema.json +77 -0
- package/config/policy-facts.schema.json +140 -0
- package/config/portfolio.schema.json +68 -0
- package/config/project.schema.json +313 -0
- package/config/prototype-iteration.schema.json +128 -0
- package/config/rollout.schema.json +87 -0
- package/config/security-adapter.schema.json +31 -0
- package/config/security-scan-request.schema.json +64 -0
- package/config/security-scan-response.schema.json +52 -0
- package/config/security-validation-policy.schema.json +74 -0
- package/config/starter-source-acknowledgement.schema.json +13 -0
- package/config/starter-source-adapter.schema.json +38 -0
- package/config/starter-source-request.schema.json +61 -0
- package/package.json +77 -0
- package/packs/core/pack.yaml +7 -0
- package/packs/design-systems/default/experience-promise.md +9 -0
- package/packs/design-systems/default/intentional-review.md +10 -0
- package/packs/design-systems/default/interaction-and-entry.md +9 -0
- package/packs/design-systems/default/meaningful-content-and-states.md +9 -0
- package/packs/design-systems/default/pack.yaml +44 -0
- package/packs/design-systems/default/principles.md +10 -0
- package/packs/personas/core/pack.yaml +7 -0
- package/packs/personas/core/personas/archaeologist.md +37 -0
- package/packs/personas/core/personas/end-user.md +17 -0
- package/packs/personas/core/personas/maintainer.md +17 -0
- package/packs/personas/core/personas/operator.md +17 -0
- package/packs/personas/core/personas/specs-knowledge-curator.md +35 -0
- package/packs/technologies/laravel/pack.yaml +30 -0
- package/packs/technologies/laravel-nuxt/pack.yaml +30 -0
- package/packs/technologies/nuxt/pack.yaml +30 -0
- package/packs/technologies/power-platform/pack.yaml +31 -0
- package/packs/technologies/salesforce/pack.yaml +25 -0
- package/public/app.js +4896 -0
- package/public/apple-touch-icon.png +0 -0
- package/public/assets/backstory-icon.png +0 -0
- package/public/dashboard-navigation.js +98 -0
- package/public/favicon-16.png +0 -0
- package/public/favicon-32.png +0 -0
- package/public/favicon.ico +0 -0
- package/public/index.html +789 -0
- package/public/styles.css +2693 -0
- package/public/team-hub/app.js +202 -0
- package/public/team-hub/index.html +79 -0
- package/public/team-hub/styles.css +90 -0
- package/scripts/publication-check.mjs +140 -0
- package/scripts/setup.mjs +21 -0
- package/skills-src/ewai-archaeology/SKILL.md +334 -0
- package/skills-src/ewai-archaeology/agents/openai.yaml +4 -0
- package/skills-src/ewai-archaeology/references/archaeology-contract.md +201 -0
- package/skills-src/ewai-archaeology/references/lifecycle-reconstruction.md +177 -0
- package/skills-src/ewai-archaeology/references/maximum-detail-reconstruction.md +97 -0
- package/skills-src/ewai-archaeology/references/model-routing.md +26 -0
- package/skills-src/ewai-architecture/SKILL.md +108 -0
- package/skills-src/ewai-architecture/agents/openai.yaml +4 -0
- package/skills-src/ewai-architecture/references/architecture-contract.md +176 -0
- package/skills-src/ewai-context/SKILL.md +68 -0
- package/skills-src/ewai-context/agents/openai.yaml +4 -0
- package/skills-src/ewai-context-import/SKILL.md +118 -0
- package/skills-src/ewai-context-import/agents/openai.yaml +4 -0
- package/skills-src/ewai-context-import/references/context-import-contract.md +106 -0
- package/skills-src/ewai-dashboard-configuration/SKILL.md +20 -0
- package/skills-src/ewai-deliver/SKILL.md +122 -0
- package/skills-src/ewai-deliver/references/delivery-evidence.md +92 -0
- package/skills-src/ewai-deliver/references/phase-routing.md +31 -0
- package/skills-src/ewai-design-system-apply/SKILL.md +27 -0
- package/skills-src/ewai-design-system-apply/agents/openai.yaml +4 -0
- package/skills-src/ewai-design-system-apply/references/application-contract.md +36 -0
- package/skills-src/ewai-design-system-author/SKILL.md +28 -0
- package/skills-src/ewai-design-system-author/agents/openai.yaml +4 -0
- package/skills-src/ewai-design-system-author/references/authoring-contract.md +38 -0
- package/skills-src/ewai-design-system-review/SKILL.md +26 -0
- package/skills-src/ewai-design-system-review/agents/openai.yaml +4 -0
- package/skills-src/ewai-design-system-review/references/review-contract.md +40 -0
- package/skills-src/ewai-error-reporting/SKILL.md +46 -0
- package/skills-src/ewai-error-reporting/agents/openai.yaml +4 -0
- package/skills-src/ewai-error-reporting/references/provider-contract.md +74 -0
- package/skills-src/ewai-evidence-depth/SKILL.md +72 -0
- package/skills-src/ewai-evidence-depth/agents/openai.yaml +4 -0
- package/skills-src/ewai-evidence-depth/references/evidence-depth-contract.md +127 -0
- package/skills-src/ewai-intent/SKILL.md +68 -0
- package/skills-src/ewai-intent/agents/openai.yaml +4 -0
- package/skills-src/ewai-intent/references/intent-contract.md +42 -0
- package/skills-src/ewai-knowledge-proposals/SKILL.md +105 -0
- package/skills-src/ewai-knowledge-proposals/agents/openai.yaml +4 -0
- package/skills-src/ewai-knowledge-proposals/references/proposal-contract.md +59 -0
- package/skills-src/ewai-meeting-evidence/SKILL.md +106 -0
- package/skills-src/ewai-meeting-evidence/agents/openai.yaml +4 -0
- package/skills-src/ewai-meeting-evidence/references/candidate-contract.md +64 -0
- package/skills-src/ewai-organisation-policy/SKILL.md +62 -0
- package/skills-src/ewai-organisation-policy/agents/openai.yaml +4 -0
- package/skills-src/ewai-organisation-policy/references/policy-contract.md +94 -0
- package/skills-src/ewai-palace-housekeeping/SKILL.md +55 -0
- package/skills-src/ewai-palace-housekeeping/agents/openai.yaml +4 -0
- package/skills-src/ewai-persona-entitlement/SKILL.md +60 -0
- package/skills-src/ewai-persona-entitlement/agents/openai.yaml +4 -0
- package/skills-src/ewai-phase-evidence/SKILL.md +79 -0
- package/skills-src/ewai-phase-evidence/agents/openai.yaml +4 -0
- package/skills-src/ewai-pipeline/SKILL.md +130 -0
- package/skills-src/ewai-pipeline/agents/openai.yaml +4 -0
- package/skills-src/ewai-pipeline/references/cli.md +86 -0
- package/skills-src/ewai-pipeline/references/specs-contract.md +16 -0
- package/skills-src/ewai-portfolio/SKILL.md +70 -0
- package/skills-src/ewai-portfolio/agents/openai.yaml +4 -0
- package/skills-src/ewai-portfolio/references/portfolio-contract.md +67 -0
- package/skills-src/ewai-project-discovery/SKILL.md +95 -0
- package/skills-src/ewai-project-discovery/agents/openai.yaml +4 -0
- package/skills-src/ewai-project-discovery/references/discovery-contract.md +34 -0
- package/skills-src/ewai-prototype-iteration/SKILL.md +30 -0
- package/skills-src/ewai-prototype-iteration/agents/openai.yaml +4 -0
- package/skills-src/ewai-prototype-iteration/references/review-contract.md +49 -0
- package/skills-src/ewai-retro/SKILL.md +48 -0
- package/skills-src/ewai-retro/agents/openai.yaml +4 -0
- package/skills-src/ewai-retro/references/asset-routing.md +14 -0
- package/skills-src/ewai-rollout/SKILL.md +74 -0
- package/skills-src/ewai-rollout/agents/openai.yaml +4 -0
- package/skills-src/ewai-rollout/references/rollout-contract.md +74 -0
- package/skills-src/ewai-shape-intents/SKILL.md +84 -0
- package/skills-src/ewai-shape-intents/agents/openai.yaml +4 -0
- package/skills-src/ewai-shape-intents/references/intent-mapping-contract.md +109 -0
- package/skills-src/ewai-solution-readiness/SKILL.md +55 -0
- package/skills-src/ewai-solution-readiness/agents/openai.yaml +4 -0
- package/skills-src/ewai-standards-check/SKILL.md +93 -0
- package/skills-src/ewai-standards-check/agents/openai.yaml +4 -0
- package/skills-src/ewai-standards-check/references/report-contract.md +116 -0
- package/skills-src/ewai-test-scenarios/SKILL.md +94 -0
- package/skills-src/ewai-test-scenarios/agents/openai.yaml +4 -0
- package/skills-src/ewai-test-scenarios/references/scenario-contract.md +88 -0
- package/src/afk-worker.mjs +16 -0
- package/src/archaeology.mjs +1333 -0
- package/src/checkin.mjs +261 -0
- package/src/cli.mjs +2427 -0
- package/src/companion-guidance.mjs +257 -0
- package/src/companion-opening.mjs +62 -0
- package/src/companion.mjs +256 -0
- package/src/context.mjs +210 -0
- package/src/dashboard-preferences.mjs +80 -0
- package/src/delivery-artifacts.mjs +204 -0
- package/src/delivery-documents.mjs +248 -0
- package/src/delivery-gates.mjs +317 -0
- package/src/delivery.mjs +1433 -0
- package/src/design-system-application.mjs +291 -0
- package/src/design-system-authoring.mjs +101 -0
- package/src/design-systems.mjs +466 -0
- package/src/discovery.mjs +1314 -0
- package/src/error-reporting.mjs +323 -0
- package/src/evidence-depth.mjs +543 -0
- package/src/execution-state.mjs +243 -0
- package/src/install.mjs +166 -0
- package/src/intent-dependencies.mjs +117 -0
- package/src/intent-maps.mjs +402 -0
- package/src/intents.mjs +747 -0
- package/src/knowledge-proposals.mjs +717 -0
- package/src/launcher.mjs +51 -0
- package/src/meeting-evidence.mjs +703 -0
- package/src/network-rollout.mjs +386 -0
- package/src/organisation-blueprints.mjs +438 -0
- package/src/organisation-policies.mjs +448 -0
- package/src/packs.mjs +44 -0
- package/src/paths.mjs +62 -0
- package/src/persona-entitlements.mjs +438 -0
- package/src/persona-licence-config.mjs +98 -0
- package/src/persona-website-provider.mjs +134 -0
- package/src/persona-zip.mjs +87 -0
- package/src/personas.mjs +159 -0
- package/src/platform-metadata-analysis.mjs +314 -0
- package/src/policy-design-gates.mjs +623 -0
- package/src/policy-gate-integration.mjs +318 -0
- package/src/portfolio.mjs +509 -0
- package/src/power-platform-source-map.mjs +190 -0
- package/src/project.mjs +449 -0
- package/src/prototype-iterations.mjs +730 -0
- package/src/repository-source-map.mjs +603 -0
- package/src/runtime/afk-conductor.mjs +973 -0
- package/src/runtime/context-assembly.mjs +457 -0
- package/src/runtime/context-benchmarks.mjs +115 -0
- package/src/runtime/dashboard-actions.mjs +109 -0
- package/src/runtime/dashboard-handoffs.mjs +149 -0
- package/src/runtime/dashboard-server.mjs +1272 -0
- package/src/runtime/dashboard.mjs +197 -0
- package/src/runtime/database.mjs +789 -0
- package/src/runtime/error-reporting.mjs +581 -0
- package/src/runtime/evidence-depth-workspace.mjs +412 -0
- package/src/runtime/execution-leases.mjs +299 -0
- package/src/runtime/guided-discovery.mjs +350 -0
- package/src/runtime/guided-intents.mjs +517 -0
- package/src/runtime/impact-analysis.mjs +535 -0
- package/src/runtime/intents.mjs +222 -0
- package/src/runtime/knowledge.mjs +86 -0
- package/src/runtime/lifecycle-hooks.mjs +1239 -0
- package/src/runtime/mcp-config.mjs +110 -0
- package/src/runtime/mcp-server.mjs +1885 -0
- package/src/runtime/palace.mjs +362 -0
- package/src/runtime/paths.mjs +58 -0
- package/src/runtime/persona-engagement.mjs +255 -0
- package/src/runtime/phase-contributions.mjs +594 -0
- package/src/runtime/policy-workspace.mjs +170 -0
- package/src/runtime/prototype-iterations.mjs +235 -0
- package/src/runtime/provider-adapters.mjs +163 -0
- package/src/runtime/repository-index.mjs +838 -0
- package/src/runtime/runs.mjs +185 -0
- package/src/runtime/security-validation.mjs +1230 -0
- package/src/runtime/starter-materialisation.mjs +1155 -0
- package/src/runtime/team-hub-client.mjs +479 -0
- package/src/runtime/team-hub-database.mjs +288 -0
- package/src/runtime/team-hub-server.mjs +191 -0
- package/src/runtime/team-hub.mjs +110 -0
- package/src/runtime/tree-sitter-index.mjs +390 -0
- package/src/runtime/version.mjs +1 -0
- package/src/runtime/work.mjs +633 -0
- package/src/salesforce-source-map.mjs +212 -0
- package/src/security-validation-config.mjs +224 -0
- package/src/solution-readiness.mjs +620 -0
- package/src/starter-materialisation-contract.mjs +407 -0
- package/src/task-graph.mjs +544 -0
- package/src/team-hub-resources.mjs +239 -0
- package/src/team-hub.mjs +242 -0
- package/src/test-scenarios.mjs +622 -0
- package/src/validation-config.mjs +289 -0
- package/templates/SPECS/1.Scope/personas/registry.yaml +12 -0
- package/templates/SPECS/5.Strategy/patterns/context-packet.md +119 -0
- package/templates/SPECS/6.Build/_tracker-template.md +16 -0
- package/templates/SPECS/pipeline.yaml +62 -0
- package/templates/discovery-answers.yaml +86 -0
- package/templates/intent-body.md +21 -0
- package/tests/fixtures/context-benchmarks.json +9 -0
|
@@ -0,0 +1,336 @@
|
|
|
1
|
+
# Power Platform and Salesforce export analysis
|
|
2
|
+
|
|
3
|
+
EWAI can add bounded platform semantics to already-extracted Microsoft Power
|
|
4
|
+
Platform and Salesforce source folders. The capability extends the existing
|
|
5
|
+
Repository Source Map: it does not create a second index, connect to a tenant or
|
|
6
|
+
org, extract archives, invoke vendor tools, deploy content, or certify that an
|
|
7
|
+
application is safe or complete.
|
|
8
|
+
|
|
9
|
+
Use this guide when a project contains solution source, canvas-app source,
|
|
10
|
+
Salesforce Metadata API files, or a Salesforce DX project and you want those
|
|
11
|
+
components and declared relationships to participate in repository search,
|
|
12
|
+
graphs, Archaeology and Blast Radius.
|
|
13
|
+
|
|
14
|
+
> Platform analysis is advisory evidence. It is not security certification,
|
|
15
|
+
> deployment validation, product acceptance, import assurance, or proof that
|
|
16
|
+
> runtime dependencies and business behaviour are complete. A qualified person
|
|
17
|
+
> must review the export, coverage limits, findings and residual risk.
|
|
18
|
+
|
|
19
|
+
## The operating boundary
|
|
20
|
+
|
|
21
|
+
The workflow has three deliberately separate steps:
|
|
22
|
+
|
|
23
|
+
1. A person uses Microsoft- or Salesforce-supported tooling to obtain and
|
|
24
|
+
extract source into a local folder.
|
|
25
|
+
2. EWAI Discovery may suggest an installed technology pack from bounded path
|
|
26
|
+
markers.
|
|
27
|
+
3. A person selects the pack in `SPECS/pipeline.yaml`, then explicitly refreshes
|
|
28
|
+
the Source Map.
|
|
29
|
+
|
|
30
|
+
Detection does not select a pack. Selecting a pack does not run `pac`, `sf`,
|
|
31
|
+
SolutionPackager, PowerShell, an archive utility, a connector, a network request,
|
|
32
|
+
an import, or a deployment.
|
|
33
|
+
|
|
34
|
+
The original ZIP or `.msapp` may remain in the repository, but it is inventory
|
|
35
|
+
evidence only. EWAI analyses supported source files after they have been
|
|
36
|
+
extracted. Microsoft documents its solution source formats and canvas-app
|
|
37
|
+
extraction options in the [solution YAML reference](https://learn.microsoft.com/en-us/power-platform/alm/solution-source-control-yaml-format),
|
|
38
|
+
[SolutionPackager guidance](https://learn.microsoft.com/en-us/power-platform/alm/solution-packager-tool),
|
|
39
|
+
and [canvas-app source guide](https://learn.microsoft.com/en-us/power-apps/maker/canvas-apps/power-apps-yaml).
|
|
40
|
+
Salesforce documents project source structure in its
|
|
41
|
+
[source-format guide](https://developer.salesforce.com/docs/platform/code-builder/guide/codebuilder-source-format.html)
|
|
42
|
+
and metadata families in the
|
|
43
|
+
[Metadata Coverage Report](https://developer.salesforce.com/docs/success/metadata-coverage-report/references/metadata-types/v66.0/metadata-types.html).
|
|
44
|
+
|
|
45
|
+
## Try a small extracted source tree
|
|
46
|
+
|
|
47
|
+
A minimal recognisable Salesforce source layout looks like this:
|
|
48
|
+
|
|
49
|
+
```text
|
|
50
|
+
crm-source/
|
|
51
|
+
├── sfdx-project.json
|
|
52
|
+
└── force-app/main/default/
|
|
53
|
+
└── objects/Case/
|
|
54
|
+
└── Case.object-meta.xml
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Use files actually exported from the intended project, not empty files created to trigger detection. For a Power Platform solution, `Other/Solution.xml` and supported extracted component files serve the equivalent role. The supported-evidence tables below explain what each analyser can read.
|
|
58
|
+
|
|
59
|
+
Configure the containing repository, select the appropriate pack, refresh the Source Map and inspect coverage. The first useful result is an inventory with explicit analysed/partial outcomes and searchable technical identifiers. It isn't confirmation of a live tenant's deployment or runtime relationships.
|
|
60
|
+
|
|
61
|
+
## Enable the packs
|
|
62
|
+
|
|
63
|
+
The installed pack IDs are:
|
|
64
|
+
|
|
65
|
+
- `ewai.technology.power-platform`;
|
|
66
|
+
- `ewai.technology.salesforce`.
|
|
67
|
+
|
|
68
|
+
Discovery can suggest them from these markers:
|
|
69
|
+
|
|
70
|
+
| Pack | Suggestion markers |
|
|
71
|
+
| --- | --- |
|
|
72
|
+
| Power Platform | `Other/Solution.xml` or `solutions/*/solution.yml` beneath a walked project folder |
|
|
73
|
+
| Salesforce | `sfdx-project.json`, root `package.xml`, `manifest/package.xml`, or `unpackaged/package.xml` |
|
|
74
|
+
|
|
75
|
+
An archive by itself is not a marker. Suggestions remain proposals until a
|
|
76
|
+
person confirms selection.
|
|
77
|
+
|
|
78
|
+
Enable one or both packs under the canonical project configuration:
|
|
79
|
+
|
|
80
|
+
```yaml
|
|
81
|
+
packs:
|
|
82
|
+
- ewai.core
|
|
83
|
+
- ewai.technology.power-platform
|
|
84
|
+
- ewai.technology.salesforce
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
After changing pack selection, refresh the Source Map because the effective
|
|
88
|
+
profile catalogue and its digest have changed:
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
ewai index freshness --project . --json
|
|
92
|
+
ewai index refresh --project . --json
|
|
93
|
+
ewai index coverage --project . --json
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## Supported Power Platform evidence
|
|
97
|
+
|
|
98
|
+
The V1 Power Platform analyser recognises:
|
|
99
|
+
|
|
100
|
+
| Extracted evidence | Semantic facts |
|
|
101
|
+
| --- | --- |
|
|
102
|
+
| `Other/Solution.xml` | Solution unique name, allowlisted root-component technical identifiers and containment |
|
|
103
|
+
| `Other/Customizations.xml` or `Other/Customisations.xml` | Recognisable entity and attribute technical identifiers and containment |
|
|
104
|
+
| `solutions/<name>/solution.yml` | Solution identity from the documented solution folder |
|
|
105
|
+
| `solutioncomponents.yml` | Allowlisted `Path` component identifiers and solution containment |
|
|
106
|
+
| `rootcomponents.yml` | Allowlisted component schema/unique identifiers, type qualifier and containment |
|
|
107
|
+
| `missingdependencies.yml` | Path-shaped missing component identifiers and declared requirements when present |
|
|
108
|
+
| extracted `Src/*.pa.yaml` and `Src/Component/*.pa.yaml` | App, screen, named-component and control mapping keys plus containment |
|
|
109
|
+
|
|
110
|
+
The analyser does not persist Power Fx, control property values, display labels,
|
|
111
|
+
descriptions, connection-reference values, environment-variable values, or
|
|
112
|
+
arbitrary XML/YAML scalar values. A `.msapp` must be extracted outside EWAI
|
|
113
|
+
before its supported `Src` files can be analysed.
|
|
114
|
+
|
|
115
|
+
The newer solution YAML schema and canvas source schema can evolve. Unknown
|
|
116
|
+
component structures therefore produce partial evidence rather than a claim of
|
|
117
|
+
complete understanding.
|
|
118
|
+
|
|
119
|
+
## Supported Salesforce evidence
|
|
120
|
+
|
|
121
|
+
The V1 Salesforce analyser recognises:
|
|
122
|
+
|
|
123
|
+
| Extracted evidence | Semantic facts |
|
|
124
|
+
| --- | --- |
|
|
125
|
+
| root, `manifest/`, or `unpackaged/package.xml` | Package, allowlisted metadata type/member identities, containment and API version |
|
|
126
|
+
| `sfdx-project.json` | Project and bounded package-directory identifiers |
|
|
127
|
+
| decomposed `*.object-meta.xml` | Custom-object identity from its source path |
|
|
128
|
+
| decomposed `*.field-meta.xml` | Qualified object/field identity and containment |
|
|
129
|
+
| `*.permissionset-meta.xml` and `*.profile-meta.xml` | Object, field, Apex-class, application and tab access with paired boolean or visibility meaning |
|
|
130
|
+
| `*.flow-meta.xml` | Flow identity and allowlisted record create/read/update/delete object references |
|
|
131
|
+
| `*.cls-meta.xml`, LWC and Aura companion metadata | Component identity from the safe repository-relative path |
|
|
132
|
+
|
|
133
|
+
The analyser does not persist labels, descriptions, formulas, conditions,
|
|
134
|
+
endpoints, tokens, certificates, named-credential values, namespaces, login
|
|
135
|
+
URLs, or arbitrary XML/JSON scalar values. Apex and Lightning source code remains
|
|
136
|
+
the responsibility of the existing Tree-sitter or generic Source Map profile;
|
|
137
|
+
the Salesforce analyser handles only its allowlisted metadata companion facts.
|
|
138
|
+
|
|
139
|
+
## Repository topologies
|
|
140
|
+
|
|
141
|
+
Patterns are evaluated relative to each configured repository root. The built-in
|
|
142
|
+
profiles contain root and recursive variants so all three common arrangements
|
|
143
|
+
are supported.
|
|
144
|
+
|
|
145
|
+
### Single repository
|
|
146
|
+
|
|
147
|
+
```yaml
|
|
148
|
+
repositories:
|
|
149
|
+
- name: application
|
|
150
|
+
path: .
|
|
151
|
+
role: application
|
|
152
|
+
packs:
|
|
153
|
+
- ewai.core
|
|
154
|
+
- ewai.technology.power-platform
|
|
155
|
+
- ewai.technology.salesforce
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Place extracted folders below this root, for example `solutions/Contoso` and
|
|
159
|
+
`force-app/main/default`.
|
|
160
|
+
|
|
161
|
+
### Monorepo
|
|
162
|
+
|
|
163
|
+
```yaml
|
|
164
|
+
repositories:
|
|
165
|
+
- name: product
|
|
166
|
+
path: .
|
|
167
|
+
role: workspace
|
|
168
|
+
packs:
|
|
169
|
+
- ewai.core
|
|
170
|
+
- ewai.technology.power-platform
|
|
171
|
+
- ewai.technology.salesforce
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
Exports may be nested, for example `apps/power/solutions/Contoso` and
|
|
175
|
+
`apps/crm/force-app/main/default`. The stored Source Map path remains qualified
|
|
176
|
+
by the configured repository name.
|
|
177
|
+
|
|
178
|
+
### Folder containing repository subfolders
|
|
179
|
+
|
|
180
|
+
```yaml
|
|
181
|
+
repositories:
|
|
182
|
+
- name: power-apps
|
|
183
|
+
path: products/power
|
|
184
|
+
role: low-code
|
|
185
|
+
- name: salesforce-crm
|
|
186
|
+
path: products/salesforce
|
|
187
|
+
role: crm
|
|
188
|
+
packs:
|
|
189
|
+
- ewai.core
|
|
190
|
+
- ewai.technology.power-platform
|
|
191
|
+
- ewai.technology.salesforce
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
Here `solutions/Contoso/solution.yml` is relative to `power-apps`, while
|
|
195
|
+
`force-app/main/default/...` is relative to `salesforce-crm`. Repository roots
|
|
196
|
+
remain configured project-local authority; analyzers cannot escape them.
|
|
197
|
+
|
|
198
|
+
## Inspect evidence
|
|
199
|
+
|
|
200
|
+
Inspect the effective profiles and their match counts:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
ewai index profiles --source technology --project . --json
|
|
204
|
+
ewai index profiles --analyser power-platform-metadata --project . --json
|
|
205
|
+
ewai index profiles --analyser salesforce-metadata --project . --json
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
Inspect files without exposing their content or stored metadata:
|
|
209
|
+
|
|
210
|
+
```bash
|
|
211
|
+
ewai index files --classification power-platform-metadata --project . --json
|
|
212
|
+
ewai index files --classification power-platform-canvas --project . --json
|
|
213
|
+
ewai index files --classification salesforce-metadata --project . --json
|
|
214
|
+
ewai index files --outcome analysis_failed --project . --json
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Search technical identities and inspect declared graph relationships:
|
|
218
|
+
|
|
219
|
+
```bash
|
|
220
|
+
ewai index search Invoice__c --project . --json
|
|
221
|
+
ewai index graph Invoice__c --project . --json
|
|
222
|
+
ewai index search ContosoCore --project . --json
|
|
223
|
+
ewai index graph ContosoCore --project . --json
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
The same evidence reaches Archaeology and Blast Radius through the canonical
|
|
227
|
+
Source Map. Refresh before relying on it. A fresh index means it matches the
|
|
228
|
+
current files and profile catalogue; it does not mean coverage is complete.
|
|
229
|
+
|
|
230
|
+
## Understand partial and failed coverage
|
|
231
|
+
|
|
232
|
+
Coverage includes a separate `partial` file count. A platform file can be:
|
|
233
|
+
|
|
234
|
+
- `analysed` and complete within the finite V1 allowlist;
|
|
235
|
+
- `analysed` but partial because an unknown family or omitted identifier was
|
|
236
|
+
observed;
|
|
237
|
+
- `analysis_failed` with a stable failure code;
|
|
238
|
+
- generic, shallow or inventory-only because no selected platform profile
|
|
239
|
+
matched;
|
|
240
|
+
- `skipped_sensitive` or `skipped_oversized` under the normal Source Map rules.
|
|
241
|
+
|
|
242
|
+
Platform analysis is bounded to 240 characters per technical identifier, 1,000
|
|
243
|
+
symbols and 2,000 relationships per file, 20,000 visited structural nodes and 96
|
|
244
|
+
levels of nesting. Reaching a limit produces partial or failed evidence with a
|
|
245
|
+
visible warning. It never silently claims completeness.
|
|
246
|
+
|
|
247
|
+
Stable platform failure codes are:
|
|
248
|
+
|
|
249
|
+
- `invalid-platform-document`;
|
|
250
|
+
- `unsafe-xml-declaration`;
|
|
251
|
+
- `platform-analysis-limit`;
|
|
252
|
+
- `unsupported-platform-layout`.
|
|
253
|
+
|
|
254
|
+
Raw parser errors and source excerpts are not persisted. XML DTD and entity
|
|
255
|
+
declarations are rejected; YAML aliases are disabled.
|
|
256
|
+
|
|
257
|
+
## Troubleshoot safely
|
|
258
|
+
|
|
259
|
+
### A pack was suggested but is not active
|
|
260
|
+
|
|
261
|
+
This is expected. Review the detected technology and add the pack explicitly to
|
|
262
|
+
`SPECS/pipeline.yaml` if it is appropriate. Then refresh the Source Map.
|
|
263
|
+
|
|
264
|
+
### A supported file used the generic analyser
|
|
265
|
+
|
|
266
|
+
Check pack selection, `ewai index profiles` match counts, the configured
|
|
267
|
+
repository root and the repository-relative path. Monorepo folders should match
|
|
268
|
+
the recursive built-in patterns without a custom profile.
|
|
269
|
+
|
|
270
|
+
### An archive is inventory-only
|
|
271
|
+
|
|
272
|
+
This is intentional. Preserve the original export if it is useful evidence, but
|
|
273
|
+
extract a working copy with vendor-supported tooling outside EWAI. Do not add a
|
|
274
|
+
command-bearing Source Map profile or rename the archive to force parsing.
|
|
275
|
+
|
|
276
|
+
### Coverage is partial after a successful parse
|
|
277
|
+
|
|
278
|
+
Review the file family and current allowlist. Partiality may reflect an evolving
|
|
279
|
+
vendor schema, an unsupported component family, an invalid technical identifier,
|
|
280
|
+
or a graph bound. Treat the missing semantics as an explicit uncertainty in
|
|
281
|
+
Blast Radius, planning and testing.
|
|
282
|
+
|
|
283
|
+
## Extend safely
|
|
284
|
+
|
|
285
|
+
Technology, stack, organisation and project packs may select only registered
|
|
286
|
+
analyzers. A pack can add narrower profiles for known paths, classifications and
|
|
287
|
+
repository roles, but it cannot add executable parsing code.
|
|
288
|
+
|
|
289
|
+
A genuinely new provider family requires an EWAI implementation change with:
|
|
290
|
+
|
|
291
|
+
- a finite allowlist of persisted facts;
|
|
292
|
+
- hostile-document and redaction tests;
|
|
293
|
+
- bounded traversal, symbol and relationship behaviour;
|
|
294
|
+
- stable failure codes and partial semantics;
|
|
295
|
+
- topology and consumer regression tests;
|
|
296
|
+
- updated public schemas and this documentation.
|
|
297
|
+
|
|
298
|
+
Do not broaden a provider parser to retain arbitrary values merely because a
|
|
299
|
+
value might sometimes be useful. Promote only stable technical identifiers and
|
|
300
|
+
minimum relationship qualifiers required for honest graph meaning.
|
|
301
|
+
|
|
302
|
+
## Operational checklist
|
|
303
|
+
|
|
304
|
+
- [ ] The export was obtained and extracted through an accountable vendor-supported process.
|
|
305
|
+
- [ ] The original archive is not being treated as semantic source.
|
|
306
|
+
- [ ] Pack suggestion was reviewed and selection is explicit.
|
|
307
|
+
- [ ] Repository roots and topology are correct.
|
|
308
|
+
- [ ] Source Map was refreshed after extraction or pack changes.
|
|
309
|
+
- [ ] Profile match counts show the expected provider analyzers.
|
|
310
|
+
- [ ] Partial, failed, shallow, sensitive, oversized and inventory evidence was reviewed.
|
|
311
|
+
- [ ] Search and graph results contain no prohibited source values.
|
|
312
|
+
- [ ] Blast Radius conclusions state the remaining evidence limits.
|
|
313
|
+
- [ ] A qualified human reviews security, deployment, product and release decisions.
|
|
314
|
+
|
|
315
|
+
## Related guides
|
|
316
|
+
|
|
317
|
+
- [Repository Source Map](repository-source-map-guide.md)
|
|
318
|
+
- [Blast Radius and Impact Routing](blast-radius-and-impact-routing-guide.md)
|
|
319
|
+
- [Existing-project onboarding](existing-project-onboarding-guide.md)
|
|
320
|
+
- [Designing Organisation Blueprint Packs](designing-organisation-blueprint-packs.md)
|
|
321
|
+
- [CLI and configuration reference](reference/cli-and-configuration.md)
|
|
322
|
+
- [Human approval and assurance](human-approval-and-assurance-guide.md)
|
|
323
|
+
|
|
324
|
+
## Current contract sources
|
|
325
|
+
|
|
326
|
+
- `src/platform-metadata-analysis.mjs`
|
|
327
|
+
- `src/power-platform-source-map.mjs`
|
|
328
|
+
- `src/salesforce-source-map.mjs`
|
|
329
|
+
- `src/repository-source-map.mjs`
|
|
330
|
+
- `src/runtime/repository-index.mjs`
|
|
331
|
+
- `packs/technologies/power-platform/pack.yaml`
|
|
332
|
+
- `packs/technologies/salesforce/pack.yaml`
|
|
333
|
+
- `tests/platform-metadata-analysis.test.mjs`
|
|
334
|
+
- `tests/power-platform-source-map.test.mjs`
|
|
335
|
+
- `tests/salesforce-source-map.test.mjs`
|
|
336
|
+
- `tests/platform-export-integration.test.mjs`
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Governance Owner Guide to Policy Design Gates
|
|
2
|
+
|
|
3
|
+
Use this guide when a proposed design needs your policy decision. Check which rule applies, which facts support the result and whether the required controls or an explicitly permitted exception address it. You own that decision; a persona can expose gaps but can't approve the policy review.
|
|
4
|
+
|
|
5
|
+
> Organisation Policy Design Gates are design-time evidence only. They do not enforce production traffic, execute production code, certify compliance, approve Build or Manual QA, authorise release, or accept residual risk.
|
|
6
|
+
|
|
7
|
+
## Find the policy review
|
|
8
|
+
|
|
9
|
+
Open your project's dashboard, choose **Configuration**, enable **Policy Gates** and save. Open **Policy Gates** in the sidebar and select the relevant intent. The project must have adopted an approved policy baseline before it can assess that intent. If it reports `not-configured`, agree the baseline through [policy setup](organisation-policy-design-gates.md); turning the view on isn't approval or evidence that the design meets policy.
|
|
10
|
+
|
|
11
|
+
## Own the agreed rules
|
|
12
|
+
|
|
13
|
+
Review the source provenance, policy scope, unmatched outcome, rule precedence, review roles, controls, exception permissions, pack pins, and effective digest before approving a baseline. Approval accepts that exact project design baseline; it does not accept every future design.
|
|
14
|
+
|
|
15
|
+
Maintain source policy and Blueprint versions deliberately. When upstream material changes, EWAI reports drift and requires project review rather than silently updating accepted evidence.
|
|
16
|
+
|
|
17
|
+
## Perform a review
|
|
18
|
+
|
|
19
|
+
For `review-required`, inspect the matched facts, exact rule, evaluation digest, proposed design, control evidence, and limitations. Record your name, required role, decision, rationale, evidence, and any additional controls. A persona or model can prepare questions but cannot perform the review.
|
|
20
|
+
|
|
21
|
+
## Approve an exception
|
|
22
|
+
|
|
23
|
+
An exception exists only where the matched rule says it is permitted. Require:
|
|
24
|
+
|
|
25
|
+
- a named approver and accountable owner;
|
|
26
|
+
- a scope bounded by the rule and confirmed facts;
|
|
27
|
+
- a clear rationale;
|
|
28
|
+
- compensating controls;
|
|
29
|
+
- evidence references;
|
|
30
|
+
- a future expiry.
|
|
31
|
+
|
|
32
|
+
Do not use an exception to override a prohibited rule. Expired or stale exceptions do not pass the gate. A new decision requires a new evaluation rather than changing an immutable record.
|
|
33
|
+
|
|
34
|
+
## Assurance boundary
|
|
35
|
+
|
|
36
|
+
Treat the output as design evidence for governance review. Verify that source policy was interpreted correctly and that controls are proportionate. Certification, legal conclusions, residual-risk acceptance, business acceptance, Manual QA, deployment, and release remain separate named decisions.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# Organisation Policy Design Gates Implementation Guide
|
|
2
|
+
|
|
3
|
+
This guide is for maintainers integrating or extending the capability without creating a second policy engine.
|
|
4
|
+
|
|
5
|
+
> Organisation Policy Design Gates are design-time evidence only. They do not enforce production traffic, execute production code, certify compliance, approve Build or Manual QA, authorise release, or accept residual risk.
|
|
6
|
+
|
|
7
|
+
## Architecture
|
|
8
|
+
|
|
9
|
+
The policy pack and approved baseline live in `src/organisation-policies.mjs`. Confirmed facts, deterministic evaluation, reviews, exceptions, and current status live in `src/policy-design-gates.mjs`. Conditional Intent and Plan gates and control traces live in `src/policy-gate-integration.mjs`.
|
|
10
|
+
|
|
11
|
+
`src/runtime/policy-workspace.mjs` is the only adapter-facing service. The CLI, MCP, HTTP, and UI call it; they never match rules, choose precedence, or derive authority themselves.
|
|
12
|
+
|
|
13
|
+
## Interface map
|
|
14
|
+
|
|
15
|
+
| Interface | Read | Mutations |
|
|
16
|
+
| --- | --- | --- |
|
|
17
|
+
| CLI | `ewai policy status` | `confirm-facts`, `evaluate`, `review`, `exception` with project-relative JSON |
|
|
18
|
+
| MCP | `ewai_policy_status` | `ewai_policy_confirm_facts`, `ewai_policy_evaluate`, `ewai_policy_record_review`, `ewai_policy_record_exception` |
|
|
19
|
+
| HTTP | `GET /api/policies` | strict `POST /api/policies/...` routes |
|
|
20
|
+
| UI | Policy gates business/technical workspace | current evaluation and named-review actions |
|
|
21
|
+
|
|
22
|
+
All roots come from server or process configuration. Reject request fields that attempt to supply a project, organisation, policy, or production root. Escape every browser field and expose only safe persona metadata, bounded categorical facts, rule details, controls, evidence references, and digests.
|
|
23
|
+
|
|
24
|
+
## Lifecycle hooks
|
|
25
|
+
|
|
26
|
+
Publish policy events only after verifying the exact durable record. Use a stable source key and record digest so repeat publication is idempotent. Events may include status, intent reference, evidence digest, and rule ID only. Do not include raw policy bodies, persona definitions, credentials, prompts, local absolute paths, or production targets.
|
|
27
|
+
|
|
28
|
+
Handlers run after persistence. Their failure cannot roll back or veto the EWAI decision, and EWAI does not use them as runtime enforcement.
|
|
29
|
+
|
|
30
|
+
## Extension rules
|
|
31
|
+
|
|
32
|
+
- Add a condition dimension only through schema, domain, fact, evaluator, Impact, docs, and migration tests together.
|
|
33
|
+
- Keep rules closed and deterministic; do not add narrative expressions or model calls to gate time.
|
|
34
|
+
- Keep `not-configured` explicitly non-blocking.
|
|
35
|
+
- Keep standard-model behaviour complete; premium personas are metadata-selected optional enrichment.
|
|
36
|
+
- Preserve named-human authority and immutable digest binding.
|
|
37
|
+
- Ensure any new adapter calls the shared workspace/domain contract.
|
|
38
|
+
- Include the permanent disclaimer on success, empty, error, CLI, MCP description, HTTP, UI, report, and guide paths.
|
|
39
|
+
|
|
40
|
+
## Verification
|
|
41
|
+
|
|
42
|
+
Run the focused policy tests, `npm run check`, the full `npm test`, `npm pack --dry-run --json`, a fresh Repository Source Map, and the mandatory standards sweep. Static UI contracts do not replace representative desktop and 390 px browser Manual QA.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Organisation Policy Design Gates
|
|
2
|
+
|
|
3
|
+
Organisation Policy Design Gates let a team test a proposed system design against its approved organisational rules before Build. They are optional: a project with no approved baseline reports `not-configured` and gains no policy blocker.
|
|
4
|
+
|
|
5
|
+
> Organisation Policy Design Gates are design-time evidence only. They do not enforce production traffic, execute production code, certify compliance, approve Build or Manual QA, authorise release, or accept residual risk.
|
|
6
|
+
|
|
7
|
+
## Start with the project's accepted rules
|
|
8
|
+
|
|
9
|
+
If the project already has an approved baseline, follow [the everyday workflow](#everyday-workflow): prepare facts, confirm them, evaluate and route the result. Ask the baseline owner to resolve a stale or missing selection rather than inventing rules in a feature review.
|
|
10
|
+
|
|
11
|
+
If you're creating policy material for reuse, start with [policy pack authoring](policy-pack-authoring-guide.md). Installing a pack and approving it for this project are separate steps.
|
|
12
|
+
|
|
13
|
+
## What the capability does
|
|
14
|
+
|
|
15
|
+
1. An Organisation Blueprint contributes one or more strict, data-only policy packs.
|
|
16
|
+
2. Guided Setup resolves those contributions and shows their exact effective digest.
|
|
17
|
+
3. A named owner can approve that digest as the project baseline.
|
|
18
|
+
4. Intent work proposes facts about actors, operations, data, environments, destinations, models, AI use, retention, and resources.
|
|
19
|
+
5. A named person confirms or rejects every fact.
|
|
20
|
+
6. EWAI deterministically matches the confirmed facts against every policy rule.
|
|
21
|
+
7. The result is `allow`, `allow-with-controls`, `review-required`, `deny`, or `unassessed`.
|
|
22
|
+
8. Plan traces required controls to claims, tasks, automated tests, named-human evidence, or specialist review.
|
|
23
|
+
|
|
24
|
+
The browser’s **Policy gates** area offers a plain-language business view and an evidence-oriented technical view. Both use the same intent, facts, baseline and evaluation. The active persona rail shows which core, project, personal, and installed premium lenses are currently engaged and why.
|
|
25
|
+
|
|
26
|
+
## Standard and premium personas
|
|
27
|
+
|
|
28
|
+
Standard model reasoning with core and project personas is a complete baseline. Installed premium personas can add specialist depth for areas such as privacy, security, risk, accessibility, data, operations, or regulation. Premium access never changes the rule engine and is never required for an outcome.
|
|
29
|
+
|
|
30
|
+
Personas propose questions and possible facts. They do not confirm facts, perform reviews, approve exceptions, accept risk, or certify compliance.
|
|
31
|
+
|
|
32
|
+
## Everyday workflow
|
|
33
|
+
|
|
34
|
+
- In **Guided Setup**, inspect and approve an optional policy baseline with the Organisation Blueprint.
|
|
35
|
+
- In **Intent**, identify policy-material design facts and preserve their provenance.
|
|
36
|
+
- Enable **Policy Gates** in **Configuration** and save, then open it to inspect the current result and active personas. See [dashboard configuration](../operations/dashboard-configuration.md). Hiding this view doesn't disable an applicable policy requirement.
|
|
37
|
+
- Use the business view for consequence and next action; use the technical view for exact digests, matched rules, and control traces.
|
|
38
|
+
- Ask the named review role to resolve `review-required` rules.
|
|
39
|
+
- Use an exception only where the matched rule permits one, and always record owner, scope, controls, evidence, and expiry.
|
|
40
|
+
- Re-evaluate after relevant Impact, architecture, fact, Blueprint, task, claim, or test changes.
|
|
41
|
+
|
|
42
|
+
For role-specific help, continue with the [Product Owner guide](product-owner-guide.md), [Technical Owner guide](technical-owner-guide.md), [Governance Owner guide](governance-owner-guide.md), or [Implementation guide](implementation-guide.md).
|
|
43
|
+
|
|
44
|
+
## Status meanings
|
|
45
|
+
|
|
46
|
+
| Status | Meaning | Action |
|
|
47
|
+
| --- | --- | --- |
|
|
48
|
+
| `not-configured` | No approved policy baseline exists. | Continue normally or adopt one deliberately. |
|
|
49
|
+
| `not-evaluated` | A baseline exists but this intent has no current evaluation. | Confirm facts and evaluate. |
|
|
50
|
+
| `unassessed` | The evaluation hasn't established an allowed outcome. | Supply or review the missing facts and applicable rules, then evaluate again; don't treat this as a pass. |
|
|
51
|
+
| `allow` | The current evidence has no policy blocker. | Continue through the ordinary EWAI gates. |
|
|
52
|
+
| `allow-with-controls` | The design can continue only with visible controls. | Trace every control into Plan evidence. |
|
|
53
|
+
| `review-required` | A matched rule needs its configured human role. | Obtain and record the named review. |
|
|
54
|
+
| `deny` | The current design conflicts with policy. | Redesign, or follow a permitted exception route. |
|
|
55
|
+
| `stale` | A relevant revision changed. | Reconfirm or re-evaluate; do not reuse the old pass. |
|
|
56
|
+
| `invalid` | Evidence or its digest cannot be trusted. | Preserve it and investigate the integrity failure. |
|
|
57
|
+
|
|
58
|
+
Passing this gate does not replace security validation, Solution Readiness, Manual QA, specialist review, representative-user evidence, deployment approval, or release acceptance.
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
# Policy Pack Authoring Guide
|
|
2
|
+
|
|
3
|
+
Use this guide to add a reusable policy contribution to an Organisation Blueprint Pack.
|
|
4
|
+
|
|
5
|
+
> Organisation Policy Design Gates are design-time evidence only. They do not enforce production traffic, execute production code, certify compliance, approve Build or Manual QA, authorise release, or accept residual risk.
|
|
6
|
+
|
|
7
|
+
## Start from accountable policy, not a prompt
|
|
8
|
+
|
|
9
|
+
Name the policy owner and record whether the source is owner-declared, regulatory, contractual, or adapted. List bounded source labels that an owner can recognise. If the source is ambiguous, resolve it before encoding rules.
|
|
10
|
+
|
|
11
|
+
The policy is data-only. Never add scripts, commands, prompts, templates, expressions, executables, remote references, URLs, endpoints, credentials, handlers, or hooks.
|
|
12
|
+
|
|
13
|
+
## Closed vocabulary and data-only policy content
|
|
14
|
+
|
|
15
|
+
Rules can match only these dimensions: `resource`, `operation`, `data_entity`, `data_classification`, `actor`, `environment`, `destination`, `model`, `ai_use`, and `retention`.
|
|
16
|
+
|
|
17
|
+
Use bounded lower-case identifiers for values. Outcomes are `allow`, `deny`, `review-required`, `allow-with-controls`, and `unassessed`. Choose an explicit unmatched outcome; never let “nothing matched” become a hidden allow.
|
|
18
|
+
|
|
19
|
+
## Minimal example
|
|
20
|
+
|
|
21
|
+
```yaml
|
|
22
|
+
schema: ewai.organisation-policy/v1
|
|
23
|
+
id: design-assurance
|
|
24
|
+
title: Design assurance
|
|
25
|
+
version: 1.0.0
|
|
26
|
+
publisher:
|
|
27
|
+
id: example
|
|
28
|
+
name: Example Organisation
|
|
29
|
+
provenance:
|
|
30
|
+
kind: owner-declared
|
|
31
|
+
summary: Rules approved by the Example governance group.
|
|
32
|
+
sources:
|
|
33
|
+
- id: ai-policy
|
|
34
|
+
label: AI Policy, approved 2026-08-01
|
|
35
|
+
review_roles:
|
|
36
|
+
- id: security-owner
|
|
37
|
+
name: Security Owner
|
|
38
|
+
unmatched_outcome: unassessed
|
|
39
|
+
rules:
|
|
40
|
+
- id: sensitive-external-ai
|
|
41
|
+
title: Sensitive data sent to external AI
|
|
42
|
+
description: A security decision is required for this design.
|
|
43
|
+
when:
|
|
44
|
+
data_classification: [sensitive]
|
|
45
|
+
destination: [external-ai]
|
|
46
|
+
outcome: review-required
|
|
47
|
+
review_role: security-owner
|
|
48
|
+
controls:
|
|
49
|
+
- id: data-flow-review
|
|
50
|
+
title: Review the data flow
|
|
51
|
+
description: Record the proposed flow and specialist decision.
|
|
52
|
+
evidence: [claim, specialist-review]
|
|
53
|
+
exceptions:
|
|
54
|
+
permitted: false
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Add it to a Blueprint
|
|
58
|
+
|
|
59
|
+
Save the complete policy above as `example-blueprint/policies/design-assurance.yaml`. Create `example-blueprint/pack.yaml` beside the `policies` folder:
|
|
60
|
+
|
|
61
|
+
<!-- example: policy-blueprint -->
|
|
62
|
+
```yaml
|
|
63
|
+
schema: ewai.pack/v1
|
|
64
|
+
id: org.example.engineering
|
|
65
|
+
name: Example Engineering
|
|
66
|
+
description: A fictional policy-only Blueprint for the authoring exercise.
|
|
67
|
+
version: 1.0.0
|
|
68
|
+
type: organisation
|
|
69
|
+
requires: []
|
|
70
|
+
blueprint:
|
|
71
|
+
publisher:
|
|
72
|
+
id: example
|
|
73
|
+
name: Example Organisation
|
|
74
|
+
compatibility:
|
|
75
|
+
ewai: 0.x
|
|
76
|
+
modules:
|
|
77
|
+
- id: design-assurance
|
|
78
|
+
name: Design assurance
|
|
79
|
+
description: Review sensitive external AI data flows.
|
|
80
|
+
required: true
|
|
81
|
+
standards: []
|
|
82
|
+
personas: []
|
|
83
|
+
policies:
|
|
84
|
+
- id: design-assurance
|
|
85
|
+
title: Design assurance
|
|
86
|
+
source: policies/design-assurance.yaml
|
|
87
|
+
starter_packs: []
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
The module's policy ID matches the document's `id`; the publisher matches too. The source path is relative to `pack.yaml`, not the working directory. Follow the [Blueprint installation and discovery route](../designing-organisation-blueprint-packs.md) to make this pack available before selecting it. A required module always contributes its policy; an optional module contributes only when selected. Policy ID and publisher must agree with the module and pack metadata.
|
|
91
|
+
|
|
92
|
+
Use Guided Setup to resolve the full Blueprint. Review the policy count, rule count, outcomes, roles, contribution provenance, pack pins, and effective digest. A named approver then accepts the project-local baseline. Changing the pack later marks that baseline stale; it does not rewrite project evidence.
|
|
93
|
+
|
|
94
|
+
## Authoring review
|
|
95
|
+
|
|
96
|
+
Before publishing a pack, verify:
|
|
97
|
+
|
|
98
|
+
- every source and review role is named;
|
|
99
|
+
- every rule uses the closed vocabulary;
|
|
100
|
+
- every control names a real evidence route;
|
|
101
|
+
- review-required rules name a valid role;
|
|
102
|
+
- allow-with-controls rules define at least one control;
|
|
103
|
+
- permitted exceptions name a role, while prohibited exceptions do not;
|
|
104
|
+
- the unmatched outcome is intentionally restrictive;
|
|
105
|
+
- no production connector or executable instruction is present;
|
|
106
|
+
- example designs produce the intended precedence when several rules match.
|
|
107
|
+
|
|
108
|
+
See [Designing Organisation Blueprint Packs](../designing-organisation-blueprint-packs.md) for the wider pack structure.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Product Owner Guide to Policy Design Gates
|
|
2
|
+
|
|
3
|
+
Use the Policy gates workspace to understand how an intended feature relates to organisational policy before engineering begins.
|
|
4
|
+
|
|
5
|
+
> Organisation Policy Design Gates are design-time evidence only. They do not enforce production traffic, execute production code, certify compliance, approve Build or Manual QA, authorise release, or accept residual risk.
|
|
6
|
+
|
|
7
|
+
## Before you open the view
|
|
8
|
+
|
|
9
|
+
Use an initialised EWAI project with the intent you want to review. In the dashboard, open **Configuration**, enable **Policy Gates**, choose **Save changes**, then open **Policy Gates** in the sidebar. See [dashboard configuration](../operations/dashboard-configuration.md) if you need help finding it.
|
|
10
|
+
|
|
11
|
+
Your project also needs an approved policy baseline: the rules contributed by an Organisation Blueprint and accepted in Guided Setup. If the view says `not-configured`, ask your technical or governance owner whether a baseline should be adopted. Showing the view doesn't create one, and no baseline means no policy assessment—not a compliance pass. You can continue ordinary EWAI work without this optional capability. [How policy setup works](organisation-policy-design-gates.md).
|
|
12
|
+
|
|
13
|
+
## Your part in the review
|
|
14
|
+
|
|
15
|
+
Describe the intended user outcome and the material facts honestly. Do not try to select values that produce a preferred result. A useful evaluation depends on knowing who acts, what they do, what data is involved, where it goes, whether AI participates, where the system is hosted, and which integrations or retention choices matter.
|
|
16
|
+
|
|
17
|
+
Open **Policy gates**, select the intent, and begin with the **Business** view. It shows the current outcome, whether design action is needed, and the next accountable route. The active personas panel shows which lenses are engaged, their tier, and engagement reason. Treat their questions as prompts for better discovery, not evidence from real users.
|
|
18
|
+
|
|
19
|
+
## Confirm design facts
|
|
20
|
+
|
|
21
|
+
Review every proposed fact and its provenance. Confirm or reject the whole set as a named person. If a model or persona proposed a fact, check it against an accepted intent, architecture record, data decision, policy source, or knowledgeable owner before confirmation.
|
|
22
|
+
|
|
23
|
+
Unknown is better than invented certainty. If an answer would materially change the design, keep it open and assign an owner.
|
|
24
|
+
|
|
25
|
+
## Read the result
|
|
26
|
+
|
|
27
|
+
- `allow` means the current design evidence has no policy blocker; it is not approval to Build or release.
|
|
28
|
+
- `allow-with-controls` means Plan must carry explicit safeguards and evidence routes.
|
|
29
|
+
- `review-required` means a specific named role must decide.
|
|
30
|
+
- `deny` means redesign unless that exact rule permits a bounded exception.
|
|
31
|
+
- `unassessed`, `stale`, or `invalid` means the evidence cannot support a passing decision.
|
|
32
|
+
|
|
33
|
+
Stay involved when a control affects the user journey, communications, consent, operating process, training, or acceptance criteria. Use the technical view with an engineer when you need to inspect the exact evidence binding.
|
|
34
|
+
|
|
35
|
+
## Example: the proposed AI destination changes
|
|
36
|
+
|
|
37
|
+
Suppose a feature was planned to process internal information within an approved environment, then the proposal changes to send it to an external AI service. Confirm the changed destination and data classification as new facts; don't keep using the earlier assessment.
|
|
38
|
+
|
|
39
|
+
Evaluate against the current baseline. Depending on those rules, the result may require a specialist review or controls, or deny the design. Ask the named owner to resolve that result before passing the proposal to Plan. An AI suggestion that the service is “safe” isn't that decision.
|
|
40
|
+
|
|
41
|
+
## Before handing to Plan
|
|
42
|
+
|
|
43
|
+
Check that the user journey still achieves its outcome, every visible control has an owner, human reviews are recorded, unresolved questions are not disguised as facts, and relevant personas have challenged the design. Policy passage remains separate from Build approval, Manual QA, specialist assurance, and release acceptance.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Technical Owner Guide to Policy Design Gates
|
|
2
|
+
|
|
3
|
+
Check which version of your organisation's rules the design was assessed against, which controls are needed, and where the delivery plan addresses them. Use the technical policy view to inspect those links and resolve gaps before Build.
|
|
4
|
+
|
|
5
|
+
> Organisation Policy Design Gates are design-time evidence only. They do not enforce production traffic, execute production code, certify compliance, approve Build or Manual QA, authorise release, or accept residual risk.
|
|
6
|
+
|
|
7
|
+
## Before you start
|
|
8
|
+
|
|
9
|
+
In an initialised project's dashboard, open **Configuration**, enable **Policy Gates** and choose **Save changes**. An existing intent and an approved policy baseline are needed for an assessment. If the view reports `not-configured`, use [policy setup](organisation-policy-design-gates.md) to review and adopt an applicable baseline with the owner; the visibility setting doesn't install policy or waive any requirements. [Dashboard configuration](../operations/dashboard-configuration.md) explains the navigation controls.
|
|
10
|
+
|
|
11
|
+
## Inspect the current assessment
|
|
12
|
+
|
|
13
|
+
Open **Policy gates**, choose the intent, and switch to the **Technical** view. Check the policy digest, facts digest, evaluation digest, matched rules, required reviews, and controls. The business and technical views must reference the same intent and outcome.
|
|
14
|
+
|
|
15
|
+
Use `ewai policy status <domain/slug> --mode technical --project . --json` or `ewai_policy_status` when working through a terminal or agent host.
|
|
16
|
+
|
|
17
|
+
## Inspect the control trace into delivery
|
|
18
|
+
|
|
19
|
+
Every control must resolve through an allowed route:
|
|
20
|
+
|
|
21
|
+
- a Claim Ledger claim with implementation evidence;
|
|
22
|
+
- a task that owns the change;
|
|
23
|
+
- an automated test with a stable oracle;
|
|
24
|
+
- a named-human check;
|
|
25
|
+
- a specialist review.
|
|
26
|
+
|
|
27
|
+
Plan should record the transitive evidence, not merely repeat the control text. Changing a cited claim, task, test, or evidence file invalidates the gate. Relevant Impact dimensions include actors, AI use, data, destinations, hosting, and integrations.
|
|
28
|
+
|
|
29
|
+
## Handle drift
|
|
30
|
+
|
|
31
|
+
Re-evaluate after a material intent revision, changed confirmed fact, new effective Blueprint digest, policy-relevant Impact change, or changed control evidence. Never edit an old evaluation or decision to make it current. Reviews and exceptions are immutable and bound to their original evaluation digest.
|
|
32
|
+
|
|
33
|
+
## Keep the runtime boundary clear
|
|
34
|
+
|
|
35
|
+
Application authentication, authorisation, data-loss prevention, API gateways, database permissions, model routing, monitoring, and runtime policy enforcement remain application and infrastructure responsibilities. EWAI can require evidence that these controls are designed and tested; it does not operate them.
|
|
36
|
+
|
|
37
|
+
Policy passage does not replace threat modelling, security scanners, performance evidence, operational readiness, Manual QA, deployment controls, or release approval.
|