graphban-cli 0.8.0__tar.gz → 0.8.1__tar.gz

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 (31) hide show
  1. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/PKG-INFO +5 -3
  2. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/README.md +4 -2
  3. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/pyproject.toml +1 -1
  4. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/src/gban/cli.py +3 -1
  5. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/src/gban/data/stack_sdks.toml +31 -0
  6. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/src/gban/stackmap.py +475 -74
  7. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/tests/test_stackmap.py +236 -14
  8. graphban_cli-0.8.1/uv.lock +207 -0
  9. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/.gitignore +0 -0
  10. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/LICENSE +0 -0
  11. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/src/gban/__init__.py +0 -0
  12. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/src/gban/client.py +0 -0
  13. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/src/gban/config.py +0 -0
  14. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/src/gban/doctor.py +0 -0
  15. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/src/gban/gitignore.py +0 -0
  16. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/src/gban/setup.py +0 -0
  17. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/src/gban/skills/graphban-delegation/SKILL.md +0 -0
  18. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/src/gban/skills/graphban-orient/SKILL.md +0 -0
  19. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/src/gban/skills/graphban-prd/SKILL.md +0 -0
  20. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/src/gban/skills/graphban-review/SKILL.md +0 -0
  21. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/src/gban/skills/graphban-scan/SKILL.md +0 -0
  22. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/src/gban/skills/graphban-work/SKILL.md +0 -0
  23. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/src/gban/skills/watch-wave/SKILL.md +0 -0
  24. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/src/gban/swamp.py +0 -0
  25. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/tests/test_acts.py +0 -0
  26. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/tests/test_doctor.py +0 -0
  27. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/tests/test_login_projects.py +0 -0
  28. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/tests/test_packaging.py +0 -0
  29. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/tests/test_session.py +0 -0
  30. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/tests/test_setup.py +0 -0
  31. {graphban_cli-0.8.0 → graphban_cli-0.8.1}/tests/test_swamp.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: graphban-cli
3
- Version: 0.8.0
3
+ Version: 0.8.1
4
4
  Summary: gban — a Graphban client for the human at a terminal
5
5
  Project-URL: Homepage, https://github.com/asc-me/graphban
6
6
  Project-URL: Repository, https://github.com/asc-me/graphban
@@ -202,8 +202,10 @@ What it reads:
202
202
 
203
203
  - Compose files (`compose.yml`, `docker-compose.yml`, and the `compose.*` / `docker-compose.*` variants): a service with `build` is a deployable, a service with only `image` is infrastructure, and `depends_on` is an edge. `environment` contributes variable **names** and, when a value is a literal URL, the bare host.
204
204
  - Dockerfiles (`Dockerfile`, `Dockerfile.*`, `*.Dockerfile`), for the deployable they sit in and for a `FROM` image the table knows.
205
- - Dependency manifests (`package.json`, `pyproject.toml`, `requirements*.txt`, `go.mod`, `Cargo.toml`, `Gemfile`), matched against the known-SDK table and attributed to the deployable whose directory contains them.
206
- - `.env.example` only. A real `.env` is not a template and is not opened. Source files are not scanned.
205
+ - Dependency manifests (`package.json`, `pyproject.toml`, `requirements*.txt`, `go.mod`, `Cargo.toml`, `Gemfile`). Every `package.json` and `Cargo.toml` is a component named from the manifest's `name`. The known-SDK table adds edges; it is not what decides whether the component exists. `file:` and `workspace:` dependencies (and a Cargo `path` or `workspace = true`) are internal edges. Other manifests still become a component only when a dependency hits the table, and that edge is attributed to the component whose directory contains the file.
206
+ - Deploy manifests (`vercel.json`, `railway.json`, `railway.toml`, `fly.toml`, `netlify.toml`, `render.yaml`) are a platform node. The file body is not stored.
207
+ - `.env.example` only. A real `.env` is not a template and is not opened. A commented `KEY=` is read and the edge is `state: documented` rather than `set`. `*_TOKEN`, `*_CLIENT_ID`, and `*_CLIENT_SECRET` count, and so do `*_BASE` and `*_ISSUER` when the value is a URL. A passphrase (`AUTH_SECRET`, `ENCRYPTION_KEY`) is not an edge unless a table row names it. Values stay out of the record.
208
+ - Source files are not scanned. There is no source-HTTP pass in this command. stderr always prints a coverage line: files read, files that produced nothing, commented template keys skipped, and that source was not scanned. Exit 0 means the record was built.
207
209
 
208
210
  The known-SDK table ships at `cli/src/gban/data/stack_sdks.toml` and is versioned with `gban`. A checkout may add rows in `.graphban/stack-sdks.toml` (same shape); those rows are consulted first.
209
211
 
@@ -187,8 +187,10 @@ What it reads:
187
187
 
188
188
  - Compose files (`compose.yml`, `docker-compose.yml`, and the `compose.*` / `docker-compose.*` variants): a service with `build` is a deployable, a service with only `image` is infrastructure, and `depends_on` is an edge. `environment` contributes variable **names** and, when a value is a literal URL, the bare host.
189
189
  - Dockerfiles (`Dockerfile`, `Dockerfile.*`, `*.Dockerfile`), for the deployable they sit in and for a `FROM` image the table knows.
190
- - Dependency manifests (`package.json`, `pyproject.toml`, `requirements*.txt`, `go.mod`, `Cargo.toml`, `Gemfile`), matched against the known-SDK table and attributed to the deployable whose directory contains them.
191
- - `.env.example` only. A real `.env` is not a template and is not opened. Source files are not scanned.
190
+ - Dependency manifests (`package.json`, `pyproject.toml`, `requirements*.txt`, `go.mod`, `Cargo.toml`, `Gemfile`). Every `package.json` and `Cargo.toml` is a component named from the manifest's `name`. The known-SDK table adds edges; it is not what decides whether the component exists. `file:` and `workspace:` dependencies (and a Cargo `path` or `workspace = true`) are internal edges. Other manifests still become a component only when a dependency hits the table, and that edge is attributed to the component whose directory contains the file.
191
+ - Deploy manifests (`vercel.json`, `railway.json`, `railway.toml`, `fly.toml`, `netlify.toml`, `render.yaml`) are a platform node. The file body is not stored.
192
+ - `.env.example` only. A real `.env` is not a template and is not opened. A commented `KEY=` is read and the edge is `state: documented` rather than `set`. `*_TOKEN`, `*_CLIENT_ID`, and `*_CLIENT_SECRET` count, and so do `*_BASE` and `*_ISSUER` when the value is a URL. A passphrase (`AUTH_SECRET`, `ENCRYPTION_KEY`) is not an edge unless a table row names it. Values stay out of the record.
193
+ - Source files are not scanned. There is no source-HTTP pass in this command. stderr always prints a coverage line: files read, files that produced nothing, commented template keys skipped, and that source was not scanned. Exit 0 means the record was built.
192
194
 
193
195
  The known-SDK table ships at `cli/src/gban/data/stack_sdks.toml` and is versioned with `gban`. A checkout may add rows in `.graphban/stack-sdks.toml` (same shape); those rows are consulted first.
194
196
 
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "graphban-cli"
3
- version = "0.8.0"
3
+ version = "0.8.1"
4
4
  description = "gban — a Graphban client for the human at a terminal"
5
5
  readme = "README.md"
6
6
  requires-python = ">=3.12"
@@ -433,12 +433,14 @@ def cmd_stack(args) -> int:
433
433
  start = Path(args.repo).expanduser() if args.repo else Path.cwd()
434
434
  project = (config.resolve(args.project, config.PROJECT_ENV, "project") or "").strip()
435
435
  try:
436
- record, warnings = stackmap.build_record(start, project_id=project)
436
+ record, warnings, coverage = stackmap.build_record(start, project_id=project)
437
437
  except stackmap.MapError as exc:
438
438
  print(f"{PROG}: {exc}", file=sys.stderr)
439
439
  return EXIT_REFUSED
440
440
  for warning in warnings:
441
441
  print(f"{PROG}: {warning}", file=sys.stderr)
442
+ # Always. A three-node map that exits 0 is not a finished topology.
443
+ print(f"{PROG}: {coverage}", file=sys.stderr)
442
444
  text = stackmap.canonical(record)
443
445
  if args.dry_run:
444
446
  sys.stdout.write(text)
@@ -148,6 +148,27 @@ label = "SendGrid"
148
148
  protocol = "https"
149
149
  domains = ["sendgrid.com", "sendgrid.net"]
150
150
 
151
+ [[sdk]]
152
+ id = "resend"
153
+ packages = ["resend"]
154
+ node = "resend"
155
+ group = "external"
156
+ kind = ""
157
+ label = "Resend"
158
+ protocol = "https"
159
+ domains = ["resend.com"]
160
+
161
+ [[sdk]]
162
+ id = "vercel"
163
+ packages = ["@vercel/functions"]
164
+ prefix = "@vercel/"
165
+ node = "vercel"
166
+ group = "external"
167
+ kind = ""
168
+ label = "Vercel"
169
+ protocol = "https"
170
+ domains = ["vercel.com", "vercel.app"]
171
+
151
172
  [[sdk]]
152
173
  id = "supabase"
153
174
  packages = ["supabase", "@supabase/supabase-js"]
@@ -175,3 +196,13 @@ group = "infrastructure"
175
196
  kind = "redis"
176
197
  label = "Redis"
177
198
  protocol = "redis"
199
+
200
+ [[env]]
201
+ id = "creem"
202
+ names = ["CREEM_API_KEY"]
203
+ node = "creem"
204
+ group = "external"
205
+ kind = ""
206
+ label = "Creem"
207
+ protocol = "https"
208
+ domains = ["creem.io"]