human-to-code 0.1.4 → 0.1.6
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/assets/brand/BRAND.md +31 -0
- package/assets/brand/favicon-512.png +0 -0
- package/assets/brand/favicon.svg +5 -0
- package/assets/brand/logo-concept.png +0 -0
- package/assets/brand/logo-mark-dark.svg +7 -0
- package/assets/brand/logo-mark.svg +7 -0
- package/assets/brand/social-card.png +0 -0
- package/assets/brand/social-card.svg +42 -0
- package/assets/brand/wordmark-dark.svg +10 -0
- package/assets/brand/wordmark.svg +10 -0
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +28 -18
- package/dist/cli.js.map +1 -1
- package/dist/pipeline/simple.d.ts +56 -0
- package/dist/pipeline/simple.d.ts.map +1 -1
- package/dist/pipeline/simple.js +180 -7
- package/dist/pipeline/simple.js.map +1 -1
- package/docs/roadmap/README.md +69 -0
- package/docs/roadmap/bash.md +46 -0
- package/docs/roadmap/csharp.md +44 -0
- package/docs/roadmap/dart.md +43 -0
- package/docs/roadmap/docker.md +46 -0
- package/docs/roadmap/go.md +47 -0
- package/docs/roadmap/html-css.md +47 -0
- package/docs/roadmap/java.md +48 -0
- package/docs/roadmap/kotlin.md +44 -0
- package/docs/roadmap/php.md +42 -0
- package/docs/roadmap/ruby.md +46 -0
- package/docs/roadmap/sql.md +48 -0
- package/docs/roadmap/swift.md +43 -0
- package/docs/roadmap/terraform.md +47 -0
- package/docs/roadmap/yaml.md +47 -0
- package/package.json +1 -1
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Java support plan
|
|
2
|
+
|
|
3
|
+
## Status today
|
|
4
|
+
Level 1: `LANGUAGE_PROFILES` has `java` (`.java`), and `.java` is scanned for
|
|
5
|
+
inline `// @human` markers. No grounded profile.
|
|
6
|
+
|
|
7
|
+
## Target profile
|
|
8
|
+
- `Ecosystem`: `java`.
|
|
9
|
+
- Variants: `maven` (`pom.xml`) and `gradle` (`build.gradle`/`.kts`,
|
|
10
|
+
`settings.gradle`), with Spring Boot recorded as a framework signal first
|
|
11
|
+
and promoted to its own variant once the adapter proves reliable.
|
|
12
|
+
- Versions: JDK 17+ (from `maven.compiler.release` / Gradle toolchain block).
|
|
13
|
+
|
|
14
|
+
## Detection signals (static only)
|
|
15
|
+
- `pom.xml` parent/modules for Maven multi-module ownership.
|
|
16
|
+
- `settings.gradle(.kts)` `include(...)` for Gradle subprojects — parsed
|
|
17
|
+
textually and conservatively; unresolvable dynamic includes → `NEEDS_INPUT`.
|
|
18
|
+
- `src/main/java`, `src/test/java` for source/test roots; `@SpringBootApplication`
|
|
19
|
+
as an entry-point signal. Never execute Maven/Gradle.
|
|
20
|
+
|
|
21
|
+
## Version evidence
|
|
22
|
+
Maven: exact `<version>` pins in `pom.xml` (property-indirected versions
|
|
23
|
+
resolved only when the property is a literal in the same reactor).
|
|
24
|
+
Gradle: version catalogs (`gradle/libs.versions.toml`) and lockfiles
|
|
25
|
+
(`gradle.lockfile`) when present; otherwise the dependency is unproven and
|
|
26
|
+
API grounding for it must refuse.
|
|
27
|
+
|
|
28
|
+
## Validation plan
|
|
29
|
+
- Maven: `["mvn", "-B", "-q", "verify"]`. Gradle: `["./gradlew", "--no-daemon", "build"]`
|
|
30
|
+
only when the wrapper exists (wrapper jars are arbitrary code — sandbox only).
|
|
31
|
+
- JDK image recorded by version; mismatch is `INCONCLUSIVE`.
|
|
32
|
+
|
|
33
|
+
## Skill pack
|
|
34
|
+
Package/directory correspondence; constructor injection over field injection
|
|
35
|
+
(Spring); JUnit 5 conventions; no reflection-based config edits; generated
|
|
36
|
+
sources under `target/`/`build/` are protected.
|
|
37
|
+
|
|
38
|
+
## Risks & gates
|
|
39
|
+
Annotation processors, Gradle build-script edits, `module-info.java`
|
|
40
|
+
changes, and dependency additions are elevated-risk; build scripts are
|
|
41
|
+
executable code and must never be model-editable.
|
|
42
|
+
|
|
43
|
+
## Checklist
|
|
44
|
+
1. `Ecosystem` union + `analysis/adapters/java.ts`.
|
|
45
|
+
2. `java/maven`, `java/gradle` at `preview` in `support-matrix.ts`.
|
|
46
|
+
3. Register adapter; Java/Spring skill pack.
|
|
47
|
+
4. Adversarial tests: multi-module reactors, dynamic Gradle includes, version properties, wrapper absence, stable fingerprints.
|
|
48
|
+
5. Docs updates (MODULES.md, README support matrix).
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# Kotlin support plan
|
|
2
|
+
|
|
3
|
+
## Status today
|
|
4
|
+
Level 2 only: not in `LANGUAGE_PROFILES`; `.kt` not scanned for markers.
|
|
5
|
+
|
|
6
|
+
## Target profile
|
|
7
|
+
- `Ecosystem`: `kotlin` (JVM/Gradle first; Android later as its own variant
|
|
8
|
+
because of SDK/emulator validation constraints).
|
|
9
|
+
- Variants: `gradle-jvm`, then `android` (deferred until a headless
|
|
10
|
+
validation story exists — unit tests only, no instrumented tests).
|
|
11
|
+
- Versions: Kotlin ≥ 1.9 (from the Kotlin Gradle plugin version in the
|
|
12
|
+
version catalog or build script literals).
|
|
13
|
+
|
|
14
|
+
## Detection signals (static only)
|
|
15
|
+
- `build.gradle.kts` with `kotlin("jvm")`/`org.jetbrains.kotlin` plugin
|
|
16
|
+
(textual, conservative), `gradle/libs.versions.toml`,
|
|
17
|
+
`src/main/kotlin`, `src/test/kotlin`; `AndroidManifest.xml` marks the
|
|
18
|
+
android variant. Never execute Gradle.
|
|
19
|
+
|
|
20
|
+
## Version evidence
|
|
21
|
+
Version catalogs and `gradle.lockfile` when present; literal plugin/dependency
|
|
22
|
+
versions otherwise. Dynamic version expressions leave deps unproven.
|
|
23
|
+
|
|
24
|
+
## Validation plan
|
|
25
|
+
- `["./gradlew", "--no-daemon", "test"]` (wrapper = arbitrary code, sandbox
|
|
26
|
+
only, deps preinstalled/cached offline). Android: `testDebugUnitTest` only.
|
|
27
|
+
|
|
28
|
+
## Skill pack
|
|
29
|
+
Null-safety idioms, data classes, coroutines conventions (structured
|
|
30
|
+
concurrency, no `GlobalScope`), JUnit5/Kotest layout, `build/` and generated
|
|
31
|
+
KSP/KAPT output protected.
|
|
32
|
+
|
|
33
|
+
## Risks & gates
|
|
34
|
+
KSP/KAPT processors, Gradle script edits, multiplatform targets, and JNI are
|
|
35
|
+
elevated-risk. Shares most gates with the Java plan — build one Gradle
|
|
36
|
+
inventory helper both adapters reuse (`analyzer-utils.ts` addition).
|
|
37
|
+
|
|
38
|
+
## Checklist
|
|
39
|
+
0. Add `kotlin` to `LANGUAGE_PROFILES` (`.kt`) and scan `.kt`/`.kts` for `// @human`.
|
|
40
|
+
1. `Ecosystem` union + `analysis/adapters/kotlin.ts` (shared Gradle helpers with java.md's adapter).
|
|
41
|
+
2. `kotlin/gradle-jvm` at `preview`; `kotlin/android` deferred and documented.
|
|
42
|
+
3. Register adapter; Kotlin skill pack.
|
|
43
|
+
4. Tests: catalog vs literal versions, multiplatform refusal, Android detection, stable fingerprints.
|
|
44
|
+
5. Docs updates.
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# PHP support plan
|
|
2
|
+
|
|
3
|
+
## Status today
|
|
4
|
+
Level 2 only: not in `LANGUAGE_PROFILES` (direct path would fall back to a
|
|
5
|
+
`.txt` profile) and `.php` is not scanned for markers.
|
|
6
|
+
|
|
7
|
+
## Target profile
|
|
8
|
+
- `Ecosystem`: `php`.
|
|
9
|
+
- Variants: `composer-app`, `laravel` (artisan + `bootstrap/app.php`),
|
|
10
|
+
`symfony` later.
|
|
11
|
+
- Versions: PHP ≥ 8.2 (from `composer.json` `require.php`).
|
|
12
|
+
|
|
13
|
+
## Detection signals (static only)
|
|
14
|
+
- `composer.json` (`require`, `autoload.psr-4`), `composer.lock`,
|
|
15
|
+
`artisan`, `routes/`, `app/Http/` for Laravel; `phpunit.xml(.dist)` for
|
|
16
|
+
tests. Never run composer or artisan.
|
|
17
|
+
|
|
18
|
+
## Version evidence
|
|
19
|
+
`composer.lock` `packages[].version` is exact; `composer.json` ranges alone
|
|
20
|
+
leave dependencies unproven.
|
|
21
|
+
|
|
22
|
+
## Validation plan
|
|
23
|
+
- `["vendor/bin/phpunit"]`; `["vendor/bin/phpstan", "analyse"]` when
|
|
24
|
+
configured; `["php", "-l", "<changed files>"]` as a cheap syntax gate.
|
|
25
|
+
`vendor/` must be preinstalled in the image (no network).
|
|
26
|
+
|
|
27
|
+
## Skill pack
|
|
28
|
+
PSR-4 path↔namespace correspondence, PSR-12 style, Laravel conventions
|
|
29
|
+
(form requests for validation, Eloquent scopes), `vendor/` and framework
|
|
30
|
+
cache dirs protected.
|
|
31
|
+
|
|
32
|
+
## Risks & gates
|
|
33
|
+
Laravel migrations review-only; `eval`/dynamic includes opaque to import
|
|
34
|
+
grounding; service-provider registration changes are elevated-risk.
|
|
35
|
+
|
|
36
|
+
## Checklist
|
|
37
|
+
0. Add `php` to `LANGUAGE_PROFILES` (`.php`) and `.php` to `SCANNED_EXTENSIONS` — direct-path quick win.
|
|
38
|
+
1. `Ecosystem` union + `analysis/adapters/php.ts`.
|
|
39
|
+
2. `php/composer-app`, `php/laravel` at `preview`.
|
|
40
|
+
3. Register adapter; PHP/Laravel skill pack.
|
|
41
|
+
4. Tests: missing lockfile, PSR-4 mismatches, Laravel vs plain-composer ambiguity, stable fingerprints.
|
|
42
|
+
5. Docs updates.
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Ruby support plan
|
|
2
|
+
|
|
3
|
+
## Status today
|
|
4
|
+
Level 1: `LANGUAGE_PROFILES` has `ruby` (`.rb`); `.rb` is **not** yet in
|
|
5
|
+
`SCANNED_EXTENSIONS`, so inline `# @human` markers in Ruby files are not
|
|
6
|
+
discovered — adding it is a one-line prerequisite worth shipping early.
|
|
7
|
+
|
|
8
|
+
## Target profile
|
|
9
|
+
- `Ecosystem`: `ruby`.
|
|
10
|
+
- Variants: `gem` (gemspec), `rails` (config/application.rb + bin/rails),
|
|
11
|
+
`rack` (config.ru without Rails).
|
|
12
|
+
- Versions: Ruby ≥ 3.1 (from `.ruby-version` / Gemfile `ruby` directive).
|
|
13
|
+
|
|
14
|
+
## Detection signals (static only)
|
|
15
|
+
- `Gemfile` + `Gemfile.lock`; `*.gemspec`; `config/application.rb`,
|
|
16
|
+
`config/routes.rb`, `app/{models,controllers}` for Rails layout;
|
|
17
|
+
`spec/` (RSpec) vs `test/` (Minitest) for test roots. Never run `bundle`.
|
|
18
|
+
|
|
19
|
+
## Version evidence
|
|
20
|
+
`Gemfile.lock` `GEM/specs` entries are exact — this is the grounding source;
|
|
21
|
+
a Gemfile without a lockfile leaves dependencies unproven.
|
|
22
|
+
|
|
23
|
+
## Validation plan
|
|
24
|
+
- `["bundle", "exec", "rspec"]` or `["bundle", "exec", "rails", "test"]`
|
|
25
|
+
depending on detected harness; `["bundle", "exec", "rubocop"]` when
|
|
26
|
+
`.rubocop.yml` exists. Gems must be vendored/preinstalled in the image —
|
|
27
|
+
no network in the sandbox.
|
|
28
|
+
|
|
29
|
+
## Skill pack
|
|
30
|
+
Rails conventions (strong parameters, concerns, service objects), RSpec
|
|
31
|
+
structure, frozen-string-literal pragma, Zeitwerk autoloading constraints
|
|
32
|
+
(file path ↔ constant name), `db/schema.rb` and migrations protected.
|
|
33
|
+
|
|
34
|
+
## Risks & gates
|
|
35
|
+
Rails migrations (review-only, never applied), monkey-patching core classes,
|
|
36
|
+
`method_missing` metaprogramming, and native-extension gems are
|
|
37
|
+
elevated-risk. Dynamic requires make import grounding partially opaque —
|
|
38
|
+
document as an accepted limitation like Python's.
|
|
39
|
+
|
|
40
|
+
## Checklist
|
|
41
|
+
0. Add `.rb` to `SCANNED_EXTENSIONS` in `pipeline/simple.ts` (independent quick win).
|
|
42
|
+
1. `Ecosystem` union + `analysis/adapters/ruby.ts`.
|
|
43
|
+
2. `ruby/gem`, `ruby/rails`, `ruby/rack` at `preview`.
|
|
44
|
+
3. Register adapter; Ruby/Rails skill pack.
|
|
45
|
+
4. Tests: lockfile absence, Rails vs Rack ambiguity, engine subdirectories, stable fingerprints.
|
|
46
|
+
5. Docs updates.
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# SQL support plan
|
|
2
|
+
|
|
3
|
+
## Status today
|
|
4
|
+
Level 2 only: not in `LANGUAGE_PROFILES`. SQL also intersects an existing
|
|
5
|
+
invariant: database migrations may be *generated for review* but are never
|
|
6
|
+
applied — any SQL profile inherits that rule wholesale.
|
|
7
|
+
|
|
8
|
+
## Target profile
|
|
9
|
+
- `Ecosystem`: `sql`.
|
|
10
|
+
- Variant: `migration-set` — a directory of ordered migration files managed
|
|
11
|
+
by a recognizable tool (Flyway `V__*.sql`, dbmate, golang-migrate,
|
|
12
|
+
Prisma/TypeORM/Alembic SQL output). Free-floating `.sql` files stay on the
|
|
13
|
+
general fallback.
|
|
14
|
+
- Dialects recorded as signals (postgres/mysql/sqlite) from tool config, not
|
|
15
|
+
guessed from syntax.
|
|
16
|
+
|
|
17
|
+
## Detection signals (static only)
|
|
18
|
+
- Migration tool config (`flyway.conf`, `dbmate` env refs, `migrations/`
|
|
19
|
+
naming schemes), ordered filename conventions, and the owning framework's
|
|
20
|
+
adapter (a NestJS/FastAPI workspace may own its migrations directory).
|
|
21
|
+
|
|
22
|
+
## Version evidence
|
|
23
|
+
The "dependency" is the schema itself: prior migrations in order are the
|
|
24
|
+
grounding evidence a new migration builds on. No package versions.
|
|
25
|
+
|
|
26
|
+
## Validation plan
|
|
27
|
+
- Syntax-only gates in the sandbox: `["sqlfluff", "lint", "--dialect", "<dialect>"]`
|
|
28
|
+
or the tool's dry-run/check mode where one exists **without a database**.
|
|
29
|
+
- Optional stronger tier later: apply to a disposable in-container database
|
|
30
|
+
(sqlite/postgres in the image) — still never the operator's database.
|
|
31
|
+
|
|
32
|
+
## Skill pack
|
|
33
|
+
One reversible change per migration (paired down-migration when the tool
|
|
34
|
+
supports it), no destructive `DROP` without explicit contract authorization,
|
|
35
|
+
idempotence patterns, naming convention of the detected tool.
|
|
36
|
+
|
|
37
|
+
## Risks & gates
|
|
38
|
+
Everything: destructive statements, data backfills, and permission changes
|
|
39
|
+
are elevated-risk requiring explicit authorization in the contract. Applied
|
|
40
|
+
migration files are immutable history — protected paths; only new files may
|
|
41
|
+
be created.
|
|
42
|
+
|
|
43
|
+
## Checklist
|
|
44
|
+
1. `Ecosystem` union + `analysis/adapters/sql.ts` keyed on migration-tool detection.
|
|
45
|
+
2. `sql/migration-set` at `preview`.
|
|
46
|
+
3. SQL skill pack; extend patch policy tests for "create-only in migrations dir".
|
|
47
|
+
4. Tests: ordering, tool detection, destructive-statement gating, dialect signals.
|
|
48
|
+
5. Docs updates.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# Swift support plan
|
|
2
|
+
|
|
3
|
+
## Status today
|
|
4
|
+
Level 2 only: not in `LANGUAGE_PROFILES`; `.swift` not scanned for markers.
|
|
5
|
+
|
|
6
|
+
## Target profile
|
|
7
|
+
- `Ecosystem`: `swift`.
|
|
8
|
+
- Variants: `spm-package` (Package.swift) first. Xcode-project apps
|
|
9
|
+
(`.xcodeproj`/`.xcworkspace`) are explicitly **out of scope** initially —
|
|
10
|
+
pbxproj is too dynamic to analyze honestly; declare `UNSUPPORTED`.
|
|
11
|
+
- Versions: Swift ≥ 5.9 (from `// swift-tools-version:` header).
|
|
12
|
+
|
|
13
|
+
## Detection signals (static only)
|
|
14
|
+
- `Package.swift` tools-version comment line (parsed textually — the
|
|
15
|
+
manifest itself is Swift code and must never be evaluated), `Package.resolved`,
|
|
16
|
+
`Sources/`, `Tests/` layout.
|
|
17
|
+
|
|
18
|
+
## Version evidence
|
|
19
|
+
`Package.resolved` pins exact dependency versions; targets/products read
|
|
20
|
+
only from conservative literal parsing of `Package.swift`, refusing
|
|
21
|
+
computed manifests with `NEEDS_INPUT`.
|
|
22
|
+
|
|
23
|
+
## Validation plan
|
|
24
|
+
- `["swift", "build"]`, `["swift", "test"]` in a Swift toolchain image
|
|
25
|
+
(Linux). Apple-platform-only packages (UIKit imports) are `INCONCLUSIVE`
|
|
26
|
+
on a Linux sandbox — say so rather than skipping silently.
|
|
27
|
+
|
|
28
|
+
## Skill pack
|
|
29
|
+
Target/directory correspondence, XCTest conventions, access-control
|
|
30
|
+
(`public`/`internal`) discipline for library targets, `Package.resolved`
|
|
31
|
+
protected.
|
|
32
|
+
|
|
33
|
+
## Risks & gates
|
|
34
|
+
Manifest edits (executable code), macros/plugins (arbitrary build-time
|
|
35
|
+
code), and `@objc`/C interop are elevated-risk.
|
|
36
|
+
|
|
37
|
+
## Checklist
|
|
38
|
+
0. Add `swift` to `LANGUAGE_PROFILES` (`.swift`) and scan `.swift` for `// @human`.
|
|
39
|
+
1. `Ecosystem` union + `analysis/adapters/swift.ts`.
|
|
40
|
+
2. `swift/spm-package` at `preview`; Xcode variants declared unsupported.
|
|
41
|
+
3. Register adapter; Swift skill pack.
|
|
42
|
+
4. Tests: computed manifests refused, platform-gated packages, resolved-file absence, stable fingerprints.
|
|
43
|
+
5. Docs updates.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Terraform / HCL support plan
|
|
2
|
+
|
|
3
|
+
## Status today
|
|
4
|
+
Level 2 only: not in `LANGUAGE_PROFILES`; `.tf` not scanned for markers
|
|
5
|
+
(`# @human` comment form would parse; extension isn't scanned).
|
|
6
|
+
|
|
7
|
+
## Target profile
|
|
8
|
+
- `Ecosystem`: `terraform`.
|
|
9
|
+
- Variants: `root-module` (has backend/provider config) and `child-module`
|
|
10
|
+
(reusable module without backend). Workspaces with multiple root modules
|
|
11
|
+
need explicit targeting → `NEEDS_INPUT`, mirroring the multi-app rule.
|
|
12
|
+
- Versions: `required_version` and `required_providers` blocks.
|
|
13
|
+
|
|
14
|
+
## Detection signals (static only)
|
|
15
|
+
- `*.tf`/`*.tf.json`, `.terraform.lock.hcl`, `terraform.tfvars`,
|
|
16
|
+
`backend`/`provider` blocks (textual HCL parsing, conservative),
|
|
17
|
+
`modules/` layout.
|
|
18
|
+
|
|
19
|
+
## Version evidence
|
|
20
|
+
`.terraform.lock.hcl` pins exact provider versions with hashes — first-class
|
|
21
|
+
grounding evidence. Module registry sources with versions count; git-ref
|
|
22
|
+
module sources without a pinned rev are unproven.
|
|
23
|
+
|
|
24
|
+
## Validation plan
|
|
25
|
+
- `["terraform", "fmt", "-check"]` and `["terraform", "validate"]` with a
|
|
26
|
+
pre-initialized `.terraform` directory baked into the image/fixture
|
|
27
|
+
(validation has no network for `init`). `plan`/`apply` are out of scope:
|
|
28
|
+
plan needs credentials and state — never available in the sandbox.
|
|
29
|
+
|
|
30
|
+
## Skill pack
|
|
31
|
+
Variable/output descriptions and types, no inline credentials (secret
|
|
32
|
+
scanner already blocks values; the pack forbids the pattern), tagging
|
|
33
|
+
conventions, `for_each` over `count` for stable addresses, state-affecting
|
|
34
|
+
rename awareness (`moved` blocks).
|
|
35
|
+
|
|
36
|
+
## Risks & gates
|
|
37
|
+
Everything that changes resource addresses (renames without `moved`),
|
|
38
|
+
`destroy`-provoking changes, provider version bumps, and backend changes
|
|
39
|
+
are elevated-risk. The tool must be explicit that `validate`-clean ≠
|
|
40
|
+
apply-safe — plan/apply stay human-owned.
|
|
41
|
+
|
|
42
|
+
## Checklist
|
|
43
|
+
0. Scan `.tf` for `# @human` markers (direct-path quick win, `LANGUAGE_PROFILES` entry `hcl`/`.tf`).
|
|
44
|
+
1. `Ecosystem` union + `analysis/adapters/terraform.ts`.
|
|
45
|
+
2. `terraform/root-module`, `terraform/child-module` at `preview`.
|
|
46
|
+
3. Skill pack; tests for lockfile evidence, multi-root refusal, moved-block gating.
|
|
47
|
+
4. Docs updates (including the honest validate-vs-apply distinction in README).
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# YAML config support plan
|
|
2
|
+
|
|
3
|
+
## Status today
|
|
4
|
+
Level 2 only. YAML is not a programming language here — the meaningful
|
|
5
|
+
target is *schema-validated configuration editing* (CI workflows, K8s
|
|
6
|
+
manifests, app config), where correctness is checkable without execution.
|
|
7
|
+
|
|
8
|
+
## Target profile
|
|
9
|
+
- `Ecosystem`: `yaml-config`.
|
|
10
|
+
- Variants by proven schema family: `github-actions`
|
|
11
|
+
(`.github/workflows/*.yml`), `kubernetes` (apiVersion/kind docs),
|
|
12
|
+
`generic` (only when a JSON Schema is discoverable via
|
|
13
|
+
`# yaml-language-server: $schema=` or operator config).
|
|
14
|
+
- Unschema'd YAML stays on the general fallback — there is nothing to
|
|
15
|
+
validate, so nothing to profile.
|
|
16
|
+
|
|
17
|
+
## Detection signals (static only)
|
|
18
|
+
- Path conventions (`.github/workflows/`), `apiVersion`/`kind` keys,
|
|
19
|
+
explicit `$schema` pragmas, `kustomization.yaml`.
|
|
20
|
+
|
|
21
|
+
## Version evidence
|
|
22
|
+
The schema is the "dependency": pin the schema source (bundled
|
|
23
|
+
GitHub-Actions/K8s schemas shipped as immutable package data, like compiler
|
|
24
|
+
skills) and record which schema+version validated the patch.
|
|
25
|
+
|
|
26
|
+
## Validation plan
|
|
27
|
+
- Offline schema validation in-process or via a bundled validator; K8s:
|
|
28
|
+
`["kubeconform", "-strict", "<files>"]` with schemas preloaded in the
|
|
29
|
+
image. Never `kubectl apply`.
|
|
30
|
+
|
|
31
|
+
## Skill pack
|
|
32
|
+
Anchors/aliases used sparingly, no duplicate keys, quoting rules for
|
|
33
|
+
booleans/versions (Norway problem), GitHub Actions pinning conventions
|
|
34
|
+
(action SHAs), K8s resource limits present.
|
|
35
|
+
|
|
36
|
+
## Risks & gates
|
|
37
|
+
CI workflow edits are supply-chain-sensitive: adding `run:` steps, changing
|
|
38
|
+
action refs, or touching secrets contexts is elevated-risk and needs
|
|
39
|
+
explicit contract authorization. Secrets scanning already covers values;
|
|
40
|
+
the skill pack must also forbid *referencing* new secret names silently.
|
|
41
|
+
|
|
42
|
+
## Checklist
|
|
43
|
+
1. `Ecosystem` union + `analysis/adapters/yaml-config.ts`.
|
|
44
|
+
2. Variants at `preview`; bundle schema data as frozen package assets.
|
|
45
|
+
3. Skill pack; patch-policy tests for workflow-edit gating.
|
|
46
|
+
4. Tests: schema discovery, multi-doc files, duplicate keys, unschema'd refusal.
|
|
47
|
+
5. Docs updates.
|