feat: add backward-compatible source search #283

Merged
erik merged 3 commits from feat/task-4c9e432c-sources-find into main 2026-09-24 09:35:53 -05:00
Owner

Summary

Task: task-4c9e432c — Add a sources find command to the Slug CLI

  • Add slug --site <name> sources find <query> [--json] with case-insensitive literal substring matching on names and URLs, complete source results, and successful empty-result handling.
  • Add optional q to GET /api/v1/sources; absent/blank queries preserve the existing list shape, authentication, ordering, and relationships.
  • Always filter results in the CLI too, so existing sites that ignore q still return correct matches. No site upgrade or database migration is required to use the command.
  • Keep matching semantics aligned (trimmed query, JavaScript Unicode lowercasing, literal substring matching); filter server-side rows before hydrating relationships.
  • Document CLI/API usage and reviewed file-by-file migration steps for existing sites. No endpoint migration into slug-api is included.
  • Make successful source requests observable with structured Sources listed logs containing the effective query and returned count, without credentials, unrelated query parameters, or result contents.

Verification

  • ./scripts/pre-pr.sh — passed (generated CSS, formatting, linting, all workspace typechecks and tests, including integration tests).
  • npm run build — passed.
  • Focused CLI/API/OpenAPI tests — 164 passed.
  • CLI suite — 212 passed; template-site suite — 379 passed.
  • Logging suite — 20 source API tests passed, including query/count logging and credential exclusion.
  • Live dev testing confirmed name/URL filtering, JSON, empty matches, blank query handling, and unchanged source records. Logs visibly report q=FIND DEMO, results=2 and a no-match query with results=0.
  • Built CLI --help lists sources find <query> [--json].
  • Regression cases cover updated and older sites, Unicode case matching, literal %, _, brackets and query-string characters, null URLs, multiple/no results, usage validation, authentication/network/API errors, and read-only behavior.

Compatibility

Existing source commands and unfiltered API requests are unchanged. CLI queries must be nonblank; API q may be absent or blank for an unfiltered list. Server-side filtering requires a reviewed generated-site source update and redeployment, not merely a slug-api package update.

No release or merge is included. Await CI and independent review, then explicit human merge approval.

## Summary Task: task-4c9e432c — Add a sources find command to the Slug CLI - Add `slug --site <name> sources find <query> [--json]` with case-insensitive literal substring matching on names and URLs, complete source results, and successful empty-result handling. - Add optional `q` to `GET /api/v1/sources`; absent/blank queries preserve the existing list shape, authentication, ordering, and relationships. - Always filter results in the CLI too, so existing sites that ignore `q` still return correct matches. No site upgrade or database migration is required to use the command. - Keep matching semantics aligned (trimmed query, JavaScript Unicode lowercasing, literal substring matching); filter server-side rows before hydrating relationships. - Document CLI/API usage and reviewed file-by-file migration steps for existing sites. No endpoint migration into `slug-api` is included. - Make successful source requests observable with structured `Sources listed` logs containing the effective query and returned count, without credentials, unrelated query parameters, or result contents. ## Verification - `./scripts/pre-pr.sh` — passed (generated CSS, formatting, linting, all workspace typechecks and tests, including integration tests). - `npm run build` — passed. - Focused CLI/API/OpenAPI tests — 164 passed. - CLI suite — 212 passed; template-site suite — 379 passed. - Logging suite — 20 source API tests passed, including query/count logging and credential exclusion. - Live dev testing confirmed name/URL filtering, JSON, empty matches, blank query handling, and unchanged source records. Logs visibly report `q=FIND DEMO`, `results=2` and a no-match query with `results=0`. - Built CLI `--help` lists `sources find <query> [--json]`. - Regression cases cover updated and older sites, Unicode case matching, literal `%`, `_`, brackets and query-string characters, null URLs, multiple/no results, usage validation, authentication/network/API errors, and read-only behavior. ## Compatibility Existing source commands and unfiltered API requests are unchanged. CLI queries must be nonblank; API `q` may be absent or blank for an unfiltered list. Server-side filtering requires a reviewed generated-site source update and redeployment, not merely a `slug-api` package update. No release or merge is included. Await CI and independent review, then explicit human merge approval.
feat: find sources without requiring existing sites to upgrade
All checks were successful
CI / build-lint-test (pull_request) Successful in 2m11s
cbf8a95575
Task: #task-4c9e432c
Author
Owner

Review update

  • PR: #283 (open), commit cbf8a955756b9fca1b8a8be5c127eee591f6d3eb.
  • Task: task-4c9e432c.
  • Result: changes-requested — the implementation and compatibility coverage satisfy the functional criteria, but the explicitly required CLI help documentation is incomplete.

Acceptance criteria

  1. met — Partial name/URL matching is case-insensitive and null-safe in runSourcesFindCommand; CLI cases cover both fields and absent URLs.
  2. met — The existing API route forwards q to listSources; CLI and service use trimmed queries, JavaScript lowercasing, and literal substring comparison.
  3. met — Absent/blank API queries preserve the existing SQL ordering, hydration, response envelope, and authentication middleware. Existing CLI source command implementations remain unchanged.
  4. met — CLI always filters returned records; tests exercise both server-filtered responses and older sites returning all sources.
  5. met — All matches retain IDs, names, URLs and relationships. Search uses GET/read-only selection; tests check requests and unchanged source rows. No migration is introduced.
  6. met — JSON preserves the normal data envelope, human output reuses the existing source-list formatter, and empty matches succeed with No sources found. or an empty data array.
  7. met — Missing/blank/invalid arguments fail before requests. Existing site selection and client error handling are reused; tests distinguish authentication, API and network failures from empty results.
  8. met — Added CLI/API/OpenAPI tests cover name/URL/case matching, literal special characters, absent URLs, multiple/no matches, argument validation, JSON, error handling, authentication and older-site compatibility.
  9. partial — README, source-command specification, API specification/OpenAPI and customization-safe upgrade/redeployment instructions are present. CLI help only adds the command syntax; it does not describe matching behavior, examples or older-site compatibility as explicitly required.
  10. met — Resource endpoints remain in the template-site route/service structure; no migration into @evcraddock/slug-api.
  • Criteria: 10 total, 9 met, 1 incomplete (partial), 0 not-evident. criteria_missing=1 counts the incomplete criterion.

Blocking issues

  • 1 — Complete the required CLI help documentation (criterion 9). cli/src/commands.ts:76 adds only sources find <query> [--json] to HELP_TEXT; the help ends at line 113 without search semantics, examples or compatibility guidance. Add a concise help section explaining case-insensitive literal name/URL matching and local filtering for older sites, with a --site example (and JSON usage), and extend the help assertion in cli/src/__tests__/commands.test.ts:235 to cover that content. The detailed external docs do not fulfill the separate requirement to expose this information in CLI help.

Warnings

  • None.

Verification and pipeline state

  • CI: passed, using the supplied confirmed Forgejo run #471, build-lint-test, for cbf8a95575. Did not invoke the known-broken fj pr status command.
  • Supplied verification logs inspected: /tmp/slug-sources-pre-pr.log (all checks passed), /tmp/slug-sources-build.log (build completed), /tmp/slug-sources-focused.log (164 tests passed).
  • Independent review compared all current acceptance criteria against the PR diff and directly relevant implementation/tests/docs. No broad checks were rerun; no source or task-status changes, and no merge.

Final verdict

  • changes-requested: 1 blocking issue, 0 warnings.
  • Next: Complete the CLI help and its regression assertion, then rerun review. Merge remains gated on explicit human approval.
### Review update - PR: https://forge.caradoc.com/erik/slugkit/pulls/283 (open), commit `cbf8a955756b9fca1b8a8be5c127eee591f6d3eb`. - Task: `task-4c9e432c`. - Result: **changes-requested** — the implementation and compatibility coverage satisfy the functional criteria, but the explicitly required CLI help documentation is incomplete. ### Acceptance criteria 1. **met** — Partial name/URL matching is case-insensitive and null-safe in `runSourcesFindCommand`; CLI cases cover both fields and absent URLs. 2. **met** — The existing API route forwards `q` to `listSources`; CLI and service use trimmed queries, JavaScript lowercasing, and literal substring comparison. 3. **met** — Absent/blank API queries preserve the existing SQL ordering, hydration, response envelope, and authentication middleware. Existing CLI source command implementations remain unchanged. 4. **met** — CLI always filters returned records; tests exercise both server-filtered responses and older sites returning all sources. 5. **met** — All matches retain IDs, names, URLs and relationships. Search uses GET/read-only selection; tests check requests and unchanged source rows. No migration is introduced. 6. **met** — JSON preserves the normal data envelope, human output reuses the existing source-list formatter, and empty matches succeed with `No sources found.` or an empty data array. 7. **met** — Missing/blank/invalid arguments fail before requests. Existing site selection and client error handling are reused; tests distinguish authentication, API and network failures from empty results. 8. **met** — Added CLI/API/OpenAPI tests cover name/URL/case matching, literal special characters, absent URLs, multiple/no matches, argument validation, JSON, error handling, authentication and older-site compatibility. 9. **partial** — README, source-command specification, API specification/OpenAPI and customization-safe upgrade/redeployment instructions are present. CLI help only adds the command syntax; it does not describe matching behavior, examples or older-site compatibility as explicitly required. 10. **met** — Resource endpoints remain in the template-site route/service structure; no migration into `@evcraddock/slug-api`. - Criteria: **10 total, 9 met, 1 incomplete (partial), 0 not-evident**. `criteria_missing=1` counts the incomplete criterion. ### Blocking issues - **1 — Complete the required CLI help documentation (criterion 9).** `cli/src/commands.ts:76` adds only `sources find <query> [--json]` to `HELP_TEXT`; the help ends at line 113 without search semantics, examples or compatibility guidance. Add a concise help section explaining case-insensitive literal name/URL matching and local filtering for older sites, with a `--site` example (and JSON usage), and extend the help assertion in `cli/src/__tests__/commands.test.ts:235` to cover that content. The detailed external docs do not fulfill the separate requirement to expose this information in CLI help. ### Warnings - None. ### Verification and pipeline state - CI: **passed**, using the supplied confirmed Forgejo run **#471**, `build-lint-test`, for `cbf8a95575`. Did not invoke the known-broken `fj pr status` command. - Supplied verification logs inspected: `/tmp/slug-sources-pre-pr.log` (all checks passed), `/tmp/slug-sources-build.log` (build completed), `/tmp/slug-sources-focused.log` (**164 tests passed**). - Independent review compared all current acceptance criteria against the PR diff and directly relevant implementation/tests/docs. No broad checks were rerun; no source or task-status changes, and no merge. ### Final verdict - **changes-requested**: 1 blocking issue, 0 warnings. - Next: Complete the CLI help and its regression assertion, then rerun review. Merge remains gated on explicit human approval.
docs: explain source search and compatibility in CLI help
All checks were successful
CI / build-lint-test (pull_request) Successful in 2m7s
c6744a6a27
Task: #task-4c9e432c
Author
Owner

Review update

  • PR: #283 (open), head c6744a6a27531485e3d622a7c26f2616356f49b9.
  • Task: task-4c9e432c.
  • Result: approved — independent re-review of the current PR diff finds all requirements satisfied. Follow-up commit c6744a6 resolves the prior CLI-help blocker with matching semantics, older-site compatibility, human/JSON examples, and regression assertions.

Acceptance criteria

  1. met — runSourcesFindCommand matches partial names and URLs case-insensitively and explicitly handles absent URLs; tests cover both fields and null URLs.
  2. met — The existing API route forwards optional q to listSources; both paths trim queries, use JavaScript lowercasing, and perform literal substring matching.
  3. met — Requests without q retain the existing SQL ordering, hydration, response envelope, and authentication middleware. Existing CLI source command implementations remain unchanged.
  4. met — The CLI sends URL-encoded q and always filters returned records locally; regression cases cover updated sites and older sites returning unfiltered records.
  5. met — All matches retain IDs, names, URLs, and relationships. Search uses GET/read-only selection, with unchanged-row assertions and no database migration.
  6. met — JSON preserves the normal data envelope, human output reuses the existing source-list formatter, and no matches succeed with No sources found. or an empty data array.
  7. met — Missing/blank/invalid queries fail before requests with a usage error. Standard site selection and client error handling are reused; tests distinguish authentication, API, and network failures from empty results.
  8. met — CLI/API/OpenAPI regressions cover name/URL/case matching, literal special characters, absent URLs, multiple/no matches, invalid CLI queries, JSON, errors, authentication, and older/unfiltered-site compatibility. The follow-up adds assertions for the required help content.
  9. met — CLI help now explains case-insensitive literal name/URL matching, local filtering for older sites, successful no-match behavior, and named-site examples including JSON. README/source-command docs, API specification/OpenAPI, and customization-safe generated-site upgrade instructions cover compatibility, relevant files, verification, and normal redeployment; they explain why package-only updates or slug upgrade do not rewrite endpoints.
  10. met — Resource endpoints remain in the template-site route/service structure; no endpoint migration into @evcraddock/slug-api is introduced.
  • Criteria: 10 total, 10 met, 0 partial, 0 not-evident; criteria_missing=0.

Blocking issues

  • None. The previous criterion 9 blocker is resolved.

Warnings

  • None.

Verification and pipeline state

  • CI: passed — supplied confirmed Forgejo Actions run #472, build-lint-test, for c6744a6a27. Used this resolved CI signal rather than the known-broken relative-URL parsing in fj pr status.
  • Inspected /tmp/slug-sources-pre-pr.log: generated CSS, formatting, lint, workspace typechecks, and all workspace tests passed, including 212 CLI tests and 376 template-site tests.
  • Inspected /tmp/slug-sources-build.log: workspace build completed successfully.
  • Compared the current PR context/diff against all task acceptance criteria and the prior review artifact /tmp/slug-sources-review-283-comment.md. Review scope included implementation, regression coverage, documentation, compatibility, and relevant security/error-handling concerns; no broad checks were rerun.
  • Review only: no implementation changes, task-status changes, or merge.

Final verdict

  • approved: 0 blocking issues, 0 warnings; all 10 criteria met. Pipeline state: passed.
  • Next: Await explicit human merge approval. No merge is authorized by this review.
### Review update - PR: https://forge.caradoc.com/erik/slugkit/pulls/283 (open), head `c6744a6a27531485e3d622a7c26f2616356f49b9`. - Task: `task-4c9e432c`. - Result: **approved** — independent re-review of the current PR diff finds all requirements satisfied. Follow-up commit `c6744a6` resolves the prior CLI-help blocker with matching semantics, older-site compatibility, human/JSON examples, and regression assertions. ### Acceptance criteria 1. **met** — `runSourcesFindCommand` matches partial names and URLs case-insensitively and explicitly handles absent URLs; tests cover both fields and null URLs. 2. **met** — The existing API route forwards optional `q` to `listSources`; both paths trim queries, use JavaScript lowercasing, and perform literal substring matching. 3. **met** — Requests without `q` retain the existing SQL ordering, hydration, response envelope, and authentication middleware. Existing CLI source command implementations remain unchanged. 4. **met** — The CLI sends URL-encoded `q` and always filters returned records locally; regression cases cover updated sites and older sites returning unfiltered records. 5. **met** — All matches retain IDs, names, URLs, and relationships. Search uses GET/read-only selection, with unchanged-row assertions and no database migration. 6. **met** — JSON preserves the normal data envelope, human output reuses the existing source-list formatter, and no matches succeed with `No sources found.` or an empty data array. 7. **met** — Missing/blank/invalid queries fail before requests with a usage error. Standard site selection and client error handling are reused; tests distinguish authentication, API, and network failures from empty results. 8. **met** — CLI/API/OpenAPI regressions cover name/URL/case matching, literal special characters, absent URLs, multiple/no matches, invalid CLI queries, JSON, errors, authentication, and older/unfiltered-site compatibility. The follow-up adds assertions for the required help content. 9. **met** — CLI help now explains case-insensitive literal name/URL matching, local filtering for older sites, successful no-match behavior, and named-site examples including JSON. README/source-command docs, API specification/OpenAPI, and customization-safe generated-site upgrade instructions cover compatibility, relevant files, verification, and normal redeployment; they explain why package-only updates or `slug upgrade` do not rewrite endpoints. 10. **met** — Resource endpoints remain in the template-site route/service structure; no endpoint migration into `@evcraddock/slug-api` is introduced. - Criteria: **10 total, 10 met, 0 partial, 0 not-evident**; `criteria_missing=0`. ### Blocking issues - None. The previous criterion 9 blocker is resolved. ### Warnings - None. ### Verification and pipeline state - CI: **passed** — supplied confirmed Forgejo Actions run **#472**, `build-lint-test`, for `c6744a6a27`. Used this resolved CI signal rather than the known-broken relative-URL parsing in `fj pr status`. - Inspected `/tmp/slug-sources-pre-pr.log`: generated CSS, formatting, lint, workspace typechecks, and all workspace tests passed, including **212 CLI tests** and **376 template-site tests**. - Inspected `/tmp/slug-sources-build.log`: workspace build completed successfully. - Compared the current PR context/diff against all task acceptance criteria and the prior review artifact `/tmp/slug-sources-review-283-comment.md`. Review scope included implementation, regression coverage, documentation, compatibility, and relevant security/error-handling concerns; no broad checks were rerun. - Review only: no implementation changes, task-status changes, or merge. ### Final verdict - **approved**: 0 blocking issues, 0 warnings; all 10 criteria met. Pipeline state: **passed**. - Next: Await explicit human merge approval. No merge is authorized by this review.
fix: expose source search queries and result counts in dev logs
All checks were successful
CI / build-lint-test (pull_request) Successful in 2m12s
47a76fdff7
Task: #task-4c9e432c
Author
Owner

Review update

  • PR: #283 (open), head 47a76fdff758add8b0b80a650180308bf7370b30.
  • Task: task-4c9e432c.
  • Result: approved — independent review of the current PR diff confirms all 10 task criteria and the additional user-required observable source-filtering logs are met. The earlier approved review covered head c6744a6; this review includes follow-up 47a76fd.

Acceptance criteria

  1. met — CLI matches partial names and URLs case-insensitively with explicit null-safe URL handling.
  2. met — API forwards optional q to the existing service; both CLI and service use trimmed queries, JavaScript lowercasing, and literal substring matching.
  3. met — Unfiltered requests retain SQL ordering, full response records/envelope, and authentication. Existing source commands remain unchanged; added successful-request logging does not change their responses.
  4. met — CLI sends URL-encoded q and always filters returned records locally; tests cover updated filtering sites and older sites ignoring q.
  5. met — All matches retain IDs, names, URLs, and relationships. Search is read-only; API tests assert unchanged source rows, and no migration is added.
  6. met — JSON retains the existing data envelope. Human output includes source details; no matches succeed with No sources found. or an empty data array.
  7. met — Missing/blank/invalid CLI arguments fail before requests with clear usage errors. Standard configured-client behavior preserves site selection and distinguishable authentication, API, and network failures.
  8. met — CLI/API/OpenAPI regressions cover matching fields, case, literal characters, null URLs, multiple/no matches, invalid queries, JSON, errors, authentication, and older/unfiltered-site compatibility. Three additional logging cases cover matching, empty, and unfiltered results with credential exclusion.
  9. met — CLI help, README/source-command documentation, API specification/OpenAPI, and customization-safe existing-site upgrade instructions explain usage, matching, compatibility, relevant generated files, verification, and redeployment. Package updates and slug upgrade are correctly distinguished from rewriting copied endpoints. API docs now describe successful source-query/count logging.
  10. met — Resource endpoints remain in the existing template-site route/service structure; no migration into @evcraddock/slug-api.
  • Criteria: 10 total, 10 met, 0 partial, 0 not-evident; criteria_missing=0.

User-required logging correction

  • met — After authenticated source selection, the route emits Sources listed at info level using the injected logger or existing consoleApiLogger. Its allowlisted context contains method, path, effective trimmed q, status, and actual returned results count, including zero; it excludes authorization headers, unrelated query parameters, and result contents.
  • Exact-context regression assertions exercise trimmed matching, no matches, and blank-query listing, and assert authorization/unrelated API-key values are absent from captured logs. Existing logger formatting JSON-serializes context.
  • Supplied live CLI/API evidence confirms FIND DEMO returns IDs 1 and 2, FIND-DEMO-URL returns ID 3, and no match returns an empty collection; observed logs now expose queries and result counts. This live evidence was supplied, not rerun during review.

Blocking issues

  • None.

Warnings

  • None.

Verification and pipeline state

  • CI: passed — supplied confirmed Forgejo run #473, build-lint-test, for 47a76fdff7. Used this resolved signal without invoking the known-broken fj pr status parser.
  • Inspected /tmp/slug-sources-pre-pr.log: generated CSS, formatting, lint, workspace typechecks, and all tests passed, including 212 CLI and 379 template-site tests.
  • Inspected /tmp/slug-sources-build.log: workspace build passed.
  • Inspected /tmp/slug-sources-logging-tests.log: 20 source API tests passed.
  • Reviewed Forgejo PR context/commits/current diff, the prior approved artifact /tmp/slug-sources-rereview-283-comment.md, and directly relevant logger wiring against all task criteria and the logging correction. No broad tests rerun.
  • Review only: no source edits, task-status changes, or merge.

Final verdict

  • approved: 0 blocking issues, 0 warnings; all 10 task criteria and the additional logging correction met. Pipeline state: passed.
  • Next: Await explicit human merge approval. This review does not authorize merging.
### Review update - PR: https://forge.caradoc.com/erik/slugkit/pulls/283 (open), head `47a76fdff758add8b0b80a650180308bf7370b30`. - Task: `task-4c9e432c`. - Result: **approved** — independent review of the current PR diff confirms all 10 task criteria and the additional user-required observable source-filtering logs are met. The earlier approved review covered head `c6744a6`; this review includes follow-up `47a76fd`. ### Acceptance criteria 1. **met** — CLI matches partial names and URLs case-insensitively with explicit null-safe URL handling. 2. **met** — API forwards optional `q` to the existing service; both CLI and service use trimmed queries, JavaScript lowercasing, and literal substring matching. 3. **met** — Unfiltered requests retain SQL ordering, full response records/envelope, and authentication. Existing source commands remain unchanged; added successful-request logging does not change their responses. 4. **met** — CLI sends URL-encoded `q` and always filters returned records locally; tests cover updated filtering sites and older sites ignoring `q`. 5. **met** — All matches retain IDs, names, URLs, and relationships. Search is read-only; API tests assert unchanged source rows, and no migration is added. 6. **met** — JSON retains the existing data envelope. Human output includes source details; no matches succeed with `No sources found.` or an empty data array. 7. **met** — Missing/blank/invalid CLI arguments fail before requests with clear usage errors. Standard configured-client behavior preserves site selection and distinguishable authentication, API, and network failures. 8. **met** — CLI/API/OpenAPI regressions cover matching fields, case, literal characters, null URLs, multiple/no matches, invalid queries, JSON, errors, authentication, and older/unfiltered-site compatibility. Three additional logging cases cover matching, empty, and unfiltered results with credential exclusion. 9. **met** — CLI help, README/source-command documentation, API specification/OpenAPI, and customization-safe existing-site upgrade instructions explain usage, matching, compatibility, relevant generated files, verification, and redeployment. Package updates and `slug upgrade` are correctly distinguished from rewriting copied endpoints. API docs now describe successful source-query/count logging. 10. **met** — Resource endpoints remain in the existing template-site route/service structure; no migration into `@evcraddock/slug-api`. - Criteria: **10 total, 10 met, 0 partial, 0 not-evident**; `criteria_missing=0`. ### User-required logging correction - **met** — After authenticated source selection, the route emits `Sources listed` at info level using the injected logger or existing `consoleApiLogger`. Its allowlisted context contains method, path, effective trimmed `q`, status, and actual returned `results` count, including zero; it excludes authorization headers, unrelated query parameters, and result contents. - Exact-context regression assertions exercise trimmed matching, no matches, and blank-query listing, and assert authorization/unrelated API-key values are absent from captured logs. Existing logger formatting JSON-serializes context. - Supplied live CLI/API evidence confirms `FIND DEMO` returns IDs 1 and 2, `FIND-DEMO-URL` returns ID 3, and no match returns an empty collection; observed logs now expose queries and result counts. This live evidence was supplied, not rerun during review. ### Blocking issues - None. ### Warnings - None. ### Verification and pipeline state - CI: **passed** — supplied confirmed Forgejo run **#473**, `build-lint-test`, for `47a76fdff7`. Used this resolved signal without invoking the known-broken `fj pr status` parser. - Inspected `/tmp/slug-sources-pre-pr.log`: generated CSS, formatting, lint, workspace typechecks, and all tests passed, including **212 CLI** and **379 template-site** tests. - Inspected `/tmp/slug-sources-build.log`: workspace build passed. - Inspected `/tmp/slug-sources-logging-tests.log`: **20 source API tests passed**. - Reviewed Forgejo PR context/commits/current diff, the prior approved artifact `/tmp/slug-sources-rereview-283-comment.md`, and directly relevant logger wiring against all task criteria and the logging correction. No broad tests rerun. - Review only: no source edits, task-status changes, or merge. ### Final verdict - **approved**: 0 blocking issues, 0 warnings; all 10 task criteria and the additional logging correction met. Pipeline state: **passed**. - Next: Await explicit human merge approval. This review does not authorize merging.
erik merged commit 6065891dd1 into main 2026-09-24 09:35:53 -05:00
erik deleted branch feat/task-4c9e432c-sources-find 2026-09-24 09:35:53 -05:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
erik/slugkit!283
No description provided.