bruno: regenerate collection from canonical docs + permanent docs↔Bruno parity gate

WO4. The old collection was the drifted artifact AGENTS.md warned about:
bodies pre-truncated at their first {{var}}, routes renamed server-side
but not here (/api/notes/:media_id, /api/book-matching/search,
/api/collections/:id/rules/test), an orphan universal-progress suite for
routes that no longer exist.

scripts/gen_bruno_from_docs.py emits one OpenCollection request per
frontmatter'd endpoint doc (191 requests): gate-verified example-request
JSON as body, {{env}} params per the environment file, device-token
routes get an explicit Bearer {{device_token}} header, login/register/
refresh keep the token-capture after-response scripts that chain the
collection. Old 1:1 mirrors deleted (128); hand-authored NewDevDBSetup,
environments, and edge-case suites kept. 30 scenario files with
truncated bodies (the documented corruption) deleted — they could not
run.

internal/docs/drift_test.go gains TestBrunoMirrorsDocs: every
frontmatter'd doc must have a Bruno request with matching method+URL
shape — the collection can never silently drift from the docs again.
opencollection.yml README block replaced with the real run instructions.

make test green (9 pkgs, parity test included in internal/docs).
This commit is contained in:
John O'Keefe committed 2026-10-24 18:35:51 -04:00
1 parent 6fc501b35a
commit acd82fff0a
353 files changed
+5165 -5293

No files matched your search

+27
View File
@@ -0,0 +1,27 @@
info:
name: Add Library Folder
type: http
seq: 1
http:
method: POST
url: '{{base_url}}/api/libraries/{{ebook_library_id}}/folders'
auth: inherit
body:
type: json
data: |-
{
"folder_path": "/path/to/comics"
}
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# Add Library Folder
`POST /api/libraries/:id/folders` — auth: jwt+admin.
Canonical reference: `docs/developer/api/libraries/add_library_folder.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
+21
View File
@@ -0,0 +1,21 @@
info:
name: Browse Library Folders
type: http
seq: 2
http:
method: GET
url: '{{base_url}}/api/libraries/browse'
auth: inherit
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# Browse Library Folders
`GET /api/libraries/browse` — auth: jwt+admin.
Canonical reference: `docs/developer/api/libraries/browse-folders.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
+29
View File
@@ -0,0 +1,29 @@
info:
name: Create Library
type: http
seq: 3
http:
method: POST
url: '{{base_url}}/api/libraries'
auth: inherit
body:
type: json
data: |-
{
"name": "Comics Collection",
"description": "Digital comics",
"type": "comics"
}
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# Create Library
`POST /api/libraries` — auth: jwt+admin.
Canonical reference: `docs/developer/api/libraries/create_library.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
+21
View File
@@ -0,0 +1,21 @@
info:
name: Delete Library
type: http
seq: 4
http:
method: DELETE
url: '{{base_url}}/api/libraries/{{ebook_library_id}}'
auth: inherit
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# Delete Library
`DELETE /api/libraries/:id` — auth: jwt+admin.
Canonical reference: `docs/developer/api/libraries/delete_library.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
+27
View File
@@ -0,0 +1,27 @@
info:
name: Delete Library Folder
type: http
seq: 5
http:
method: DELETE
url: '{{base_url}}/api/libraries/{{ebook_library_id}}/folders'
auth: inherit
body:
type: json
data: |-
{
"folder_path": "/path/to/library/folder"
}
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# Delete Library Folder
`DELETE /api/libraries/:id/folders` — auth: jwt+admin.
Canonical reference: `docs/developer/api/libraries/delete_library_folder.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
@@ -0,0 +1,21 @@
info:
name: Delete Processing Issue
type: http
seq: 6
http:
method: DELETE
url: '{{base_url}}/api/libraries/{{ebook_library_id}}/issues/{{issueid}}'
auth: inherit
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# Delete Processing Issue
`DELETE /api/libraries/:id/issues/:issueId` — auth: jwt+admin.
Canonical reference: `docs/developer/api/libraries/delete_processing_issue.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
+21
View File
@@ -0,0 +1,21 @@
info:
name: Get Library Details:<|end|><|start|> assistant to=edit<|channel|>analysis <|constrain|>xml<|message|><rfl:parameter name="path">
type: http
seq: 7
http:
method: GET
url: '{{base_url}}/api/libraries/{{ebook_library_id}}'
auth: inherit
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# Get Library Details:<|end|><|start|> assistant to=edit<|channel|>analysis <|constrain|>xml<|message|><rfl:parameter name="path">
`GET /api/libraries/:id` — auth: jwt+admin.
Canonical reference: `docs/developer/api/libraries/get_library.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
+21
View File
@@ -0,0 +1,21 @@
info:
name: Get Library Folders
type: http
seq: 8
http:
method: GET
url: '{{base_url}}/api/libraries/{{ebook_library_id}}/folders'
auth: inherit
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# Get Library Folders
`GET /api/libraries/:id/folders` — auth: jwt+admin.
Canonical reference: `docs/developer/api/libraries/get_library_folders.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
@@ -0,0 +1,21 @@
info:
name: Get Library Media Items
type: http
seq: 9
http:
method: GET
url: '{{base_url}}/api/libraries/{{ebook_library_id}}/media-items'
auth: inherit
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# Get Library Media Items
`GET /api/libraries/:id/media-items` — auth: jwt+admin.
Canonical reference: `docs/developer/api/libraries/get_library_media_items.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
+21
View File
@@ -0,0 +1,21 @@
info:
name: Get Library Statistics
type: http
seq: 10
http:
method: GET
url: '{{base_url}}/api/libraries/{{ebook_library_id}}/stats'
auth: inherit
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# Get Library Statistics
`GET /api/libraries/:id/stats` — auth: jwt+admin.
Canonical reference: `docs/developer/api/libraries/get_library_stats.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
+21
View File
@@ -0,0 +1,21 @@
info:
name: Get Library Types
type: http
seq: 11
http:
method: GET
url: '{{base_url}}/api/libraries/types'
auth: inherit
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# Get Library Types
`GET /api/libraries/types` — auth: none.
Canonical reference: `docs/developer/api/libraries/get_library_types.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
@@ -0,0 +1,21 @@
info:
name: Get Processing Issue Stats
type: http
seq: 12
http:
method: GET
url: '{{base_url}}/api/libraries/{{ebook_library_id}}/issues/stats'
auth: inherit
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# Get Processing Issue Stats
`GET /api/libraries/:id/issues/stats` — auth: jwt+admin.
Canonical reference: `docs/developer/api/libraries/get_processing_issue_stats.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
+21
View File
@@ -0,0 +1,21 @@
info:
name: Get Scan Settings
type: http
seq: 13
http:
method: GET
url: '{{base_url}}/api/libraries/scan-settings'
auth: inherit
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# Get Scan Settings
`GET /api/libraries/scan-settings` — auth: jwt+admin.
Canonical reference: `docs/developer/api/libraries/get_scan_settings.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
+21
View File
@@ -0,0 +1,21 @@
info:
name: Get Visible Libraries
type: http
seq: 14
http:
method: GET
url: '{{base_url}}/api/libraries/visibility'
auth: inherit
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# Get Visible Libraries
`GET /api/libraries/visibility` — auth: jwt.
Canonical reference: `docs/developer/api/libraries/get_visible_libraries.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
+21
View File
@@ -0,0 +1,21 @@
info:
name: List Libraries (Admin)
type: http
seq: 15
http:
method: GET
url: '{{base_url}}/api/libraries'
auth: inherit
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# List Libraries (Admin)
`GET /api/libraries` — auth: jwt+admin.
Canonical reference: `docs/developer/api/libraries/list_libraries.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
@@ -0,0 +1,21 @@
info:
name: List Processing Issues
type: http
seq: 16
http:
method: GET
url: '{{base_url}}/api/libraries/{{ebook_library_id}}/issues/list'
auth: inherit
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# List Processing Issues
`GET /api/libraries/:id/issues/list` — auth: jwt+admin.
Canonical reference: `docs/developer/api/libraries/list_processing_issues.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
@@ -0,0 +1,21 @@
info:
name: Resolve Processing Issue
type: http
seq: 17
http:
method: POST
url: '{{base_url}}/api/libraries/{{ebook_library_id}}/issues/{{issueid}}/{{mediaitemid}}/resolve'
auth: inherit
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# Resolve Processing Issue
`POST /api/libraries/:id/issues/:issueId/:mediaItemId/resolve` — auth: jwt+admin.
Canonical reference: `docs/developer/api/libraries/resolve_processing_issue.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
+21
View File
@@ -0,0 +1,21 @@
info:
name: Scan Library
type: http
seq: 18
http:
method: POST
url: '{{base_url}}/api/libraries/{{ebook_library_id}}/scan'
auth: inherit
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# Scan Library
`POST /api/libraries/:id/scan` — auth: jwt+admin.
Canonical reference: `docs/developer/api/libraries/scan_library.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
@@ -0,0 +1,28 @@
info:
name: Set Library Visibility
type: http
seq: 19
http:
method: POST
url: '{{base_url}}/api/libraries/visibility'
auth: inherit
body:
type: json
data: |-
{
"library_id": "library-uuid",
"is_visible": true
}
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# Set Library Visibility
`POST /api/libraries/visibility` — auth: jwt.
Canonical reference: `docs/developer/api/libraries/set_library_visibility.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
+28
View File
@@ -0,0 +1,28 @@
info:
name: Update Library
type: http
seq: 20
http:
method: PUT
url: '{{base_url}}/api/libraries/{{ebook_library_id}}'
auth: inherit
body:
type: json
data: |-
{
"name": "My Updated Library",
"description": "Updated description"
}
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# Update Library
`PUT /api/libraries/:id` — auth: jwt+admin.
Canonical reference: `docs/developer/api/libraries/update_library.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.
+28
View File
@@ -0,0 +1,28 @@
info:
name: Update Scan Settings
type: http
seq: 21
http:
method: PUT
url: '{{base_url}}/api/libraries/scan-settings'
auth: inherit
body:
type: json
data: |-
{
"scan_poll_interval_seconds": 3600,
"auto_scan_enabled": true
}
settings:
encodeUrl: true
timeout: 0
followRedirects: true
maxRedirects: 5
docs: |-
# Update Scan Settings
`PUT /api/libraries/scan-settings` — auth: jwt+admin.
Canonical reference: `docs/developer/api/libraries/update_scan_settings.md` (docs site → Developer → API). This request is GENERATED from that doc; edit the doc, not this file.