Repository navigation
Expand file tree
/
Copy pathgithub.json
More file actions
356 lines (356 loc) · 15 KB
/
Copy pathgithub.json
File metadata and controls
356 lines (356 loc) · 15 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
{
"defaultBranch": "main",
"projectType": "control-plane",
"prWorkflow": {
"preferredMergeMethod": "merge",
"allowedMergeMethods": [
"merge"
],
"requiredStatusChecks": [
"ci-gate",
"security-gate"
],
"mergePath": "Launchplane merge train",
"watchSkill": "babysit-pr"
},
"docs": {
"index": "docs/README.md",
"direction": "DIRECTION.md",
"architecture": "docs/architecture.md",
"configBoundary": "docs/config-boundary.md",
"authorizationAuthority": "docs/authorization-authority.md",
"disposableLanes": "docs/disposable-lanes.md",
"serviceBoundary": "docs/service-boundary.md",
"genericWebTwoSlotReleases": "docs/generic-web-two-slot-releases.md",
"dokployServiceDeployments": "docs/dokploy-service-deployments.md",
"dokployInventory": "docs/dokploy-inventory.md",
"driverDescriptors": "docs/driver-descriptors.md",
"driverDevelopment": "docs/driver-development.md",
"previewWorkflowContract": "docs/preview-workflow-contract.md",
"previewFixtures": "docs/preview-fixtures.md",
"legacyPreviewReconciliation": "docs/legacy-preview-reconciliation.md",
"productRepoContract": "docs/product-repo-contract.md",
"newProductRepo": "docs/new-product-repo.md",
"operatorExperience": "docs/operator-experience.md",
"requestAttention": "docs/request-attention.md",
"uiStandards": "docs/ui-standards.md",
"mergeTrainPolicy": "docs/merge-train-policy.md",
"mergeTrainEvents": "docs/merge-train-events.md",
"mergeAdmission": "docs/merge-admission.md",
"historicalMergeCompletion": "docs/merge-train-historical-completion.md",
"runnerLaneBaseline": "docs/runner-lane-baseline.md",
"runnerHostHygiene": "docs/runner-host-hygiene.md",
"ownerAcceptance": "docs/owner-acceptance.md",
"privilegedOperations": "docs/privileged-operations.md",
"agentContextBoundary": "docs/agent-context-boundary.md",
"agentOperatorContract": "docs/agent-operator-contract.md",
"engineeringReviewRuns": "docs/engineering-review-runs.md",
"engineeringReviewDecisions": "docs/engineering-review-decisions.md",
"operations": "docs/operations.md",
"healthAlertDrills": "docs/health-alert-drills.md",
"testingActivation": "docs/testing-activation.md",
"storedRecordPreflight": "docs/stored-record-preflight.md",
"laneServiceRestart": "docs/lane-service-restart.md",
"records": "docs/records.md",
"hostProgramsPackage": "docs/host-program-package.md",
"secrets": "docs/secrets.md",
"credentialInventory": "docs/credential-inventory.md",
"testingLocalConsumer": "docs/testing-local-consumer.md",
"testingLocalCredentials": "docs/testing-local-credentials.md",
"privateTestingTransport": "docs/private-testing-transport.md",
"odooTestingWalkthrough": "docs/odoo-testing-walkthrough.md",
"githubActionsSecurity": "docs/github-actions-security.md",
"dependencyHealthContract": "docs/dependency-health-contract.md",
"runtimeDependencyHealth": "docs/runtime-dependency-health.md",
"syncCycleHealth": "docs/sync-cycle-health.md",
"advisoryGovernanceChecks": "docs/advisory-governance-checks.md",
"publicReadiness": "docs/public-readiness.md",
"roleWords": "docs/role-words.md",
"artifactProvenance": "docs/artifact-provenance.md",
"artifactSecurity": "docs/artifact-security.md",
"eventDrivenDeploys": "docs/event-driven-deploys.md",
"releaseReview": "docs/release-review.md",
"productionBackupProvider": "docs/production-backup-provider.md",
"odooOnlineBackups": "docs/odoo-online-backups.md",
"style": [
"docs/style/python.md",
"docs/style/testing.md"
],
"policies": [
"docs/policies/coding-standards.md"
],
"odooShopifyIdentity": "docs/odoo-shopify-identity.md",
"odooWebsiteSettings": "docs/odoo-website-settings.md",
"launchplaneMergeTrain": "https://github.com/cbusillo/codex-skills/blob/main/skills/launchplane/references/merge-train.md"
},
"qualityGate": {
"test": {
"local": "uv run --extra dev python -m unittest {modules}",
"localSafety": "uv run --extra dev python -m unittest {safety_modules}",
"privateBearerRehearsal": "LAUNCHPLANE_TEST_NGINX_IMAGE=\"${LAUNCHPLANE_TEST_NGINX_IMAGE:?select an already-local immutable Nginx image}\" uv run --extra dev python -m unittest tests.test_private_bearer_forwarding -v",
"odooStartupRehearsal": "LAUNCHPLANE_TEST_STARTUP_IMAGE=\"${LAUNCHPLANE_TEST_STARTUP_IMAGE:?select an already-local immutable image}\" uv run --extra dev python -m unittest tests.test_odoo_slot_startup_rehearsal -v",
"testingRouteReaderRehearsal": "LAUNCHPLANE_TEST_TRAEFIK_IMAGE=\"${LAUNCHPLANE_TEST_TRAEFIK_IMAGE:?select an already-local immutable Traefik image}\" uv run --extra dev python -m unittest tests.test_testing_route_rehearsal.TestingRouteRehearsalTests.test_api_reader_works_with_no_bridge_or_published_port tests.test_testing_application_activation.ApplicationRuntimeImageTests.test_private_http_program_uses_selected_proxy_without_following_redirects -v",
"dokployComposeEnvironment": "bash scripts/qualify-dokploy-compose-environment.sh",
"ci": "uv run --extra dev launchplane ci unittest-shard local",
"serviceRestartRehearsal": "LP_REHEARSAL_OPERATOR_HELPER=<installed-launchplane-skill>/scripts/launchplane-write-action.py uv run --extra dev python scripts/qualify-lane-service-restart.py",
"postgresIntegration": "LAUNCHPLANE_TEST_POSTGRES_URL=postgresql+psycopg://... uv run --extra dev launchplane ci postgres-integration",
"shardPlan": "uv run --extra dev launchplane ci unittest-shard plan --shard-count {shard_count} --timings-file {timings_file} --max-tests-per-target {max_tests_per_target} --max-seconds-per-target {max_seconds_per_target}",
"shardRun": "uv run --extra dev launchplane ci unittest-shard run --shard-count {shard_count} --shard-index {shard_index} --timings-file {timings_file} --max-tests-per-target {max_tests_per_target} --max-seconds-per-target {max_seconds_per_target} --timings-output {timings_output}",
"shardGranularity": "whole modules by default; large or timing-known-slow modules may split into unittest target IDs"
},
"lint": {
"default": "uv run --extra dev ruff check .",
"changedFiles": "uv run --extra dev ruff check {files}",
"roleWords": "uv run python scripts/validate_role_words.py"
},
"format": {
"check": "uv run --extra dev ruff format --check ."
},
"typecheck": {
"default": "uv run --extra dev mypy control_plane tests"
},
"build": {
"browser": "(cd frontend && pnpm test:browser)",
"frontend": "(cd frontend && pnpm validate)",
"container": "docker build -t launchplane-ci:test .",
"testingBrowser": "bash scripts/qualify-testing-browser.sh launchplane-ci:test",
"serviceCompose": "bash scripts/qualify-service-compose.sh launchplane-ci:test \"${LAUNCHPLANE_CI_POSTGRES_IMAGE:?set from the top-level env in .github/workflows/ci.yml}\""
},
"openapi": {
"export": "uv run launchplane service export-openapi --output frontend/generated/openapi-canonical.json",
"frontendGenerate": "(cd frontend && pnpm generate:openapi)",
"frontendTypes": "(cd frontend && pnpm generate:openapi-types)",
"frontendDrift": "(cd frontend && pnpm check:openapi-drift)"
},
"agentContract": {
"artifact": "contracts/agent-operator-contract.json",
"export": "uv run launchplane service export-agent-contract --output contracts/agent-operator-contract.json",
"drift": "(cd frontend && pnpm check:openapi-drift)"
},
"mergeTrainControllerReplyContract": {
"artifact": "contracts/merge-train-controller-reply.schema.json",
"export": "uv run --extra dev python -m control_plane.contracts.merge_train_controller_reply contracts/merge-train-controller-reply.schema.json",
"drift": "uv run --extra dev python -m unittest tests.test_merge_train_controller_reply_contract"
},
"audit": {
"pythonDependencies": "uv run --with pip-audit pip-audit --ignore-vuln PYSEC-2025-183",
"container": "docker run --rm -v /var/run/docker.sock:/var/run/docker.sock -v \"${RUNNER_TEMP}/trivy-cache:/root/.cache\" ghcr.io/aquasecurity/trivy:0.70.0 image --scanners vulnerability --ignore-unfixed --severity HIGH,CRITICAL --exit-code 1 launchplane-ci:test",
"configAuthority": "uv run launchplane service audit-config-authority --control-plane-root .",
"configAuthorityTransition": "uv run launchplane service plan-config-authority-transition --base-branch {base_branch} --required-checks-file {required_checks_file} --checks-app-id {checks_app_id}",
"repositoryPins": "uv run --extra dev python scripts/verify_repository_pins.py --repo-root . --revision {revision} --repository {repository}"
},
"inspection": {
"tool": "jetbrains",
"prepare": {
"python": {
"version": "3.14",
"moduleName": "launchplane-inspection",
"testRoots": [
"tests"
],
"sync": true,
"extras": [
"dev"
],
"requiredGeneratedState": [
".venv",
".idea"
]
}
},
"scopePreference": [
"changed_files",
"directory",
"whole_project"
],
"profile": ".idea/inspectionProfiles/Project_Default.xml",
"lanes": [
{
"id": "frontend",
"ide": "WebStorm",
"required": true,
"projectPath": "frontend",
"include": [
"frontend/**/*.ts",
"frontend/**/*.tsx",
"frontend/**/*.mts",
"frontend/**/*.cts",
"frontend/**/*.js",
"frontend/**/*.jsx",
"frontend/**/*.mjs",
"frontend/**/*.cjs"
]
},
{
"id": "python",
"ide": "PyCharm",
"required": true,
"include": [
"**/*.py",
"**/*.yaml",
"**/*.yml"
]
}
]
},
"docsRequiredWhen": [
"behavior changes",
"api changes",
"config changes",
"operations changes",
"ownership boundaries change",
"user-visible UI changes",
"runtime or config authority changes"
]
},
"importantWorkflows": [
"CI",
"Security",
"CodeQL",
"Deploy Launchplane",
"Dokploy Target Inspect",
"Dokploy Target Setup",
"Edge Endpoint Apply",
"Ingress Route Canary Apply",
"Ingress Route Apply",
"Ingress Route Audit Read",
"Ingress Route Dry Run",
"Reusable Ingress Route Apply",
"Reusable Ingress Route Dry Run",
"Live Target Runtime",
"Merge Train Policy Import",
"Merge Train Runner",
"Merge Train Stall Alert",
"Odoo Config Parameter Override",
"Odoo Prod Backup Verification",
"Odoo Prod Backup Restore Plan",
"Odoo Prod Backup Restore Apply",
"Reusable Odoo Prod Backup Restore Plan",
"Reusable Odoo Prod Backup Restore Apply",
"Reusable Odoo Prod Backup Verification",
"Odoo Prod Retained Volume Backup Import Plan",
"Odoo Prod Retained Volume Backup Import Apply",
"Reusable Odoo Prod Retained Volume Backup Import Plan",
"Reusable Odoo Prod Retained Volume Backup Import Apply",
"Odoo Website Bootstrap Override",
"Reusable Odoo Website Bootstrap Override",
"Odoo Stable Bootstrap",
"Reusable Stable Lane Repair",
"Reusable Tracked Target Logs",
"Reusable Generic Web Stable Deploy",
"Reusable Generic Web Prod Promotion",
"Reusable Generic Web Prod Rollback",
"Reusable Generic Web Stable Verification",
"Reusable Generic Web Preview",
"Reusable Generic Web Preview Lifecycle",
"Reusable Generic Web Preview Verification",
"Reusable Product Driver App Maintenance",
"Reusable Product Driver Post Deploy",
"Reusable Product Driver Prod Promotion",
"Reusable Product Driver Prod Rollback",
"Reusable Preview PR Feedback",
"Reusable Preview Feedback Status",
"Reusable Preview Request Notice",
"Odoo Target Replacement Plan",
"Odoo Target Replacement Apply",
"Reusable Odoo Target Replacement Plan",
"Reusable Odoo Target Replacement Apply",
"Preview Lifecycle",
"Public Ingress Monitor",
"Runner Host Hygiene",
"Runner Lane Lifecycle",
"External Route Binding Reconcile",
"Generic Web Preview Authorization",
"Reusable External Route Binding Reconcile",
"Reusable Authz Policy Reconcile",
"Route Binding Reconcile",
"Reusable Route Binding Reconcile",
"Odoo Testing Route Binding Refresh",
"Reusable Odoo Testing Route Binding Refresh",
"Product Environment Evidence",
"Product Expected Config",
"Product Health Monitoring",
"Product Onboarding Manifest (Advanced)",
"Product Prelaunch Rebuild Policy",
"Product Retirement",
"Reusable Product Retirement",
"Detached Application Retirement",
"Reusable Detached Application Retirement",
"Product Preview TLS",
"Reusable Generic Web Preview Authorization Apply",
"Reusable Product Health Monitoring",
"Reusable Product Prelaunch Rebuild Policy",
"Reusable Product Repo Config Authority",
"Provider Target Operations",
"Tracked Target Logs"
],
"relatedRepos": [
"cbusillo/sellyouroutboard",
"cbusillo/verireel",
"cbusillo/odoo-devkit",
"cbusillo/odoo-docker",
"cbusillo/odoo-shared-addons",
"cbusillo/odoo-tenant-cm",
"cbusillo/odoo-tenant-cm-website",
"cbusillo/odoo-tenant-opw",
"cbusillo/disable_odoo_online"
],
"launchplane": {
"enabled": true,
"service": {
"contextUrlEnv": "LAUNCHPLANE_CONTEXT_URL",
"operatorUrlEnv": "LAUNCHPLANE_OPERATOR_URL",
"localConfigExample": "launchplane/references/launchplane-operator.local.example.json"
},
"context": {
"enabled": true,
"helper": "launchplane/scripts/launchplane-context.py"
},
"operator": {
"enabled": true,
"helper": "launchplane/scripts/launchplane-write-action.py",
"requiresPrivateConfig": true
}
},
"githubSettings": {
"expected": {
"deleteBranchOnMerge": true
}
},
"githubSignals": {
"postMerge": {
"waitForActions": true,
"checkSecurityAndQuality": true
},
"capabilities": {
"codeScanning": "available",
"secretScanning": "unavailable",
"dependencyGraph": "available",
"dependabotAlerts": "available",
"ghcrPackage": "unknown",
"securityAdvisories": "unknown"
},
"refreshWhen": [
"repo visibility changes",
"GitHub plan changes",
"security settings change",
"token permissions change"
]
},
"cleanup": {
"deleteMergedLocalBranches": true,
"removeMergedCleanWorktrees": true
},
"metadataFreshness": {
"updateWhen": [
"docs routing changes",
"validation gates change",
"primary commands change",
"important workflows change",
"health endpoint changes",
"repo relationship changes",
"cleanup policy changes",
"ownership boundaries change"
]
}
}