Candor
Technical diligence for software acquisitions

A clearer view of what you're buying.

Five to eight agreed seller claims, each answered with its evidence and the exact limits of the check, targeted for five business days after complete access and inputs.

bulletproof-nodejs · claim register draft · not approvedcoverage completerisk moderate
IdSeller claimStatusBasis
C1All production code for the service lives in this repositoryunverifiedsingle_repository
C2CI runs the full test suite on every pushsupportedtests_in_ci
C3The codebase has an automated test suitesupportedtests_present
C4No credentials or secrets are committed to the repositorypartially supportedno_committed_secrets
C5The service runs on a supported Node.js LTS releaseunverifiedruntime_supported
C6Deployment is fully automated from the repositoryunverifieddeployment_as_code
C7Dependencies are locked for reproducible installssupporteddependencies_locked
C8Two engineers actively maintain the codebaseunverifiedactive_contributors:2
C9The code is MIT licensedpartially supportedlicense:MIT
C10Deployment and operations are documentedunverifieddocumentation:deployment
C11No customer data is stored in the repositoryunverifiedreviewer, pending
C12Test coverage is above 70 percentunverifiedcoverage_measured
12 claims · 3 supported · 2 partially supported · 0 contradicted · 7 unverified12 pending reviewer confirmation

Candor  /  Technical diligence report

Technical diligence:
bulletproof-nodejs

Draft · not approved

Commit7ce1b4690c4e
RiskModerate
CoverageComplete
Claims12

The service runs on a supported Node.js LTS release

Unverified

Repository evidence points against the claim: the repository's declared runtime is past end of life: node 10.15 (EOL 2021-04-30). The runtime in production is not established by the repository.

the sample report on a public repository · every cell above comes from its own data
Fee$2,500Fixed, invoiced on delivery of the readout
Time5 daysTargeted, after complete access and inputs
Claims5 to 8Agreed with you at intake, verbatim
ReviewerNamedApproval recorded under the reviewer's name

Most technical diligence ends in a report nobody can check. Ours is built the other way round: every finding points at its evidence, every seller claim keeps the exact words the seller used, and whatever the code cannot settle is left unverified and named, with what would settle it.

The automatic checks

Each runs against the snapshot of the repository and records what it inspected and what it cannot see. A check never settles a claim on its own: the reviewer reads the evidence and decides, under their name. These are the checks as the engine registers them.

The work

Read a claim the way a buyer would.

Each agreed claim gets an assessment, the evidence behind it, and the exact limits of the check; what the evidence cannot settle stays unverified and says what would settle it. Two of the twelve illustrative claims from the sample report, reproduced unedited.

The code is MIT licensed

Partially supported

C9 · CIM, p. 3

The licence file is MIT, but a manifest declares ISC.

What was inspected
root licence file and licence fields in manifests
What would settle it
the seller's confirmation of which declaration is authoritative
Review
pending reviewer confirmation
Evidence (1) and counterevidence (1)

CI runs the full test suite on every push

Supported

C2 · CIM, p. 14

.circleci/config.yml runs `npm test`.

What was inspected
the commands the CI configuration runs (.circleci/config.yml) and the test files in the repository; that the step runs on every commit and passes is not established
What would settle it
a recent CI run log showing the test step and its result
Review
pending reviewer confirmation
Evidence (2)
Two of twelve illustrative claims, reproduced from the sample report. Read the report in full →
  1. Observation

    A typed fact the tool read from the repository, with its file, line and content hash.

    51 in the sample
  2. Reviewer observation

    What a person read by hand, recorded the same way: file, lines, content hash, name.

    verifier observe
  3. Finding · claim

    A judgement that cites observation ids. A claim keeps the exact proposition the seller made.

    9 findings · 12 claims
  4. Decision

    The reviewer accepts, dismisses or overrides each one, under their name, at the snapshot.

    verifier review
  5. Approval

    A hash of the whole report, including who approved it and when; re-verified on request.

    verifier finalize
The engagement

What you receive, and when.

  • A decision memo

    Two pages. What held up, what did not, what to ask for in the agreement, and what a new team needs to run the software.

  • The claim register

    Five to eight seller claims we agree with you at intake, each assessed with the evidence, the scope of the check, and what would settle anything left unverified.

  • The technical report

    Findings, an explicit coverage statement and a full evidence appendix. The approval is recorded under the reviewer's name with a hash of the exact content.

  • An interview and a readout

    Forty-five minutes with the seller's technical lead, then a call with whoever you want in the room.

Targeted for five business days after complete access and inputs
  1. Day 0IntakeWe record the seller's claims exactly as they were made and agree which five to eight the engagement covers.
  2. Day 1AnalysisThe checks run, then the reviewer reads every finding against the evidence and reads the authentication, data and deployment paths by hand.
  3. Day 2RequestsEvidence requests go to the seller early, because their answers take longest; a late answer is recorded as unresolved, not guessed.
  4. Day 3InterviewThe unverified claims go to the person who made them.
  5. Day 4ApprovalThe reviewer records the approval under their name, bound to a hash of the content.
  6. Day 5ReadoutWe walk you and your advisors through it.
Scope

What we inspect, and what we do not.

The second column is the part most technical diligence leaves out. You should know where the floor is before you buy the work.

Inspected in the supplied repository

  • Test files and frameworks, and which CI steps are configured to invoke them
  • Runtime and container versions declared in build and CI files, against vendor end-of-life dates
  • Lockfiles and dependency-update configuration
  • Credential material in known formats, and sensitive files
  • Deployment and infrastructure definitions checked into the repository
  • Commit activity, authorship concentration, release tags
  • Licence declarations and the conflicts between them
  • By hand: authentication, authorisation, data writes, admin surfaces and the build and deploy path

Not established, and named as such

  • Whether the deployed system matches this repository, or what runs in production
  • Whether the tests pass or what they cover, without a run or a CI log
  • Application defects beyond the paths a reviewer reads; a configuration that exists is not a behaviour that was observed
  • Per-dependency vulnerability and licence intelligence
  • Infrastructure cost, reliability, incident history
  • Anything outside the repositories you give us access to
Method

Why the report holds up in a negotiation.

Every finding cites its evidence

Findings and claim assessments cite observation identifiers that exist in the appendix, with the source references used to make them. Aggregates, external evidence and what a reviewer read by hand are identified as such, so you can see what each statement rests on.

Coverage is stated beside the rating

If a file could not be read or a configuration could not be parsed, the report says so and marks the assessment partial, and the reviewer must acknowledge that before approving. A low rating does not establish low risk in what was not inspected.

Approval is bound to the content

A final report records the reviewer's name, a hash of the report's content and a hash of the analysed code, and the tool re-verifies that record on request. You receive the report data with the document, so the check can be repeated. Exported copies are static.

Read-only by default

Static analysis reads the repository; it does not build or run the software. Build and test execution happens only with your written authorisation and the seller's consent, in an isolated environment. Reports minimize sensitive data and apply automatic redaction; review is still required before external sharing.

Terms

$2,500

Fixed, per engagement, invoiced on delivery of the readout. The fee covers one service and five to eight agreed claims; anything beyond that is agreed in writing before the work starts.

What we need from you

Read access to the code, the seller's claims as they were made, confirmation that you may grant us access, and one forty-five minute slot with their technical lead. The five days start when all of it is in hand.

Scope of an engagement

One small service: a repository, or a small group of them, named at intake. Larger estates are quoted separately after we have seen the shape of them.

Availability

One engagement at a time, so the reviewer who reads your report is the same person on the readout call.

Talk about an acquisition.

Send the deal size, the stack, and when your exclusivity window closes. We reply within one business day, Pacific time, to say whether it fits.

Email sid@candor.partners