On this site

Keep decisions in cra.yml


cra.yml is a versioned YAML record in your product root. Commit it with the product. Init combines detected facts with your answers. Later commands read this file without repeating the interview. Init refuses to replace an existing profile. Invalid fields or values stop the command with an error.

Partial answers and unknowns#

An answers file uses the same schema, starting with version: 1. Omitted fields remain for detection or the interview. With --no-prompt, unanswered decisions stay unknown. Use a temporary file outside your product repository, then remove it. See the tested partial answers example.

fendkit init --no-prompt --answers /tmp/maker-answers.yml --release ../dist/plugin.zip

The file must contain your own answers, not the example maker's details. classification.categories: null means unknown; [] deliberately records that none of the Annex III/IV categories apply. Never substitute [] for an unknown decision. Init derives the highest class from explicitly selected categories. Keep an unknown classification.answer as unknown with null categories. If you decide that no listed category applies, init saves default with []. If you supply both an answer and categories, they must agree. unknown or null answers need null or omitted categories, rather than a list. A conflict stops the command and names the field to fix. If you supply only categories, init records the highest selected class. Saving partial answers before init keeps the answer omitted. Existing profiles with only an answer need no added categories.

Init preserves supplied decision dates, explicit null dates and reviewer names. Only an omitted date for a decided answer is filled with today’s date. Unknown or unanswered decisions remain undated. Later scan/docs/check preserve unknown decisions without repeating the interview.

Supported fields#

Text may be null when unknown. Dates use YYYY-MM-DD. Booleans use true, false or null. Lists are YAML sequences, not comma-separated strings.

Section Fields and accepted values
version Required integer 1.
product name, type, version, description, release, distribution (list of text). Types: wordpress-plugin, wordpress-theme, composer-package, npm-package, application, other.
manufacturer name, address, website.
role answer: manufacturer, open-source-steward, not-in-scope, unknown; answers mapping below; decided_by, decided_on.
role.answers sold, paid_edition, paid_support, donations_only, hosted_only, all nullable booleans.
classification answer: default, important-class-i, important-class-ii, critical, unknown; categories: list of IDs from init's Annex III/IV list or null; decided_by, decided_on, note.
security_contact email, url, policy_url. Use real contact details; drafts require valid addresses/HTTPS links where appropriate.
support end (date), versions (text version line), updates (text method).
components List of manual component mappings described below.
triage List of exact advisory/component-version decisions described below.

Release paths and patterns resolve relative to the project root, including sibling paths. --release overrides the saved path for that scan. Update the profile's path when you want later scans to use a different release. Unknown product versions need a real version before evidence can be current. See inventory. Windows releases on another drive are kept as absolute paths that work only on that machine and may expose personal directory names when reports are shared.

Manual components#

Each component supports name, version, ecosystem, purl, path, shipped and note. Use npm or composer for supported vulnerability lookups. Omit shipped to keep detected behavior; true and false are explicit decisions, and shipped: null explicitly makes that occurrence unknown. Init and triage preserve these values and your comments. When the same component appears more than once, one shipped copy makes the group shipped. Otherwise, one unknown copy makes the group unknown. Known versions and purls must come from evidence.

To add an unrecognized library, omit path. That field only matches an already detected occurrence. Record the file location and shipping evidence in note. This example leaves the version unknown until you verify it:

components:
  - name: widget
    version: null
    ecosystem: npm
    purl: pkg:npm/widget
    shipped: true
    note: "assets/js/widget.min.js is present in the shipped ZIP; version not yet verified"

To correct an already detected occurrence, use its exact path from cra/reports/inventory.json. For example, after verifying the shipped banner:

components:
  - name: moment
    version: 2.24.0
    ecosystem: npm
    purl: pkg:npm/[email protected]
    path: assets/js/vendor/moment.min.js
    shipped: true
    note: Version verified from the shipped banner

Manual entries can add or correct detected evidence; they do not make unsupported formats covered or prove the absence of other bundles.

Saved triage#

Prefer the triage command. Each record has advisory, component (exact purl including version), status, justification, reason, decided_on. Status is affected, not_affected, fixed or under_investigation. All need a reason and decision date; not_affected also needs a supported OpenVEX justification. See the generated reference for its values.

Profile updates by triage preserve YAML comments. Scan and docs do not save new answers. Existing maker documents also remain untouched; review changed facts yourself using the documents guide.

Edit this page