surfaceplate 0.16.0__py3-none-any.whl

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.
Files changed (96) hide show
  1. surfaceplate/MANIFEST.sha256 +230 -0
  2. surfaceplate/VERSION +1 -0
  3. surfaceplate/__init__.py +18 -0
  4. surfaceplate/about.py +48 -0
  5. surfaceplate/adapters/python.md +5 -0
  6. surfaceplate/adapters/r.md +3 -0
  7. surfaceplate/adapters/typescript.md +5 -0
  8. surfaceplate/adopt/__init__.py +15 -0
  9. surfaceplate/adopt/catalogue.py +78 -0
  10. surfaceplate/adopt/defaults.py +278 -0
  11. surfaceplate/adopt/detect.py +141 -0
  12. surfaceplate/adopt/discover.py +614 -0
  13. surfaceplate/adopt/example_answers.py +128 -0
  14. surfaceplate/adopt/explanations.py +551 -0
  15. surfaceplate/adopt/flow.py +559 -0
  16. surfaceplate/adopt/interview.py +237 -0
  17. surfaceplate/adopt/plan.py +1330 -0
  18. surfaceplate/adopt/provenance.py +300 -0
  19. surfaceplate/adopt/render.py +282 -0
  20. surfaceplate/adopt/scaffold.py +343 -0
  21. surfaceplate/adopt/sections.py +287 -0
  22. surfaceplate/adopt/tui/__init__.py +7 -0
  23. surfaceplate/adopt/tui/app.py +211 -0
  24. surfaceplate/adopt/tui/app.tcss +294 -0
  25. surfaceplate/adopt/tui/mark.py +77 -0
  26. surfaceplate/adopt/tui/screens.py +1772 -0
  27. surfaceplate/adopt/validators.py +224 -0
  28. surfaceplate/adopt/wizard.py +932 -0
  29. surfaceplate/check_conformance.py +3664 -0
  30. surfaceplate/cli.py +268 -0
  31. surfaceplate/core/AI_OPERATING_MODEL.md +45 -0
  32. surfaceplate/core/CONFORMANCE_LEVELS.md +299 -0
  33. surfaceplate/core/CONTROL_PRINCIPLES.md +14 -0
  34. surfaceplate/core/PREREQUISITE_GATES.md +322 -0
  35. surfaceplate/core/REVIEW_AND_EVIDENCE.md +55 -0
  36. surfaceplate/core/SECURITY_BASELINE.md +29 -0
  37. surfaceplate/doctor.py +249 -0
  38. surfaceplate/examples/application-profile.essential.example.yaml +126 -0
  39. surfaceplate/examples/application-profile.full.example.yaml +315 -0
  40. surfaceplate/examples/method-registry-entry.example.yaml +78 -0
  41. surfaceplate/examples/method-run-lineage.example.yaml +44 -0
  42. surfaceplate/examples/override-record.approved.example.yaml +39 -0
  43. surfaceplate/install_standard.py +880 -0
  44. surfaceplate/rules.py +148 -0
  45. surfaceplate/schemas/README.md +24 -0
  46. surfaceplate/schemas/application-profile.schema.yaml +320 -0
  47. surfaceplate/schemas/assurance-evidence.schema.yaml +33 -0
  48. surfaceplate/schemas/gate-exception.schema.yaml +47 -0
  49. surfaceplate/schemas/method-registry-entry.schema.yaml +132 -0
  50. surfaceplate/schemas/method-run-lineage.schema.yaml +72 -0
  51. surfaceplate/schemas/override-record.schema.yaml +76 -0
  52. surfaceplate/seeds/CHANGELOG.md +18 -0
  53. surfaceplate/seeds/activity-register.md +47 -0
  54. surfaceplate/seeds/adoption-decision-record.md +30 -0
  55. surfaceplate/seeds/data-source-register.md +18 -0
  56. surfaceplate/seeds/decision-log.md +28 -0
  57. surfaceplate/seeds/dependency-review-log.md +18 -0
  58. surfaceplate/seeds/findings-register.md +26 -0
  59. surfaceplate/seeds/method-registry-readme.md +7 -0
  60. surfaceplate/seeds/options-log.md +18 -0
  61. surfaceplate/seeds/output-validation-log.md +18 -0
  62. surfaceplate/seeds/overrides-readme.md +7 -0
  63. surfaceplate/seeds/release-checklist.md +19 -0
  64. surfaceplate/seeds/risk-classification.md +24 -0
  65. surfaceplate/seeds/run-lineage-readme.md +7 -0
  66. surfaceplate/seeds/source-of-truth-matrix.yaml +25 -0
  67. surfaceplate/seeds/test-conventions.md +20 -0
  68. surfaceplate/standard/.githooks/.gitattributes +1 -0
  69. surfaceplate/standard/.githooks/pre-commit +35 -0
  70. surfaceplate/standard/.github/skills/bug-fix/SKILL.md +57 -0
  71. surfaceplate/standard/.github/skills/change/SKILL.md +62 -0
  72. surfaceplate/standard/.github/skills/dependency-update/SKILL.md +61 -0
  73. surfaceplate/standard/.github/skills/fix-ci/SKILL.md +68 -0
  74. surfaceplate/standard/.github/skills/release/SKILL.md +71 -0
  75. surfaceplate/standard/.github/skills/review/SKILL.md +56 -0
  76. surfaceplate/standard/.github/skills/security-review/SKILL.md +61 -0
  77. surfaceplate/standard/.github/workflows/standards-conformance.yml +38 -0
  78. surfaceplate/standard/agent-instructions/activity.md +78 -0
  79. surfaceplate/standard/agent-instructions/ai-workflow.md +109 -0
  80. surfaceplate/standard/agent-instructions/authority.md +72 -0
  81. surfaceplate/standard/agent-instructions/provenance.md +93 -0
  82. surfaceplate/standard/agent-instructions/security.md +78 -0
  83. surfaceplate/standard/agent-instructions/tests.md +71 -0
  84. surfaceplate/standard/conformance-block.md +31 -0
  85. surfaceplate/templates/application-profile.yaml +113 -0
  86. surfaceplate/templates/decision-record.md +42 -0
  87. surfaceplate/templates/gate-exception.yaml +23 -0
  88. surfaceplate/templates/override-record.yaml +25 -0
  89. surfaceplate/templates/work-packet.md +33 -0
  90. surfaceplate-0.16.0.dist-info/METADATA +19 -0
  91. surfaceplate-0.16.0.dist-info/RECORD +96 -0
  92. surfaceplate-0.16.0.dist-info/WHEEL +4 -0
  93. surfaceplate-0.16.0.dist-info/entry_points.txt +2 -0
  94. surfaceplate-0.16.0.dist-info/licenses/LICENSE +201 -0
  95. surfaceplate-0.16.0.dist-info/licenses/LICENSE-DOCS +121 -0
  96. surfaceplate-0.16.0.dist-info/licenses/NOTICE +24 -0
@@ -0,0 +1,230 @@
1
+ f24a4f672a633fe38bc15b233e3cb2a24065f95a561423e6d510ffe891694e24 surfaceplate-0.16.0/.gitattributes
2
+ 420e6b8bfb9b2376436158732c2e77e932d212612fb3977c778dea8ba9e12670 surfaceplate-0.16.0/.github/copilot-instructions.md
3
+ bf32da9191d44e6ae9ada39465e8b2af5a92e6c2fbe9d5f8069c1b1eda6e0a65 surfaceplate-0.16.0/.github/workflows/dco-check.yml
4
+ 358db88d42f170031742db6ac5014b66cbd9529d2cbfeaab3c4db6375b2bf17a surfaceplate-0.16.0/.github/workflows/front-door.yml
5
+ a3e8cd32162e8dd71360be22c91b4d71ea3dca39034395b2da5b42bc11d7e98f surfaceplate-0.16.0/.github/workflows/publish.yml
6
+ 83b4142a39e5bd89f524b6bfffd58a070f34f70ee4d3503e242b0092d993796d surfaceplate-0.16.0/.github/workflows/secret-scan.yml
7
+ 67d70033f4f4b130c8ab71e5061894616864bb4153f71ca784d65e41db05272b surfaceplate-0.16.0/.github/workflows/standard-self-check.yml
8
+ 2ad298abff4d52674cdf18f5605a894758006a249dfc5c612b36d27e5c45a0e5 surfaceplate-0.16.0/AGENTS.md
9
+ f0128ed199a7cbc373d35345a43debffed83182428591f5d4d039ade5e5a4b6d surfaceplate-0.16.0/CHANGELOG.md
10
+ 89c01bc6e86b6309a52bb72722937d52d081f10f0fd22e368459f930acdcf32c surfaceplate-0.16.0/CLAUDE.md
11
+ 0e7d671b7653efcd90af28e64d2224e2e47d38e0faf07547284f431cf1e56e39 surfaceplate-0.16.0/CONTRIBUTING.md
12
+ 32e8d3038fc2e67e35d46dbfa7a700a682c4fcd7fd52a1f651f3f29ff633e8e0 surfaceplate-0.16.0/INSTALL.md
13
+ 6141efa4c3fdeaa1babbf65b42244e727205db1d11a74e02aca6616e3fbf373b surfaceplate-0.16.0/LICENSE
14
+ a2010f343487d3f7618affe54f789f5487602331c0a8d03f49e9a7c547cf0499 surfaceplate-0.16.0/LICENSE-DOCS
15
+ 100ffaf67981ce5f45c371dad65a9542161c9ae8af6e3d16fc7068cfc00dc15f surfaceplate-0.16.0/NAMESPACE.md
16
+ a026716724b531ff67acf0e829a3c1ae7903640db44d9a0387c5f3c0058c5c33 surfaceplate-0.16.0/NOTICE
17
+ fddca9faf4e45a086446493a4bacbfbd8bc970247622f8d5995d8325a8901cf5 surfaceplate-0.16.0/ORGANISATION.md
18
+ 3e365d0d6cec8052f5b193cdc510023b25f893b9e3b2ae8a506cd3161e868463 surfaceplate-0.16.0/README.md
19
+ 249a358aafebcc023be4ee9deee2b2a0dcf02ca064bc0432f34a377048068d7a surfaceplate-0.16.0/RECONCILIATION.md
20
+ f5cf1d77957a8ab382659820c5abf50ba6df486da1401925b3b719e58fc11a7b surfaceplate-0.16.0/SECURITY.md
21
+ 76771cb7126318271869158e8b637d5d429c96a974057a07f90387fe73a2cf6e surfaceplate-0.16.0/SETUP_GUIDE.md
22
+ 4f70f67b333465fbdcc455fff89a4ba3d3a932b66fb2a538c7651bf2d7a62cd5 surfaceplate-0.16.0/activity/register.md
23
+ 91757193c63094f53ce7f7c1dd8c1c172065bf38a925a156cb293296f0456d12 surfaceplate-0.16.0/audit/ADVERSARIAL_PRODUCT_REVIEW_2026-09-02.md
24
+ cee78240d56cf753bae8cf9d2ff775a282542bac426ce19c11a15221d3d24b31 surfaceplate-0.16.0/audit/AUDIT_README.md
25
+ 688413d8784273806dfbb388262e0907ecdfbea23c3bc7c4555d0cb80b629780 surfaceplate-0.16.0/audit/AUDIT_SCOPE.md
26
+ 26b299d04945d5e1038369871954bad80b82418ecf87a839c204a0e1df386dad surfaceplate-0.16.0/audit/CHATGPT_ENTERPRISE_AUDIT_PROMPT.md
27
+ df7415c25020d11b6ceb5cc0708f3b7670ae2e90454b7aae085186ffdb367596 surfaceplate-0.16.0/audit/CROSS_PROVIDER_REVIEW_2026-09-02_PASS2.md
28
+ 9c22dd92c230e144c099477c1b6ad018405ba56d8be207c0486e18b1d213fae6 surfaceplate-0.16.0/audit/GEMINI_ADVERSARIAL_REVIEW_PROMPT.md
29
+ c2267533b6c3cff0e99359e54e4bbd63c5c29fe5ca905dca3e46eee193074242 surfaceplate-0.16.0/audit/GEMINI_ADVERSARIAL_REVIEW_PROMPT_CURATED.md
30
+ 14be624be0eb075abcaf0e7d0552f96f030aa29c765d64bcd37ab5be10adc8e4 surfaceplate-0.16.0/audit/PRE_AUDIT_FINDINGS_0.6.0.md
31
+ 46eac228fd9b7659363d981a4e220b3f3c18b6778202c8dcfbe2d6bfae5a3650 surfaceplate-0.16.0/audit/PRIOR_AUDIT_REMEDIATION.md
32
+ 88901e136c49682c06226f0dfc2efc59a1e714658376cc762fb5b83e519c503b surfaceplate-0.16.0/audit/REVIEW_2026-09-01_CROSS_PROVIDER.md
33
+ c6905c1ec8033866c0144737e8a7cc361130e10f6250de574c8d8bcda06fc3bc surfaceplate-0.16.0/audit/VALIDATION_RESULTS.md
34
+ f9e1bca760cbd490b8327311470e9236da6fc88963f31e52ac9e4b70de4c4956 surfaceplate-0.16.0/audit/validation/ADOPT_MATRIX.md
35
+ e8243e926d32b7d1ec8aa22044ff71ca0e224e15bcf5db826f15d5157a1f34b4 surfaceplate-0.16.0/audit/validation/ADOPT_MATRIX_FIRST_RUN.md
36
+ d5dca15921f4b7c59b424475680a6e8bbcc9bf9466b601cee7f6ed1bbb7c3b35 surfaceplate-0.16.0/governance/application-profile.yaml
37
+ 8b5560f5b41fde2b6e04014a98fd440c37f2a14fd89f89d924a4ab4ab38f4265 surfaceplate-0.16.0/governance/assurance/AE-0001-adopt-matrix.yaml
38
+ 186df1ad125c53ba2d04f7551ad8ae08fd10a23a4522ab52a9c0d4609a437036 surfaceplate-0.16.0/governance/authority-map.yaml
39
+ 7da15b47e2063567122fa6ebb800111ac2f393c53e69e77c41b05fc54ed8805c surfaceplate-0.16.0/governance/exceptions/GX-0001.yaml
40
+ 57003cb9e388b664ae6c7ecb31bf042b4addf86b41c56d1ebd4069bed793d44f surfaceplate-0.16.0/governance/exceptions/GX-0002.yaml
41
+ ae2c7a1953b0f2b104dc9badb6a7c2719c335f776ca6a1dab9c62407ea2fac63 surfaceplate-0.16.0/org/FINDINGS.md
42
+ 7dcab278b77fcd5282d412538606d78aa5fccfee54e189d786affdccce77c946 surfaceplate-0.16.0/org/HUMAN_ACTIONS.md
43
+ 8c13ab5adf41aefd5547261f476000f223b6276c5c8b6304ccac040cec9b552f surfaceplate-0.16.0/org/RELEASE_PLAN.md
44
+ 8c1e504d3cf7ca63d836876d2e3cfdabdf325af4cd0d27e99200676f1f3958c6 surfaceplate-0.16.0/org/REMEDIATION_PLAN.md
45
+ 6e6a6b16f3193cf960b85ad18ba8f356f2916f83cd3b02b67a251fcd550721b1 surfaceplate-0.16.0/org/ROLLOUT_RUNBOOK.md
46
+ 2f90ad311891297c95b64cb5b091cc6c2bcb0cdbfdad794e5f1d5be2cec71cef surfaceplate-0.16.0/org/SUNSET_PLAN.md
47
+ 248e88d797e4a2986fb25a658292ca259999ada0765fd46aaf8de7fb3c616b3f surfaceplate-0.16.0/org/decisions/DR-1.md
48
+ 983b06c2233fa083ce67655db74c68c40a9ff06e4beae4f27d94cdbd9559e5e3 surfaceplate-0.16.0/org/decisions/DR-10.md
49
+ ff117fb32521689fc0d99c6a2c600f2ae21e99e50c1c52b5a28e06f2a05d2744 surfaceplate-0.16.0/org/decisions/DR-11.md
50
+ 743298f6058e1d42bec4227d992669a96ccbecd501089e81556a0e5274a4ca72 surfaceplate-0.16.0/org/decisions/DR-12.md
51
+ eb4931c509f8222edd1857deec8af283b1a52d25be5b26ce18845a0659e0728a surfaceplate-0.16.0/org/decisions/DR-13.md
52
+ 1111f397fd744d6fdb53e2b7b3d555236c46bb86ffc9214b89f8a3f74e7c2119 surfaceplate-0.16.0/org/decisions/DR-14.md
53
+ e1cac8fb6762bda3a0da02dae6a6c730de4cd1f92f87e20e708cca9ffccd4afc surfaceplate-0.16.0/org/decisions/DR-15.md
54
+ 1fd62f9d093c27294e889f771c97c9b47f8ca2c3487f8db01a45f5bb58c202e9 surfaceplate-0.16.0/org/decisions/DR-16.md
55
+ 7ddaaa409fb3d5d266edddcb8f202bc23812b1325c9f737c524e61c545586d57 surfaceplate-0.16.0/org/decisions/DR-17.md
56
+ 44c887b4f26ac5af613a30398be46b653048e1fa9a0e06911a42df531e5d243d surfaceplate-0.16.0/org/decisions/DR-18.md
57
+ 77cc38f25a32524e91ccb157c7c8411eecd1a77f3db57654b405ec9e76dcdeef surfaceplate-0.16.0/org/decisions/DR-19.md
58
+ 0d488f86d9bac162f3303bc39ff3bd3b20a243d63f634a0d69c7cad098095e23 surfaceplate-0.16.0/org/decisions/DR-2.md
59
+ c514dd9214a81f4d659fff17df419d995527da512427ce821fda970d5904a0a6 surfaceplate-0.16.0/org/decisions/DR-20.md
60
+ b4c732bff5f637928b26d95490cf18c6ac3ab1c0cae393ccf888f46344522134 surfaceplate-0.16.0/org/decisions/DR-21.md
61
+ 088f92c3969a21a94fc45402a0019df2af2f5cf1c44c3e9d00a33798d218c948 surfaceplate-0.16.0/org/decisions/DR-22.md
62
+ 9faa104955d0df7a0d6c25d682702892732dd433c6653f3cf53a07df75e4b154 surfaceplate-0.16.0/org/decisions/DR-23.md
63
+ 921b89d34351020af6f7f268d78237c50d520a6c29eff93b62b21198f4263b83 surfaceplate-0.16.0/org/decisions/DR-24.md
64
+ a064c87a26b061e2fb22004a92e1ea506659e66a7ad8b3838a0021bee24bcfba surfaceplate-0.16.0/org/decisions/DR-25.md
65
+ f6084e75d216af4eff6735e0a7dd2271e43c6683c0ec314b553e8099e4a1e0d7 surfaceplate-0.16.0/org/decisions/DR-26.md
66
+ 52e3c0995a5d8c181a1fc3327e3e4690718eff0f921d16f804300e5fe2384fd4 surfaceplate-0.16.0/org/decisions/DR-27.md
67
+ 5c2e264e7e5945b873a48605a7b1a5fe359ad68eca3397c59fb25d8f0c782902 surfaceplate-0.16.0/org/decisions/DR-28.md
68
+ 8bf5a30f3c23ce9c8faeabbbc1622808131c80288e3dea82ee45e36e76ac958a surfaceplate-0.16.0/org/decisions/DR-29.md
69
+ 1b41b252d63c1c5a302709a2c201898144fda070744948521be322eb76289fd3 surfaceplate-0.16.0/org/decisions/DR-3.md
70
+ e3a1e6782973061be78944e1662a2af5a60eba9c595bb996d89b5317d90b3f5c surfaceplate-0.16.0/org/decisions/DR-30.md
71
+ a25a4aa7fcff157debd1bf418f29b77b12840be8c4d31d9ee7e3a1257eee5b4f surfaceplate-0.16.0/org/decisions/DR-31.md
72
+ 64a2cd0e3bba6a2679f341a7e8621121926fe531770dac633e775b8957320c50 surfaceplate-0.16.0/org/decisions/DR-32.md
73
+ f99575f445fd75fd56664d1ad2cb3484cd13651e207a9a31eda310389e73b802 surfaceplate-0.16.0/org/decisions/DR-33.md
74
+ 615cf9b79ddefff190eb29d35ed28eec075990631058e61cf4404a6e8a388226 surfaceplate-0.16.0/org/decisions/DR-34.md
75
+ 19d274f842fe59e48f227d5429d0ace557ad2c5ea97445bcadbf4f0b885b5c9b surfaceplate-0.16.0/org/decisions/DR-35.md
76
+ 74b826a09e739b2857b3e2ef0d05b78e940e1fd98f4693e554be2a7963dfc922 surfaceplate-0.16.0/org/decisions/DR-36.md
77
+ 409e024fc7e33c7f913fd85d7b58436b12d3217bc535c2817c34c3ea7db63679 surfaceplate-0.16.0/org/decisions/DR-37.md
78
+ dce828da9af647c2aec96173f6a41efa6066de1d9339714f852177505299da13 surfaceplate-0.16.0/org/decisions/DR-38.md
79
+ 9abbbf2717b538e222144166c58d15a2b811c59edb05bffcfd7eda50b1e683ae surfaceplate-0.16.0/org/decisions/DR-39.md
80
+ 5a047edc16339bb3427bf1e441f95fde17e0d5161a8d323b7a2dc61461c10f7f surfaceplate-0.16.0/org/decisions/DR-4.md
81
+ 18ba024baa7e0586d594a3dd92306a08558f5ecf5897d386cebf0bac75534119 surfaceplate-0.16.0/org/decisions/DR-40.md
82
+ 4ea5da422712da9efdcb4b93563f4fa97b91cc0cf16b227b5ee9489158078948 surfaceplate-0.16.0/org/decisions/DR-41.md
83
+ 8dccfcc0546506335983bcac320dd43e058c482f5b58aba7d4717ce9ede9daf5 surfaceplate-0.16.0/org/decisions/DR-42.md
84
+ bf65723d366645c25a9a14e301f8a14b171e5b76d80a86c65abe740f43337c77 surfaceplate-0.16.0/org/decisions/DR-43.md
85
+ e91d719e4b7c2f1e68dab0a8089dc1838da3b543a5c5953142cf98274bb960da surfaceplate-0.16.0/org/decisions/DR-44.md
86
+ b84b22fc526b2bc0b78163768afb64eea898b80c4c476de924352d4ab8dbedb3 surfaceplate-0.16.0/org/decisions/DR-45.md
87
+ 00ae8f9f6e7d4b18b3570f44df6c43d9cafb17953ef5c71dc548cfd8b029e7cb surfaceplate-0.16.0/org/decisions/DR-46.md
88
+ 211cc8830394a6c10e8aa7667e1b26cadff64c5928ade432ad3474212f02300e surfaceplate-0.16.0/org/decisions/DR-47.md
89
+ e748e7a8accc372b3eeff2dac9e9d0be4399f83c560831d938a801aa71f296c0 surfaceplate-0.16.0/org/decisions/DR-48.md
90
+ 390d42d2b95ad880d05fc573caf111b0769667cfa894383e097e96de17fc183b surfaceplate-0.16.0/org/decisions/DR-49.md
91
+ d0e28b15fae8e636be49f45bdbe9ee1b74cee8702e928317881a4d0bc9abd8eb surfaceplate-0.16.0/org/decisions/DR-5.md
92
+ 426deb6bc7c07e394a058b26cf91d6d9e1842c1ca3ab25d55d7cadd0b65dc420 surfaceplate-0.16.0/org/decisions/DR-50.md
93
+ 77a2f9cba32eb71afd18221feea153047ac1d6132d942a283ee7e73464cb1dd4 surfaceplate-0.16.0/org/decisions/DR-51.md
94
+ f67c5d859cf6a9400f840500592fed2b1272c9878ba01b9b99bf34bdabddbb69 surfaceplate-0.16.0/org/decisions/DR-52.md
95
+ c4d7072eb6f30de12e10c467a1cc58d91ca99985681354bcadf891896f6f2597 surfaceplate-0.16.0/org/decisions/DR-53.md
96
+ 60b9994aeece696f7633a0ac2c8e6fd528e10194d54d0ba7279a794f1217a263 surfaceplate-0.16.0/org/decisions/DR-54.md
97
+ 8a08d78b3e9d05f9a4361fb77d3639d2ffb2b9e712ba1a13804ea601f8a7418e surfaceplate-0.16.0/org/decisions/DR-55.md
98
+ a4dfe7ed77b5cad6a4d092b8cc3d9a9d0fd74396fb6018fe5d7dad709ea0245c surfaceplate-0.16.0/org/decisions/DR-56.md
99
+ e75b89d21e6e8e545253a4729319b7ad08d921320429ae4f3a9fac9074495e88 surfaceplate-0.16.0/org/decisions/DR-57.md
100
+ 3124501984db789da08bcade713751885a4c690e7bf35b49d561fedcda845b51 surfaceplate-0.16.0/org/decisions/DR-58.md
101
+ a4f6a872fb325f01a889024bc5368e59278d7ed762d01d4d07b6d3df26a66a4c surfaceplate-0.16.0/org/decisions/DR-59.md
102
+ ffa0a05e7229157a3f4836d17d8adb68bdccacd46c6038f634b4dc70056236af surfaceplate-0.16.0/org/decisions/DR-6.md
103
+ 048f43eae620c6be3ba78feca0bbe61b46b8c478df99969d0b8f00287710b64c surfaceplate-0.16.0/org/decisions/DR-60.md
104
+ 873a7a04efc2c9da33d44716f1ffdf4da05453b291324fd33f5f00704fee4d89 surfaceplate-0.16.0/org/decisions/DR-61.md
105
+ fa8a7d7bd1eb88c7f3fb1fbf1931ef1d6707b8b22548de605fbd56d78466617c surfaceplate-0.16.0/org/decisions/DR-62.md
106
+ 6614605ff2c5001dbd9934cc668e5e370ce779502796a047ac1ac54184c360a4 surfaceplate-0.16.0/org/decisions/DR-63.md
107
+ 02f20963bce84f2d12b05e3addf15f47feeedf995b1bff913e6183b44e09c499 surfaceplate-0.16.0/org/decisions/DR-7.md
108
+ ecb44b6d64643e519ae0e3761c5997efd058d466885f6a9a7b20067476194945 surfaceplate-0.16.0/org/decisions/DR-8.md
109
+ 932acc89e5c02b0306b7961150160c7f298452d7de7f2fe1332b8ce94de6de40 surfaceplate-0.16.0/org/decisions/DR-9.md
110
+ 1f1593da3bbc5650fd572998851f6dbf0603e7c64c1eaeb253b42118d419c50b surfaceplate-0.16.0/org/decisions/README.md
111
+ f379f8a8ee07fcefe5a24afaaa94b5b0efafb8a7b7f631ad05cad546fbeda93b surfaceplate-0.16.0/org/ruleset-standards-conformance.json
112
+ 881785d9f29a12ac9cbac1f13da1f90c337ce6a035562ba32eb331ecbc53e8d1 surfaceplate-0.16.0/prompts/copilot-implementation-assistant.prompt.md
113
+ 9f4ac94c399e09235ab4f69792398f857196614eb4eb5f6dd3fffb56c9b272d5 surfaceplate-0.16.0/pyproject.toml
114
+ fe1d05ddcba637f21ee2fbd53bc84cae6b219e0801e3f38892c0767727df55b4 surfaceplate-0.16.0/scripts/build_release.py
115
+ cf2a6e1ea9381371e2652f293285cf386d5bc3cfe39f81770c87f2f07fc497fc surfaceplate-0.16.0/scripts/front_door.sh
116
+ b2df56c079448c16c83d7500b941a692b46e2e1c34c788017369511fbe70cad0 surfaceplate-0.16.0/scripts/verify_release.py
117
+ aa037454b5e8320521a32b278a3f4aff05fc79009ab5503f5d4a1b9a33b38c47 surfaceplate-0.16.0/surfaceplate/VERSION
118
+ 4bc2a94d535c152e10e0c3fc1a6bcff0a561aec94e989ae48b5fa9ef60b76830 surfaceplate-0.16.0/surfaceplate/__init__.py
119
+ 32b4c2c70804a98cad5afde6936da9658bfe94b1aa999698a23eb82aeba5dde4 surfaceplate-0.16.0/surfaceplate/about.py
120
+ 1ca5607d907f60e29ed9ec843a900384915f20b4fa114c14bd8923bc3e7d72bd surfaceplate-0.16.0/surfaceplate/adapters/python.md
121
+ c4da3094ecbe5cc560a7b7aeb4171c72d7fc8e3e85df723e8ffbc8124049f50f surfaceplate-0.16.0/surfaceplate/adapters/r.md
122
+ 3f540700ee9647ac9f4a1ea8c6bd4131c948b00d42cdc9ea7f6eb93133727e76 surfaceplate-0.16.0/surfaceplate/adapters/typescript.md
123
+ b7cf897b578896b73eba28478e6b0ea9915ed2b6764c1b858ea6e8344d5449d8 surfaceplate-0.16.0/surfaceplate/adopt/__init__.py
124
+ 622ecac0947527efb002c11f1aa56d2f2a0397770ebe10906d3116bbe725cc74 surfaceplate-0.16.0/surfaceplate/adopt/catalogue.py
125
+ 5c03da08568bc4344798b436dd4a74a5ad872fab33447b5ddc5fcde7e6677eb6 surfaceplate-0.16.0/surfaceplate/adopt/defaults.py
126
+ 06ed220f16b67da6c39eaf25409eab7e8a1540c895d15f18a63262e5ed60768a surfaceplate-0.16.0/surfaceplate/adopt/detect.py
127
+ 170b50d4381262d7407333a83b47bf6d821ed4ca972b4015b7f3fa1333e9422e surfaceplate-0.16.0/surfaceplate/adopt/discover.py
128
+ 8c1564618c04ad3a9903b15a22b5c90f7e0608af3074bf2f53c459a16100e3a1 surfaceplate-0.16.0/surfaceplate/adopt/example_answers.py
129
+ a1c421b4082510dbfc043cea97979a5a2252acb7ed85cb1a097cdbeee2c76317 surfaceplate-0.16.0/surfaceplate/adopt/explanations.py
130
+ c38fa030b41ead161ca5bbf82d332cc7e0009a9c2cc648f141ebc187e1de96a3 surfaceplate-0.16.0/surfaceplate/adopt/flow.py
131
+ 5ac70c77dc845815dd61fda3c3050cbb834a9136cb6896b23653db3ac403915d surfaceplate-0.16.0/surfaceplate/adopt/interview.py
132
+ 02b6a2810bbfa47fa49185226b8558feaa2c18bc9ed4ab3d7eb2cdfcca3c49ac surfaceplate-0.16.0/surfaceplate/adopt/plan.py
133
+ 2657ff724c3180fa1a97eb6a89a7e3f2ac9393148417173bb40fd14f90409ea8 surfaceplate-0.16.0/surfaceplate/adopt/provenance.py
134
+ f301e4b63c71d7cefed22962bc6165f58ac1e4c3767be3950a66c9e349901177 surfaceplate-0.16.0/surfaceplate/adopt/render.py
135
+ f90ceb3f7574f943e66eabae20557fc4824cd26ad2cefcfa0fb313aeac4cbe0f surfaceplate-0.16.0/surfaceplate/adopt/scaffold.py
136
+ 5a3cd633a299abfb2138731ab7bb79e75ed93a3668f553500e284cd4a896dd95 surfaceplate-0.16.0/surfaceplate/adopt/sections.py
137
+ 987ef4fd268f5f73d21a34a55d1d0dab74345935a94eff1cda7206f3eafec5d1 surfaceplate-0.16.0/surfaceplate/adopt/tui/__init__.py
138
+ 8217dc8878809270dcc6ab9087e884f2a99a261f9840db6651a645ed045785b2 surfaceplate-0.16.0/surfaceplate/adopt/tui/app.py
139
+ 45c977dd978200d286e1f51fffd87e374bfad1e58c50fef6d150a2af6cf67d91 surfaceplate-0.16.0/surfaceplate/adopt/tui/app.tcss
140
+ fa8b476e44b0f547a265047a77552558a99dc600ce161c66764639362d27b3ac surfaceplate-0.16.0/surfaceplate/adopt/tui/mark.py
141
+ 72b094a40818be3137782b59176fed32e6913a72905951e0b0991b05c4693d68 surfaceplate-0.16.0/surfaceplate/adopt/tui/screens.py
142
+ 9f55bd4592359a5510c6735b270b04c667625a8caf7d6d4a3498ab5467999a52 surfaceplate-0.16.0/surfaceplate/adopt/validators.py
143
+ 763b2e6bf33702307a26cbd49c49307318a5f92ad691571b44152d005c7caa91 surfaceplate-0.16.0/surfaceplate/adopt/wizard.py
144
+ 4cdc4adeea586afd15860a5d2c3dfa2e7c1b1dbb841190ac54d7cc0bf6cb4b3a surfaceplate-0.16.0/surfaceplate/check_conformance.py
145
+ 5f2931d2bdc01b1ee8b00ca634b2fce02702621d7c30f76abd059ed687fe9eff surfaceplate-0.16.0/surfaceplate/cli.py
146
+ 04b2d5951f841627fdb39bdf515ff17be81e9fe16beb580b025fafa85d393b02 surfaceplate-0.16.0/surfaceplate/core/AI_OPERATING_MODEL.md
147
+ 48b42219af1f9ba588a12425547acbbe177c8d503eed1d60d773a0f0268840cc surfaceplate-0.16.0/surfaceplate/core/CONFORMANCE_LEVELS.md
148
+ b75e1d03c087c5b75397d483cf60dbf9a010263034d185a8770ddc301f666d2f surfaceplate-0.16.0/surfaceplate/core/CONTROL_PRINCIPLES.md
149
+ e141bc03b4389ab9bbde0bc8f4895996a31edee3befe0d7f761e1b15b4a2d401 surfaceplate-0.16.0/surfaceplate/core/PREREQUISITE_GATES.md
150
+ 0a9b6f633044e400cc8dc9c51a0d033b181a1bd20f8eb5bd982e969f29765ce6 surfaceplate-0.16.0/surfaceplate/core/REVIEW_AND_EVIDENCE.md
151
+ 0ec87a766594caf4c4e7b9417e794c0c30d602b83327805d349fdd15e6192712 surfaceplate-0.16.0/surfaceplate/core/SECURITY_BASELINE.md
152
+ 002b5803e3a17eeb50463c48e7fee02d627daad3792a3af88aad87d700d92b8f surfaceplate-0.16.0/surfaceplate/doctor.py
153
+ a63621d32f173648082c08730fe0fbd3917b4d93736a708d7d8b415873bcb5c2 surfaceplate-0.16.0/surfaceplate/examples/application-profile.essential.example.yaml
154
+ 2b9ff9693743a43e9473b6483fa5ecb40800d9e2984a1ad892169588f87d2c9d surfaceplate-0.16.0/surfaceplate/examples/application-profile.full.example.yaml
155
+ 6479cabd3a6a0014401eb2898130701d99edfed46d7b80413c42e704881439b6 surfaceplate-0.16.0/surfaceplate/examples/method-registry-entry.example.yaml
156
+ edb20cbf3697618c82f54bd932ddd9f577ef7131516f94769e3dad63d6205f4d surfaceplate-0.16.0/surfaceplate/examples/method-run-lineage.example.yaml
157
+ 2e52ffc76fcad38c2949ce9f828c63a6acf28fd02b498d900bb49ccbb1f035eb surfaceplate-0.16.0/surfaceplate/examples/override-record.approved.example.yaml
158
+ 4a885e4e9198058069003ee90d45b39cd8fe86ea4161d30397d3805bbb8ae6cd surfaceplate-0.16.0/surfaceplate/install_standard.py
159
+ c392676f2c3e5a965b2bbf122ab0828d4469c465db21dba1be4bc44a4a77a988 surfaceplate-0.16.0/surfaceplate/rules.py
160
+ 4c2531b74d54379ec45af3bdb3cc9c33f7394e2b380ee80432a30741842c58cd surfaceplate-0.16.0/surfaceplate/schemas/README.md
161
+ 4ab13b50b02d2901ab7173395c55bb0dda7af1b8d6db677e67f5b65dcdcede3a surfaceplate-0.16.0/surfaceplate/schemas/application-profile.schema.yaml
162
+ efba66a86df68383f5aaff9910146b770e8f39ce8234d48d63d8de1ae3e8ab17 surfaceplate-0.16.0/surfaceplate/schemas/assurance-evidence.schema.yaml
163
+ c7945400b383578d6e141b84cea3b812e4387f9f61c7d03a007b1fca3b268b60 surfaceplate-0.16.0/surfaceplate/schemas/gate-exception.schema.yaml
164
+ b4fa419b029adf72f54fb463213a168ec3a0d2a3744d1983dcdca9f63f01ca49 surfaceplate-0.16.0/surfaceplate/schemas/method-registry-entry.schema.yaml
165
+ ac3cedf2bdc835685abde2cd12de2cb96d83a177d34be8c4b37449551266274b surfaceplate-0.16.0/surfaceplate/schemas/method-run-lineage.schema.yaml
166
+ 2c1616381eec6c99307bef740c6586f192e88cffd39cc66eacade0a9bfb47310 surfaceplate-0.16.0/surfaceplate/schemas/override-record.schema.yaml
167
+ e70079ef077354add78d2611470a82fb2c8931d4e19b78f67054a9e76bd68b2d surfaceplate-0.16.0/surfaceplate/seeds/CHANGELOG.md
168
+ 1eb3d401ee51661ebd213ad14610832b528e42e626e3c6322fb7460ea59216a9 surfaceplate-0.16.0/surfaceplate/seeds/activity-register.md
169
+ 48e8a61ac661f65af3f95bab2d873a57a62c9affa308c604b30f6fd8d08aa116 surfaceplate-0.16.0/surfaceplate/seeds/adoption-decision-record.md
170
+ 4f3798dbc1c5f20957c3440d9826249930a1d87d7b306b3bd8b9d6b0434acb85 surfaceplate-0.16.0/surfaceplate/seeds/data-source-register.md
171
+ 633412945cb34280413d24a7e2c36e14cbfea7c805f80cdde239ebee19bcf806 surfaceplate-0.16.0/surfaceplate/seeds/decision-log.md
172
+ 635abf42805f75c13fc2ec4b4b649a0f15076d0b260d75ab7745ad2bf9deab28 surfaceplate-0.16.0/surfaceplate/seeds/dependency-review-log.md
173
+ 8140d7ec19b62c3302733ded230f123aeb9e641a7fe83364adcc9f961b6636b0 surfaceplate-0.16.0/surfaceplate/seeds/findings-register.md
174
+ 44fe90bcfa8d31c3531e6798170b42b976898577769d4c9feaaf1412a1eb6d8b surfaceplate-0.16.0/surfaceplate/seeds/method-registry-readme.md
175
+ 736c5017f329a40ba0183b65a4f2d7e2d1bd224adef22954ef840892b8c01a5a surfaceplate-0.16.0/surfaceplate/seeds/options-log.md
176
+ d0576875532761bf4ebea5b470dddfb984934192653d046a872ae42196a4eb08 surfaceplate-0.16.0/surfaceplate/seeds/output-validation-log.md
177
+ 5f43238dcc92404bec2cd693a08cee3f611c5449a2b164e009093f47b9be2173 surfaceplate-0.16.0/surfaceplate/seeds/overrides-readme.md
178
+ 8d3c7567dfe66134cae5bf27a4892e1093e5bcaef3f4d11e44ccbd8a2e1e5d0b surfaceplate-0.16.0/surfaceplate/seeds/release-checklist.md
179
+ 85f933eaeb354802158e4cb4e35c815ad630029fd2dd799ec6246594dbe3d918 surfaceplate-0.16.0/surfaceplate/seeds/risk-classification.md
180
+ 33f5883d9eb258bcbc5a9b4aea0605be616edc7f58e9e8741ca53645e5379225 surfaceplate-0.16.0/surfaceplate/seeds/run-lineage-readme.md
181
+ 796d51f8f4707cc92c231194ae32a85e76f3394e3d84b9a7243a13bc9b54503f surfaceplate-0.16.0/surfaceplate/seeds/source-of-truth-matrix.yaml
182
+ 4d9cae3151565ecddbce8d9306d2879121f457ba247b76c4517a89db43e7a77c surfaceplate-0.16.0/surfaceplate/seeds/test-conventions.md
183
+ a79691a93b46e49ce460c26ef22afcc03d6eca1e63bf2edbc20e96159510f6c9 surfaceplate-0.16.0/surfaceplate/standard/.githooks/.gitattributes
184
+ 9b4bd132273044783851948fb35aa5dca74cbd926a1bf7ba3ecd751bd49d5226 surfaceplate-0.16.0/surfaceplate/standard/.githooks/pre-commit
185
+ 550075db505de30971f1380c17b4830d3ebb36484bf4466f1eb87a51363ab3cd surfaceplate-0.16.0/surfaceplate/standard/.github/skills/bug-fix/SKILL.md
186
+ f6d70a00ade31b1d2dd0ca56634b12737d8b2d3849dd6a85a7573a24c7fee0ed surfaceplate-0.16.0/surfaceplate/standard/.github/skills/change/SKILL.md
187
+ c8b6640e07d7d969d582d4e3702ef66b065ac8a80d24750fe1793a06760f9181 surfaceplate-0.16.0/surfaceplate/standard/.github/skills/dependency-update/SKILL.md
188
+ aafdb405a5598e22de2776140c8633c39d5ba53797c7e742fb7d979dd3d202a9 surfaceplate-0.16.0/surfaceplate/standard/.github/skills/fix-ci/SKILL.md
189
+ 2397815dcab9c0feb5fb64437685b5028bcfd1acb7d1c1d129b69c2853334b32 surfaceplate-0.16.0/surfaceplate/standard/.github/skills/release/SKILL.md
190
+ b303e2740d3a0af2d51c671994e8a7d9de84622e21361420a05b7e2d721bb52f surfaceplate-0.16.0/surfaceplate/standard/.github/skills/review/SKILL.md
191
+ 02d0531951ffa751ab9d7ed49d263236ce293cfbb7433d585b9b6e145363654b surfaceplate-0.16.0/surfaceplate/standard/.github/skills/security-review/SKILL.md
192
+ 97b32a25ff8018e2b81e152f861d9f28091360078f9065766963881022b676c1 surfaceplate-0.16.0/surfaceplate/standard/.github/workflows/standards-conformance.yml
193
+ 9b6274ac7915ec4707cb751c80da193636c63968508ff0263297e0cde73c96f1 surfaceplate-0.16.0/surfaceplate/standard/agent-instructions/activity.md
194
+ 827cffee6117d33e2d2b725b7d0ab5b138c9b7ba93afd312bcb6f37cf0373c59 surfaceplate-0.16.0/surfaceplate/standard/agent-instructions/ai-workflow.md
195
+ 3ad6916b01f436239a6b1d090aa5b2822112d08c96b2ab12bc61ea66f7463a2a surfaceplate-0.16.0/surfaceplate/standard/agent-instructions/authority.md
196
+ 4337048f1ce3f630b4b122ca3b04a18780ad98fb0076a24aad572fc10beb4fef surfaceplate-0.16.0/surfaceplate/standard/agent-instructions/provenance.md
197
+ 4a0fba60fde19d7a6a8f1f75832993a1ea55a75674b2ba63a109e5bc4a31058c surfaceplate-0.16.0/surfaceplate/standard/agent-instructions/security.md
198
+ 38c78e74025ba2c97d1e0cb9e583cc29fbd1e8dfbd6f05a73ae1f71cfc69e273 surfaceplate-0.16.0/surfaceplate/standard/agent-instructions/tests.md
199
+ 32402fc9f200f4a726c8c15bf726a9f9aa13ecafaad00babc4ae118ad8dbd5bc surfaceplate-0.16.0/surfaceplate/standard/conformance-block.md
200
+ 32b4a2f9fb7885f73b808d3ba205018665ee4730b195f380d26050edc3273ef8 surfaceplate-0.16.0/surfaceplate/templates/application-profile.yaml
201
+ d14f68483a453b43300ba130bb10d511ea901a33f197498b2df41d09e09f4547 surfaceplate-0.16.0/surfaceplate/templates/decision-record.md
202
+ e083724b097b0a3e3c8b51a1aeae58a77abcb473a0872288999cbcc9dc68e040 surfaceplate-0.16.0/surfaceplate/templates/gate-exception.yaml
203
+ f015d90ef24be1e429ea0f585d5bcb9ac2e1e4c28a1d0bf382f2610c9a77dc5a surfaceplate-0.16.0/surfaceplate/templates/override-record.yaml
204
+ 121f5270ee57740adee42ec82abd4b6b7b714093faf299efbb3ae6d78654be60 surfaceplate-0.16.0/surfaceplate/templates/work-packet.md
205
+ 61144523f328977e275ce8a15e546083911b612d2d82a6900a463dccdb1eff66 surfaceplate-0.16.0/tests/__snapshots__/test_adopt_snapshots/test_decisions_form.svg
206
+ a00982a6b586b47ef0f97650ed644bf9dc85e177396971937c0f232240d0a292 surfaceplate-0.16.0/tests/__snapshots__/test_adopt_snapshots/test_edit_line.svg
207
+ c829f9b49a5c591f6e139919c25eddcf8430cfceb6272c1a5664e80976115e8f surfaceplate-0.16.0/tests/__snapshots__/test_adopt_snapshots/test_gates_list_with_a_focused_status.svg
208
+ 922ca13726919d37a6941b9f164a20db0df0dd0d3d64b41d25f4ab5a974b94fd surfaceplate-0.16.0/tests/__snapshots__/test_adopt_snapshots/test_level_screen.svg
209
+ ede5a59e7300eb499b06bf4b616e8c4f1fec82062cbe6c6cf3e322cd91552382 surfaceplate-0.16.0/tests/__snapshots__/test_adopt_snapshots/test_remainder_form.svg
210
+ a2a553151752273f5aae0305d6bd126bed57a4317b02edcc66c937d50947c1e0 surfaceplate-0.16.0/tests/__snapshots__/test_adopt_snapshots/test_resume_prompt.svg
211
+ bb9fa7f4541f13cc52e76367d223bdf61d15690ae9841736132359efb82715d8 surfaceplate-0.16.0/tests/__snapshots__/test_adopt_snapshots/test_review.svg
212
+ 50fd5d08c4cef04f5e26f11a5521e246427ec06c063ac32c69c8007bc27fad2c surfaceplate-0.16.0/tests/__snapshots__/test_adopt_snapshots/test_review_with_an_error.svg
213
+ 6bea099ac5ccb6c58a98bd3d68e916e1268366871ad72150ed2cd3ab31265641 surfaceplate-0.16.0/tests/__snapshots__/test_adopt_snapshots/test_scaffold_offer.svg
214
+ de6ce860deacfc89fc01b52385a4855905c5d06caf4482f672bb3c84d9aa9615 surfaceplate-0.16.0/tests/__snapshots__/test_adopt_snapshots/test_welcome_screen.svg
215
+ 78bcc510b01fbff333aea7da22fa5103dc6b1f5c2ff711821bc683c87d8e3bb7 surfaceplate-0.16.0/tests/adopt_matrix.py
216
+ b917e71e6788952065609c750c3cf4a5e49ffb2bf7ff04201b8a67beaa12af0e surfaceplate-0.16.0/tests/adopt_matrix_screens.py
217
+ 98933dd0d11d6f887e6964697cd579d3c9ef8a46f49680b23c3b3e8c0e094152 surfaceplate-0.16.0/tests/check_audit_packet.py
218
+ 4f386057e5bb92a58f6496521fe4aa4bc70eebe0940630acf82d9b2d88360df2 surfaceplate-0.16.0/tests/check_code_registers.py
219
+ 3729348fbc2a6d3b12978a18bc98a02facd5540152dfd28a16608341abbc4a76 surfaceplate-0.16.0/tests/check_identifiers.py
220
+ 3d5879ae1371d9e99dc4e99e412ce88890040b8a029c7d7bcac3e9897e46656f surfaceplate-0.16.0/tests/check_vendored_current.py
221
+ 1c2049d7b65254a2312a3afd81341e5895e647b58a28cb731b399ae2e001e00c surfaceplate-0.16.0/tests/test_adopt.py
222
+ 24f88222344938d48f0a593579db27abd8e36e5e98980efacc2e07ce10ba7489 surfaceplate-0.16.0/tests/test_adopt_matrix.py
223
+ 74e115f9507ca1a7e22a74a0e15dabd8b83ab1420e0fc41b8889049e722dba1d surfaceplate-0.16.0/tests/test_adopt_snapshots.py
224
+ 238f8ba66d75651bd4b8f029f161457c02a4dde49c70383ff102e6c674851836 surfaceplate-0.16.0/tests/test_adopt_tui.py
225
+ f76dbb2c032888d6a9af56ef5f29388de106076d99181666cba146fdc5bbabac surfaceplate-0.16.0/tests/test_discover.py
226
+ a6662806d0ad052eda1ee828727d8103058d6cccf385a28654226df4c457e188 surfaceplate-0.16.0/tests/test_install_and_check.py
227
+ 291e79d63c2851c0062ce1fbef65cc756295812e44985145563a85d2a11f8593 surfaceplate-0.16.0/tests/test_provenance.py
228
+ 5573ca73af51405a9bf553d304063b0580a3b1a96e17ef219d74ffc6f14a2499 surfaceplate-0.16.0/tests/test_render.py
229
+ b032581bcf670320b6204f8e8454f40ce357919b3d84df7e9c19af57d22e8bdd surfaceplate-0.16.0/tests/test_scaffold.py
230
+ 6c40e9b7c76749e0853d45b7a12bf342a3169267c416c92abc086f6128952257 surfaceplate-0.16.0/tests/validate_contracts.py
surfaceplate/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.16.0
@@ -0,0 +1,18 @@
1
+ """Surfaceplate — a governance framework that installs into a repository and checks it against
2
+ the standard it publishes.
3
+
4
+ This package IS the payload. `standard/`, `schemas/`, `core/`, `templates/`, `examples/` and
5
+ `adapters/` sitting beside this file are not resources bundled alongside the code — they are what
6
+ `install_standard.py` copies into an adopting repository, and `install_standard.py` and
7
+ `check_conformance.py` are what does the copying and the checking. Nothing here is imported for
8
+ its own sake; `install_standard.py` and `check_conformance.py` are run directly, as scripts.
9
+
10
+ No public API is exported. `import surfaceplate` exists so `repo_root()`
11
+ (`install_standard.py:repo_root`) can resolve this directory reliably under every distribution
12
+ channel this project supports — a git checkout, a normal pip install, an editable install — by
13
+ nothing more than `Path(__file__).resolve().parent`. See `org/decisions/DR-31.md`.
14
+ """
15
+
16
+ from __future__ import annotations
17
+
18
+ __all__: list[str] = []
surfaceplate/about.py ADDED
@@ -0,0 +1,48 @@
1
+ """What this tool is: the identity the opening screen shows and the anchor `adopt` compares.
2
+
3
+ `DR-51` (2). Held in one module so the opening screen, the version-parity refusal and `doctor`
4
+ say the same thing, and `tests/test_adopt.py` holds it to `pyproject.toml` so it cannot drift.
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ from pathlib import Path
10
+
11
+ NAME = "Surfaceplate"
12
+ PUBLISHER = "Pipo Ventures Ltd"
13
+ LICENCE = "Apache-2.0"
14
+ HOMEPAGE = "https://github.com/pipoventures/surfaceplate"
15
+ TAGLINE = (
16
+ "a software delivery standard that installs into a repository and checks it against what it "
17
+ "publishes"
18
+ )
19
+
20
+ PACKAGE_DIR = Path(__file__).resolve().parent
21
+
22
+
23
+ def version() -> str:
24
+ try:
25
+ return (PACKAGE_DIR / "VERSION").read_text(encoding="utf-8").strip()
26
+ except OSError:
27
+ return "unknown"
28
+
29
+
30
+ def anchor() -> str:
31
+ """The framework anchor of this tool's own payload: what `install` records as
32
+ `framework_digest`, computed the same way (`install_standard.framework_anchor`)."""
33
+ try:
34
+ from surfaceplate import install_standard
35
+ except ImportError: # imported flat, with the payload directory itself on the path (CI)
36
+ import install_standard # type: ignore[no-redef]
37
+
38
+ return install_standard.framework_anchor(PACKAGE_DIR) or ""
39
+
40
+
41
+ def short(digest: str) -> str:
42
+ return f"{digest[:12]}…" if digest else "(no anchor)"
43
+
44
+
45
+ def upgrade_command(repo: Path, *, no_hooks: bool) -> str:
46
+ """The `install` invocation that brings a repository's installed copy up to this tool."""
47
+ command = f"surfaceplate install --source {PACKAGE_DIR} --target {repo}"
48
+ return command + (" --no-hooks" if no_hooks else "")
@@ -0,0 +1,5 @@
1
+ # Python Adapter
2
+
3
+ Possible native implementation: Pydantic models for contracts and registry records; pytest for unit/contract/regression tests; Ruff for lint/format; mypy or pyright where justified; `pyproject.toml` plus a locked environment; structured logging with correlation IDs; explicit exception/problem responses; SHA-256 via the standard library. FastAPI, SQLite, or another storage/API choice is optional and should follow the receiving application's architecture.
4
+
5
+ Keep domain methods independent from HTTP/CLI/UI adapters. Make the receiving application's canonical input/package records and Method Run lineage serializable and hashable. Test high-risk seams: contract validation, immutable inputs where applicable, method dispatch, deterministic outputs, failed/blocked states, provenance completeness, override approval rules, and replay behavior.
@@ -0,0 +1,3 @@
1
+ # R Adapter
2
+
3
+ Recommended native implementation: `testthat`, `lintr`, `renv.lock`, package-aware tests, deterministic fixtures, and repository-local validation scripts. Keep calculation/domain logic outside Shiny server orchestration. Use explicit schemas and stable structured returns. Use R-native adapters for the shared method registry, run lineage, override validation, and documentation checks. Implement the control concepts natively; do not import another application's domain structures — its asset classes, its methodology-specific record shapes — into this repository. The control is the shape of the record, not the domain it was first written for.
@@ -0,0 +1,5 @@
1
+ # TypeScript/React Adapter
2
+
3
+ Recommended native implementation: TypeScript domain/API types generated from or checked against canonical backend schemas; ESLint and formatter; `tsc --noEmit`; deterministic frontend tests; production build; explicit loading, empty, error, and stale-data states.
4
+
5
+ Treat the frontend as a client of stable contracts. Do not place quantitative/model methodology in components. Display provenance, run status, warnings, overrides, and human-review state from API data. Keep visual conventions application-specific rather than importing another application's UI patterns.
@@ -0,0 +1,15 @@
1
+ """The `surfaceplate adopt` wizard.
2
+
3
+ One rule governs everything in this package, stated in `org/RELEASE_PLAN.md` before any of it was
4
+ built: **it asks, the human answers, the tool writes.** No module here selects a conformance level,
5
+ invents a rationale, or sets a date. Every judgement call `core/PREREQUISITE_GATES.md` and
6
+ `core/CONFORMANCE_LEVELS.md` require is elicited from the human and recorded verbatim.
7
+
8
+ The wizard produces exactly one artefact — a complete, schema-valid `governance/application-profile.yaml`
9
+ — and touches nothing else. It does not create method registry entries, wire CI, or write code. See
10
+ `org/decisions/DR-32.md`.
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ __all__: list[str] = []
@@ -0,0 +1,78 @@
1
+ """Catalogue data the wizard presents, derived from the checker rather than restated (`DR-6`).
2
+
3
+ `check_conformance.py` is the checker's own source of truth for what a gate is, which controls a
4
+ level requires, and which gates a UI repository cannot avoid. Every constant this module exposes is
5
+ read from it directly. A copy would agree with the checker on the day it was written and silently
6
+ stop agreeing the next time a gate is added — the exact shape `F23` found inside a drift guard, one
7
+ packet before this one.
8
+
9
+ The one thing genuinely new here is `SECTIONS`: which of the six groups in
10
+ `core/PREREQUISITE_GATES.md` each gate belongs to. That grouping exists only as prose section
11
+ headings in the document — there is no machine-readable form of it to derive from — so it is encoded
12
+ here as boundary counts over `GATE_CATALOGUE`'s own insertion order, which the checker already
13
+ declares grouped exactly this way. `tests/adopt/test_catalogue.py` asserts the counts still sum to
14
+ `len(GATE_CATALOGUE)` and the names still match the document's own headings, so this is the one place
15
+ in the wizard where a real, if narrow, drift risk is checked rather than merely hoped not to occur.
16
+ """
17
+
18
+ from __future__ import annotations
19
+
20
+ from surfaceplate import check_conformance as _cc
21
+
22
+ GATE_CATALOGUE: dict[str, str] = _cc.GATE_CATALOGUE
23
+ LEVEL_REQUIRED_GATES: dict[str, set[str]] = _cc.LEVEL_REQUIRED_GATES
24
+ DESIGN_GATES: set[str] = _cc.DESIGN_GATES
25
+ CONFORMANCE_LEVELS: dict[str, set[str]] = _cc.CONFORMANCE_LEVELS
26
+ LEVELS_REQUIRING_FULL_DECLARATION: set[str] = _cc.LEVELS_REQUIRING_FULL_DECLARATION
27
+ PATTERN_A_CONTROLS: set[str] = _cc.PATTERN_A_CONTROLS
28
+ PATTERN_B_CONTROLS: set[str] = _cc.PATTERN_B_CONTROLS
29
+ PATTERN_C_CONTROLS: dict[str, str] = _cc.PATTERN_C_CONTROLS
30
+
31
+ # (section heading, gate count) in the order core/PREREQUISITE_GATES.md declares them, which is
32
+ # also GATE_CATALOGUE's own insertion order. 4 + 5 + 2 + 3 + 2 + 3 = 19.
33
+ SECTIONS: list[tuple[str, int]] = [
34
+ ("Design and user interface", 4),
35
+ ("Work and decisions", 5),
36
+ ("Documentation authority", 2),
37
+ ("Tests and evidence", 3),
38
+ ("Data", 2),
39
+ ("Dependencies and release", 3),
40
+ ]
41
+
42
+
43
+ def sectioned_gates() -> list[tuple[str, list[str]]]:
44
+ """Gate IDs grouped by section, in catalogue order. Derived, not stored."""
45
+ ids = list(GATE_CATALOGUE)
46
+ out: list[tuple[str, list[str]]] = []
47
+ cursor = 0
48
+ for name, count in SECTIONS:
49
+ out.append((name, ids[cursor : cursor + count]))
50
+ cursor += count
51
+ return out
52
+
53
+
54
+ # What each level actually costs, for the recap the conformance-level screen shows (DR-31's
55
+ # artifact, Frame 2). Gate and control counts are computed, not typed in; only the one-line
56
+ # character of each level - who it is for - is prose, because the catalogue has no field for that
57
+ # and inventing one to avoid four lines of hand-written text would be its own small overclaim.
58
+ LEVEL_BLURBS: dict[str, str] = {
59
+ "essential": "Proofs of concept, internal tooling, anything whose output nobody outside the "
60
+ "team relies on.",
61
+ "standard": "Anything a colleague or a customer depends on.",
62
+ "full": "Applications producing material quantitative or AI output that other systems consume "
63
+ "as fact.",
64
+ }
65
+
66
+
67
+ def level_summary(level: str, builds_ui: bool) -> dict[str, object]:
68
+ """Gate and control counts for `level`, honest about the UI floor's effect on the count."""
69
+ required_gates = set(LEVEL_REQUIRED_GATES[level])
70
+ if builds_ui and level in LEVELS_REQUIRING_FULL_DECLARATION:
71
+ required_gates |= DESIGN_GATES
72
+ return {
73
+ "level": level,
74
+ "blurb": LEVEL_BLURBS[level],
75
+ "gate_count": len(required_gates),
76
+ "control_count": len(CONFORMANCE_LEVELS[level]),
77
+ "controls": sorted(CONFORMANCE_LEVELS[level]),
78
+ }