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.
@@ -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.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "human-to-code",
3
- "version": "0.1.4",
3
+ "version": "0.1.6",
4
4
  "description": "Safely turn reviewed natural-language change contracts into validated code patches.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",