tool-compass 2.5.2__tar.gz → 2.5.4__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 (56) hide show
  1. {tool_compass-2.5.2 → tool_compass-2.5.4}/.github/workflows/ci.yml +123 -26
  2. {tool_compass-2.5.2 → tool_compass-2.5.4}/.github/workflows/publish.yml +3 -0
  3. {tool_compass-2.5.2 → tool_compass-2.5.4}/CHANGELOG.md +10 -0
  4. {tool_compass-2.5.2 → tool_compass-2.5.4}/PKG-INFO +1 -1
  5. tool_compass-2.5.4/atlas/README.md +101 -0
  6. tool_compass-2.5.4/atlas/boundaries.yaml +34 -0
  7. tool_compass-2.5.4/atlas/page.json +537 -0
  8. tool_compass-2.5.4/atlas/statistics.json +785 -0
  9. tool_compass-2.5.4/atlas/structure.json +10546 -0
  10. tool_compass-2.5.4/codecov.yml +18 -0
  11. {tool_compass-2.5.2 → tool_compass-2.5.4}/pyproject.toml +1 -1
  12. {tool_compass-2.5.2 → tool_compass-2.5.4}/.dockerignore +0 -0
  13. {tool_compass-2.5.2 → tool_compass-2.5.4}/.env.example +0 -0
  14. {tool_compass-2.5.2 → tool_compass-2.5.4}/.gitattributes +0 -0
  15. {tool_compass-2.5.2 → tool_compass-2.5.4}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
  16. {tool_compass-2.5.2 → tool_compass-2.5.4}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
  17. {tool_compass-2.5.2 → tool_compass-2.5.4}/.github/dependabot.yml +0 -0
  18. {tool_compass-2.5.2 → tool_compass-2.5.4}/.github/workflows/release-binaries.yml +0 -0
  19. {tool_compass-2.5.2 → tool_compass-2.5.4}/.github/workflows/release.yml +0 -0
  20. {tool_compass-2.5.2 → tool_compass-2.5.4}/.gitignore +0 -0
  21. {tool_compass-2.5.2 → tool_compass-2.5.4}/.pre-commit-config.yaml +0 -0
  22. {tool_compass-2.5.2 → tool_compass-2.5.4}/CODE_OF_CONDUCT.md +0 -0
  23. {tool_compass-2.5.2 → tool_compass-2.5.4}/CONTRIBUTING.md +0 -0
  24. {tool_compass-2.5.2 → tool_compass-2.5.4}/Dockerfile +0 -0
  25. {tool_compass-2.5.2 → tool_compass-2.5.4}/LICENSE +0 -0
  26. {tool_compass-2.5.2 → tool_compass-2.5.4}/Makefile +0 -0
  27. {tool_compass-2.5.2 → tool_compass-2.5.4}/README.md +0 -0
  28. {tool_compass-2.5.2 → tool_compass-2.5.4}/SCORECARD.md +0 -0
  29. {tool_compass-2.5.2 → tool_compass-2.5.4}/SECURITY.md +0 -0
  30. {tool_compass-2.5.2 → tool_compass-2.5.4}/SHIP_GATE.md +0 -0
  31. {tool_compass-2.5.2 → tool_compass-2.5.4}/_version.py +0 -0
  32. {tool_compass-2.5.2 → tool_compass-2.5.4}/analytics.py +0 -0
  33. {tool_compass-2.5.2 → tool_compass-2.5.4}/backend_client_mcp.py +0 -0
  34. {tool_compass-2.5.2 → tool_compass-2.5.4}/backend_client_simple.py +0 -0
  35. {tool_compass-2.5.2 → tool_compass-2.5.4}/bootstrap.py +0 -0
  36. {tool_compass-2.5.2 → tool_compass-2.5.4}/chain_indexer.py +0 -0
  37. {tool_compass-2.5.2 → tool_compass-2.5.4}/cli.py +0 -0
  38. {tool_compass-2.5.2 → tool_compass-2.5.4}/compass_config.example.json +0 -0
  39. {tool_compass-2.5.2 → tool_compass-2.5.4}/config.py +0 -0
  40. {tool_compass-2.5.2 → tool_compass-2.5.4}/docker-compose.yml +0 -0
  41. {tool_compass-2.5.2 → tool_compass-2.5.4}/docker-entrypoint.sh +0 -0
  42. {tool_compass-2.5.2 → tool_compass-2.5.4}/docs/index.md +0 -0
  43. {tool_compass-2.5.2 → tool_compass-2.5.4}/embedder.py +0 -0
  44. {tool_compass-2.5.2 → tool_compass-2.5.4}/fly.toml +0 -0
  45. {tool_compass-2.5.2 → tool_compass-2.5.4}/gateway.py +0 -0
  46. {tool_compass-2.5.2 → tool_compass-2.5.4}/indexer.py +0 -0
  47. {tool_compass-2.5.2 → tool_compass-2.5.4}/llms.txt +0 -0
  48. {tool_compass-2.5.2 → tool_compass-2.5.4}/requirements-dev.txt +0 -0
  49. {tool_compass-2.5.2 → tool_compass-2.5.4}/requirements.txt +0 -0
  50. {tool_compass-2.5.2 → tool_compass-2.5.4}/scripts/check-org-urls.sh +0 -0
  51. {tool_compass-2.5.2 → tool_compass-2.5.4}/scripts/regenerate-scorecard.sh +0 -0
  52. {tool_compass-2.5.2 → tool_compass-2.5.4}/scripts/sync-version.mjs +0 -0
  53. {tool_compass-2.5.2 → tool_compass-2.5.4}/scripts/verify-metrics.sh +0 -0
  54. {tool_compass-2.5.2 → tool_compass-2.5.4}/sync_manager.py +0 -0
  55. {tool_compass-2.5.2 → tool_compass-2.5.4}/tool_manifest.py +0 -0
  56. {tool_compass-2.5.2 → tool_compass-2.5.4}/ui.py +0 -0
@@ -34,23 +34,15 @@ on:
34
34
  - 'npm/**'
35
35
  - 'site/**'
36
36
  - '.github/workflows/**'
37
+ - 'atlas/**'
38
+ # Codecov reads its status and comment settings from this file.
39
+ - 'codecov.yml'
40
+ # No paths filter on pull requests, deliberately: this workflow emits the
41
+ # required status check, and a PR that matched no path (a docs-only change)
42
+ # would never report it and could never merge. Pushes to main stay
43
+ # paths-gated.
37
44
  pull_request:
38
45
  branches: [main]
39
- paths:
40
- - '*.py'
41
- - 'tests/**'
42
- - 'scripts/**'
43
- - 'requirements*.txt'
44
- - 'pyproject.toml'
45
- - 'Dockerfile'
46
- - 'docker-compose.yml'
47
- - 'Makefile'
48
- - 'fly.toml'
49
- - '.pre-commit-config.yaml'
50
- - '.dockerignore'
51
- - 'npm/**'
52
- - 'site/**'
53
- - '.github/workflows/**'
54
46
  # TST-FT-002: nightly-fuzz job runs Hypothesis in `nightly` profile
55
47
  # Mon/Wed/Fri at 09:00 UTC. Kept in this file to preserve the
56
48
  # two-workflow-per-repo limit.
@@ -185,6 +177,10 @@ jobs:
185
177
  # Reinstating 3.11 is a deliberate decision with its own test strategy
186
178
  # (a self-hosted runner, or a source build of hnswlib/numpy).
187
179
  python-version: ['3.12']
180
+ env:
181
+ # 'true' on the one leg whose coverage and test results go to Codecov,
182
+ # on a pull request or a push to the default branch.
183
+ COVERAGE_LEG: ${{ matrix.python-version == '3.12' && matrix.os == 'ubuntu-latest' && (github.event_name == 'pull_request' || github.ref == format('refs/heads/{0}', github.event.repository.default_branch)) }}
188
184
 
189
185
  steps:
190
186
  - name: Checkout repository
@@ -197,6 +193,19 @@ jobs:
197
193
  cache: 'pip'
198
194
  cache-dependency-path: 'requirements*.txt'
199
195
 
196
+ # The committed Atlas map (atlas/) must match the tree. Atlas needs
197
+ # Node 22 or later, and the map is the same on every cell, so it is
198
+ # checked on the Linux cell only.
199
+ - name: Set up Node for Atlas
200
+ if: matrix.python-version == '3.12' && matrix.os == 'ubuntu-latest'
201
+ uses: actions/setup-node@48b55a011bda9f5d6aeb4c2d9c7362e8dae4041e # v6.4.0
202
+ with:
203
+ node-version: '22'
204
+
205
+ - name: Atlas check
206
+ if: matrix.python-version == '3.12' && matrix.os == 'ubuntu-latest'
207
+ run: npx --yes @dogfood-lab/atlas@1.24.0 check
208
+
200
209
  - name: Install dependencies
201
210
  run: |
202
211
  python -m pip install --upgrade pip
@@ -220,16 +229,36 @@ jobs:
220
229
  retention-days: 14
221
230
 
222
231
  - name: Run tests with coverage
232
+ id: tests
223
233
  if: matrix.python-version == '3.12' && matrix.os == 'ubuntu-latest'
224
234
  run: |
225
- pytest --cov=. --cov-report=xml --cov-report=term -m "not integration"
226
-
227
- - name: Upload coverage to Codecov
228
- if: matrix.python-version == '3.12' && matrix.os == 'ubuntu-latest'
229
- uses: codecov/codecov-action@57e3a136b779b570ffcdbf80b3bdc90e7fab3de2 # v5
235
+ pytest --cov=. --cov-report=xml --cov-report=term -m "not integration" --junitxml=junit.xml
236
+
237
+ # The codecov job below uploads what these two steps save; this job
238
+ # never holds an OIDC token. Coverage is saved when the tests passed,
239
+ # and test results whenever they ran, failures included, because a
240
+ # failing test is what that report exists to show. A save step with no
241
+ # file to save fails the job. overwrite lets a re-run of this job
242
+ # replace the artifact its earlier attempt saved.
243
+ - name: Save coverage for Codecov
244
+ if: ${{ env.COVERAGE_LEG == 'true' }}
245
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
246
+ with:
247
+ name: codecov-coverage
248
+ path: coverage.xml
249
+ if-no-files-found: error
250
+ retention-days: 3
251
+ overwrite: true
252
+
253
+ - name: Save test results for Codecov
254
+ if: ${{ !cancelled() && env.COVERAGE_LEG == 'true' && steps.tests.outcome != 'skipped' }}
255
+ uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
230
256
  with:
231
- file: coverage.xml
232
- fail_ci_if_error: false
257
+ name: codecov-test-results
258
+ path: junit.xml
259
+ if-no-files-found: error
260
+ retention-days: 3
261
+ overwrite: true
233
262
 
234
263
  - name: Run pip-audit (report only)
235
264
  if: matrix.python-version == '3.12' && matrix.os == 'ubuntu-latest'
@@ -256,6 +285,68 @@ jobs:
256
285
  run: |
257
286
  pip-audit -r requirements.txt
258
287
 
288
+ codecov:
289
+ # Uploads what the test job saved, from a job of its own, so the OIDC
290
+ # token that signs in to Codecov never exists beside the install and the
291
+ # tests. The checkout, which keeps no token, is there only so Codecov can
292
+ # match report paths to files: the job installs nothing and runs none of
293
+ # the repository's code. It runs whenever the test job ran, failures
294
+ # included, so failing tests still reach Codecov, and only on the events
295
+ # that collect coverage. A run the concurrency group cancels uploads
296
+ # nothing, and each run reads only its own artifacts.
297
+ needs: test
298
+ if: ${{ !cancelled() && needs.test.result != 'cancelled' && needs.test.result != 'skipped' && (github.event_name == 'pull_request' || github.ref == format('refs/heads/{0}', github.event.repository.default_branch)) }}
299
+ runs-on: ubuntu-latest
300
+ timeout-minutes: 10
301
+ permissions:
302
+ contents: read
303
+ id-token: write
304
+ steps:
305
+ - uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
306
+ with:
307
+ persist-credentials: false
308
+
309
+ # Each artifact unpacks where the test job wrote its files. A pattern
310
+ # that matches nothing, unlike a name, does not fail: a failing test
311
+ # run saves test results and no coverage.
312
+ - name: Download coverage
313
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
314
+ with:
315
+ pattern: codecov-coverage
316
+ path: .
317
+
318
+ - name: Download test results
319
+ uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
320
+ with:
321
+ pattern: codecov-test-results
322
+ path: .
323
+
324
+ # After a passing test job both artifacts exist, so each upload runs,
325
+ # and fails the job if its files are missing; after a failing one each
326
+ # runs when its files arrived. Both sign in with OIDC, fail the job when
327
+ # Codecov refuses the report, and run the Codecov CLI at a fixed version
328
+ # rather than whichever is newest.
329
+ - name: Upload coverage to Codecov
330
+ if: ${{ needs.test.result == 'success' || hashFiles('coverage.xml') != '' }}
331
+ uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1
332
+ with:
333
+ version: v11.3.1
334
+ use_oidc: true
335
+ fail_ci_if_error: true
336
+ disable_search: true
337
+ files: ./coverage.xml
338
+
339
+ - name: Upload test results to Codecov
340
+ if: ${{ needs.test.result == 'success' || hashFiles('junit.xml') != '' }}
341
+ uses: codecov/codecov-action@303a32d7a59b442fa8d48b6a1cc6825c09c847a5 # v7.1.1
342
+ with:
343
+ version: v11.3.1
344
+ use_oidc: true
345
+ fail_ci_if_error: true
346
+ report_type: test_results
347
+ disable_search: true
348
+ files: ./junit.xml
349
+
259
350
  npm-wrapper:
260
351
  name: npm wrapper tests
261
352
  runs-on: ubuntu-latest
@@ -285,7 +376,9 @@ jobs:
285
376
  # On failure, opens a tracking issue via actions/github-script.
286
377
  nightly-fuzz:
287
378
  name: Nightly Hypothesis fuzz
288
- if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
379
+ # A required check, so it also runs on pull requests, with the `ci` profile
380
+ # (200 examples); the schedule and manual runs keep the slow `nightly` one.
381
+ if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch' || github.event_name == 'pull_request'
289
382
  runs-on: ubuntu-latest
290
383
  # CT-B-011: Hypothesis nightly profile is deliberately slow — 45 min cap
291
384
  # is wider than the test job because fuzz examples are unbounded.
@@ -313,10 +406,10 @@ jobs:
313
406
  - name: Run Hypothesis (nightly profile)
314
407
  id: fuzz
315
408
  run: |
316
- HYPOTHESIS_PROFILE=nightly pytest -m "not integration"
409
+ HYPOTHESIS_PROFILE=${{ github.event_name == 'pull_request' && 'ci' || 'nightly' }} pytest -m "not integration"
317
410
 
318
411
  - name: Open tracking issue on failure
319
- if: failure() && steps.fuzz.conclusion == 'failure'
412
+ if: failure() && steps.fuzz.conclusion == 'failure' && github.event_name != 'pull_request'
320
413
  # SHA-pinned per SLSA L3 supply-chain hygiene (CT-B-001). nightly-fuzz
321
414
  # carries issues:write, so a compromised v7 mutable tag would inherit
322
415
  # issue-creation capability. Bump via dependabot's github-actions sweep.
@@ -485,7 +578,9 @@ jobs:
485
578
  # ===========================================================================
486
579
  pages-build:
487
580
  name: Build site
488
- if: github.ref == 'refs/heads/main' && github.event_name == 'push'
581
+ # A required check, so the site also builds on pull requests; only a push to
582
+ # main configures Pages and uploads the artifact that pages-deploy publishes.
583
+ if: github.event_name == 'pull_request' || (github.ref == 'refs/heads/main' && github.event_name == 'push')
489
584
  runs-on: ubuntu-latest
490
585
  # CT-B-011: Starlight npm ci + Astro build; 10 min is generous.
491
586
  timeout-minutes: 10
@@ -502,6 +597,7 @@ jobs:
502
597
  # silently dependent on Settings → Pages UI state. configure-pages
503
598
  # is idempotent and exposes the base path to downstream steps.
504
599
  - name: Configure Pages
600
+ if: github.event_name == 'push'
505
601
  uses: actions/configure-pages@45bfe0192ca1faeb007ade9deae92b16b8254a0d # v6.0.0
506
602
 
507
603
  - name: Install site dependencies
@@ -513,6 +609,7 @@ jobs:
513
609
  run: npm run build
514
610
 
515
611
  - uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5.0.0
612
+ if: github.event_name == 'push'
516
613
  with:
517
614
  path: site/dist
518
615
 
@@ -34,6 +34,9 @@ env:
34
34
  REGISTRY: ghcr.io
35
35
  IMAGE_NAME: ${{ github.repository }}
36
36
 
37
+ permissions:
38
+ contents: read
39
+
37
40
  jobs:
38
41
  build:
39
42
  name: Build package
@@ -7,6 +7,16 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [2.5.4] - 2026-10-14
11
+
12
+ ### Security
13
+
14
+ - **Workflow jobs run with a read-only token by default.** `publish.yml` had jobs with no `permissions` block, so they inherited the repository default token. A top-level `permissions: contents: read` now applies to every job that does not set its own (the jobs that publish or write keep theirs). Closes the `actions/missing-workflow-permissions` code-scanning alerts.
15
+
16
+ ## [2.5.3] - 2026-10-14
17
+
18
+ - Build fake credentials at runtime in config and HTTP backend tests so secret scanners do not flag test fixtures.
19
+
10
20
  ## [2.5.2] - 2026-09-09
11
21
 
12
22
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: tool-compass
3
- Version: 2.5.2
3
+ Version: 2.5.4
4
4
  Summary: Semantic MCP tool discovery gateway - find tools by intent, not memory
5
5
  Project-URL: Homepage, https://github.com/mcp-tool-shop-org/tool-compass
6
6
  Project-URL: Documentation, https://github.com/mcp-tool-shop-org/tool-compass#readme
@@ -0,0 +1,101 @@
1
+ # tool-compass: how it works
2
+
3
+ Mapped at 2026-10-14 from commit a7e6492 by Atlas 1.24.0.
4
+
5
+ ## What this is
6
+
7
+ 8 parts, mostly Python (46 files), JavaScript (4), shell (4), CSS (2), TypeScript (2) and Astro (1). Work enters through 7 doors; the busiest is CI, which reaches 5 parts. It publishes to PyPI, @mcptoolshop/tool-compass to npm, and a container image. It deploys a site to GitHub Pages. People run tool-compass and tool-compass-ui.
8
+
9
+ ## What changed since 2026-10-01 (e6e5806)
10
+
11
+ Nothing structural changed since 2026-10-01; 9 files changed content.
12
+
13
+ ## What comes in
14
+
15
+ 1. **CI.** On a pull request to main; on a push to main touching 16 paths; on a schedule (`0 9 * * 1,3,5`); or by hand. Runs docker-entrypoint.sh, gateway.py, scripts/check-org-urls.sh and 35 more; checks requirements.txt; packs LICENSE, README.md, _version.py and 15 more into an image. Except on a schedule or when run by hand, it also runs site/astro.config.mjs and site/src/.
16
+ 2. **Publish.** When a release is published; when the workflow Release completes; or by hand. Runs cli.py, docker-entrypoint.sh and gateway.py; packs LICENSE, README.md, _version.py and 15 more into an image.
17
+ 3. **Release.** When a tag matching `v*` is pushed; or by hand. Runs ui.py.
18
+ 4. **Release Binaries.** When a release is published; on a `workflow_call` event; or by hand. Runs ui.py; builds cli.py.
19
+ 5. **tool-compass** (a command people run, from npm/package.json). Runs npm/bin/tool-compass.js.
20
+ 6. **tool-compass** (a command people run, from pyproject.toml). Runs cli.py.
21
+ 7. **tool-compass-ui** (a command people run). Runs ui.py.
22
+
23
+ ## What happens through CI
24
+
25
+ 1. The workflow runs npm/test/ in npm, docker-entrypoint.sh and gateway.py in the repository root, scripts/check-org-urls.sh, scripts/regenerate-scorecard.sh and scripts/verify-metrics.sh in scripts, and tests/ in tests; it checks requirements.txt in the repository root; it packs 18 files in the repository root into an image.
26
+ 1. Inside gateway.py, `main` does, in order: `config.py` (6 steps), `backend_client_simple.py` (3 steps), `ToolDefinition`, `Embedder`, `indexer.py` (3 steps), `disconnect_all` (SimpleBackendManager) and `indexer.py` (3 steps).
27
+ 2. Or, when `isinstance(explicit, str) and explicit.strip()`, `main` does `redact_url_credentials` instead.
28
+ 3. Or, when `_is_ollama_embedding_provider(cfg)`, `main` does `redact_url_credentials` instead.
29
+ 4. Or, when `not tools`, `main` does `disconnect_all` (SimpleBackendManager) instead.
30
+ 5. `main` returns early 1 more way.
31
+ 2. Except on a schedule or when run by hand, it also runs site/astro.config.mjs and site/src/.
32
+ 3. It uploads coverage to Codecov.
33
+ 4. It runs the pre-commit hooks.
34
+ 5. It deploys the site on a push to main.
35
+
36
+ ## Who reads the results
37
+
38
+ CI writes nothing this map can see.
39
+
40
+ ## The other doors
41
+
42
+ **Publish** runs cli.py, docker-entrypoint.sh and gateway.py, packs LICENSE, README.md, _version.py and 15 more into an image, and publishes to PyPI and a container image.
43
+
44
+ **Release** runs ui.py, publishes @mcptoolshop/tool-compass to npm, creates a GitHub release, and uploads artifacts/* to the release.
45
+
46
+ **Release Binaries** runs ui.py, creates a GitHub release, and builds cli.py into binaries for darwin-arm64, linux-x64 and win-x64 and uploads them to the release.
47
+
48
+ **tool-compass** (a command people run, from npm/package.json) runs npm/bin/tool-compass.js.
49
+
50
+ **tool-compass** (a command people run, from pyproject.toml) runs cli.py.
51
+
52
+ **tool-compass-ui** (a command people run) runs ui.py.
53
+
54
+ ## What breaks what
55
+
56
+ - **the repository root** is imported only from tests, by 1 part (tests), and sits on the path of 6 doors.
57
+ - **npm** is imported by no other part and sits on the path of 2 doors.
58
+
59
+ ## What tends to change together
60
+
61
+ No two source files changed together often enough to name.
62
+
63
+ Window: 180 days; a pair counts from 3 shared commits, since 0 source files reach 10 revisions; the floor rises to 10 when 25 do.
64
+
65
+ ## What no test touches
66
+
67
+ - **scripts** is imported by no test.
68
+
69
+ npm is tested only by its package's own test script, which a workflow runs.
70
+
71
+ ## Written but never read
72
+
73
+ Every written place has a reader.
74
+
75
+ ## Helpers that look duplicated
76
+
77
+ No two parts export a helper that looks alike.
78
+
79
+ ## Generated, never hand-edited
80
+
81
+ - **npm/bin/tool-compass.js** has a block written by scripts/sync-version.mjs.
82
+ - **npm/package.json** has a block written by scripts/sync-version.mjs.
83
+
84
+ ## Hand-authored
85
+
86
+ People write .github/, assets/, docs/ and site/; 11 writes with paths built at run time may land here.
87
+
88
+ ## Where to start
89
+
90
+ .github/workflows/ci.yml → gateway.py → config.py → backend_client_simple.py → tool_manifest.py → embedder.py → indexer.py
91
+
92
+ Read those in order to follow one pull request end to end.
93
+
94
+ ## What this map cannot see
95
+
96
+ - 11 writes and 4 reads use paths built at run time and are not named here.
97
+ - 5 writes and 35 reads go to a path their caller passes, not to this repository.
98
+ - There is a docker-compose.yml and a fly.toml that no workflow runs; what deploys from them does so from outside this repository, and is not on this page.
99
+ - Statistics confidence is low: fewer than 25 source files reach 10 revisions in the window.
100
+
101
+ Regenerate with `npx --yes @dogfood-lab/atlas map`.
@@ -0,0 +1,34 @@
1
+ summary: ""
2
+ boundaries:
3
+ - name: .github
4
+ globs:
5
+ - .github/**
6
+ role: config
7
+ - name: assets
8
+ globs:
9
+ - assets/**
10
+ role: data
11
+ - name: docs
12
+ globs:
13
+ - docs/**
14
+ role: data
15
+ - name: npm
16
+ globs:
17
+ - npm/**
18
+ role: code
19
+ - name: root
20
+ globs:
21
+ - "*"
22
+ role: code
23
+ - name: scripts
24
+ globs:
25
+ - scripts/**
26
+ role: code
27
+ - name: site
28
+ globs:
29
+ - site/**
30
+ role: site
31
+ - name: tests
32
+ globs:
33
+ - tests/**
34
+ role: test