Synthetic sample. Harbor Ledger is a fictional app. This is not a customer report and not a live review.
Customer-safe report
harbor-labs/harbor-ledger
Engagement demo-engagement. Reviewed commit 4f1c2a9e7b83. Rubric release-rescue-rubric/v1.
Report hash c0b2a7d458b834c09ccbe92254e0045e1fd89870c2895a0b22b073657d9a9223
- Released by
- Sam Okafor, operations manager on
- Reviewer recorded
- A named reviewer read this report and confirmed its findings and verdict follow from the observations recorded during the review.
- Approval bound to
- d25235c7de5b1f4b15e8a8a8244940402ecd6a4380ac8bdfe8f3a9654ed59f7c
- Gate
- validation ran, field coverage ran, delivery gate ran
What was reviewed
- Repository
- harbor-labs/harbor-ledger
- Commit
- 4f1c2a9e7b83d05e61af2c48d7be9013a5c6f27b
- Default branch
- main
- Critical workflow
- handles customer data, triggers external actions
- AI features
- in scope for this review
- Reviewed by
- Sam Okafor, operations manager
- Review mode
- AI-assisted, signed by a human reviewer
One part of the repository was excluded at your request and was not examined.
Where this release stands
32 of 32 checks assessed
At least one confirmed finding on a release-gating check. We recommend resolving these before you ship.
Critical
0
High
4
Medium
1
Low
0
Info
0
3 findings confirmed as release-blocking.
Coverage by area
Secrets and credentials
3/3 assessed
3 pass · 0 concern · 0 fail
0 findings
Authentication and session
3/3 assessed
3 pass · 0 concern · 0 fail
0 findings
Authorization and tenancy
3/3 assessed
2 pass · 0 concern · 1 fail
1 finding
AI boundary
4/4 assessed
3 pass · 0 concern · 1 fail
1 finding
Data handling and retention
3/3 assessed
3 pass · 0 concern · 0 fail
0 findings
Input validation and abuse
2/2 assessed
2 pass · 0 concern · 0 fail
0 findings
Dependencies and supply chain
1/1 assessed
0 pass · 0 concern · 1 fail
1 finding
Release operations
3/3 assessed
2 pass · 0 concern · 1 fail
1 finding
Observability and incident response
2/2 assessed
1 pass · 0 concern · 1 fail
1 finding
Accessibility
3/3 assessed
3 pass · 0 concern · 0 fail
0 findings
Code quality and tests
3/3 assessed
3 pass · 0 concern · 0 fail
0 findings
Documentation and handover
2/2 assessed
2 pass · 0 concern · 0 fail
0 findings
Findings
RR-001
highblocks releasesprint scopeA record is loaded by identifier without checking who is asking
Authorization and tenancy · Object-level authorization is enforced on every access path
The path below selects a record using an identifier taken from the request, without restricting the query to the authenticated caller.
Why it matters. Any signed-in customer who changes the identifier reads another customer's record. This is the most common way customer data leaves a young application.
What to do. Scope the lookup by the authenticated caller, so an identifier from the request cannot select a record the caller does not own.
- src/app/expenses/[id]/page.tsx · lines 18–27
- src/lib/claims.ts · lines 44–51
Effort small
RR-002
highblocks releasesprint scopeA tool the model can call has no declared limit
AI boundary · Tool and action authority is bounded and explicit
A tool reachable by the model has no explicit statement of what it may and may not do, enforced outside the model.
Why it matters. An undeclared limit is not a limit. The model decides, and the model can be steered by whatever it reads.
What to do. Declare, per tool, what it may do and what it may never do, and enforce that list outside the model.
- src/lib/assistant/tools.ts · lines 61–88
Effort medium
RR-003
highblocks releasesprint scopePreview or development shares production credentials
Release operations · Production is separated from development and preview
The reviewed snapshot uses the same credentials or data store for production and for a non-production environment.
Why it matters. A preview deployment is the least guarded thing you run. Sharing production credentials with it makes it the way in.
What to do. Give preview and development environments their own credentials and their own data, so a preview cannot reach production.
- vercel.json · lines 4–9
Effort medium
RR-004
highlikelysprint scopeA dependency with a known advisory is on a reachable path
Dependencies and supply chain · No known-vulnerable dependency on a reachable path
A dependency in the reviewed manifest has a published advisory and is reachable from the critical workflow.
Why it matters. A published advisory is a public instruction for exploiting it. Reachability is what turns it from noise into exposure.
What to do. Upgrade the dependency to a version without the known advisory, or replace it if no fixed version exists.
- package.json · line 31
Not confirmed. The path appears reachable only under conditions this review did not exercise.
Effort small
RR-005
mediumsprint scopeLogs or errors carry secrets or customer data
Observability and incident response · Errors and logs do not leak secrets or customer data
Log or error output in the reviewed snapshot includes credential material or customer data.
Why it matters. Logs travel further than the systems that wrote them, into third-party tools and support tickets, and they are rarely deleted.
What to do. Remove credentials and customer data from log and error output before it leaves the process.
- src/app/expenses/error.tsx · lines 8–14
Effort small
What a remediation sprint would cover
5 of these findings are in scope for the remediation sprint: RR-001, RR-002, RR-003, RR-004, RR-005. The rest are yours to schedule, and you are free to fix all of them yourself.
What this review did not establish
- This review examined one repository at one commit. Changes made after that commit were not reviewed.
- The review read source, configuration, and dependency manifests. It did not attack, load-test, or otherwise exercise a running system.
- Findings describe what this review identified. The absence of a finding is not evidence that a problem does not exist.
- Severity reflects the impact, exploitability, and confidence recorded for each finding, judged against the one critical workflow in scope.
- Part of this review is performed by an AI system reading your source. Text inside a repository can attempt to influence such a system. Our controls prevent that text from changing this report's findings, severity, counts, or verdict, which are computed by deterministic code from recorded observations. They cannot rule out that it caused a real problem to go unreported. This residual risk is not solved, and a human reviewer signing this report is the mitigation, not a guarantee.
- The customer excluded part of the repository from this review at intake. Anything inside an exclusion was not examined.
- The workflow depends on a third-party service whose behaviour could not be observed from the repository.