create-filegrc 0.2.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +3 -3
  3. package/package.json +3 -3
  4. package/src/cli.js +29 -13
  5. package/src/defaults.js +5 -6
  6. package/src/index.js +68 -16
  7. package/template/AGENTS.md +20 -20
  8. package/template/README.md +21 -19
  9. package/template/WORKSPACE.md +4 -4
  10. package/template/data/AGENTS.md +8 -8
  11. package/template/data/action-items/AGENTS.md +2 -2
  12. package/template/data/audits/AGENTS.md +3 -3
  13. package/template/data/documents/document-business-continuity-disaster-recovery.json +0 -1
  14. package/template/data/documents/document-contractor-policy-acknowledgement.json +0 -1
  15. package/template/data/documents/document-contractor-training-acknowledgement.json +0 -1
  16. package/template/data/documents/document-data-retention-schedule.json +0 -1
  17. package/template/data/documents/document-employee-handbook-acknowledgement.json +0 -1
  18. package/template/data/documents/document-employee-policy-acknowledgement.json +0 -1
  19. package/template/data/documents/document-employee-training-acknowledgement.json +0 -1
  20. package/template/data/documents/document-incident-response-plan.json +0 -1
  21. package/template/data/documents/document-soc2-management-assertion.json +0 -3
  22. package/template/data/documents/document-soc2-management-representation.json +0 -3
  23. package/template/data/documents/document-soc2-period-completeness.json +0 -3
  24. package/template/data/documents/document-soc2-period-completeness.md +2 -2
  25. package/template/data/documents/document-soc2-system-description.json +0 -3
  26. package/template/data/documents/document-soc2-system-description.md +3 -3
  27. package/template/data/evidence/AGENTS.md +3 -3
  28. package/template/data/obligation-events/AGENTS.md +1 -1
  29. package/template/data/people/person-policy-owner.json +1 -1
  30. package/template/data/policies/policy-anti-bribery-corruption.json +0 -1
  31. package/template/data/policies/policy-clear-desk-screen.json +0 -1
  32. package/template/data/policies/policy-data-protection-handling.json +0 -1
  33. package/template/data/policies/policy-employee-handbook.json +0 -1
  34. package/template/data/policies/policy-information-security.json +0 -1
  35. package/template/data/policies/policy-mobile-computing-communications.json +0 -1
  36. package/template/data/systems/system-filegrc-program-repository.md +3 -3
  37. package/template/data/workspace.json +1 -1
  38. package/template/docs/filegrc-audit.png +0 -0
  39. package/template/docs/filegrc-home.png +0 -0
  40. package/template/docs/filegrc-social-preview.png +0 -0
  41. package/template/package.json +2 -2
  42. package/template-parameters.json +14 -2
  43. package/template/data/people/person-independent-approver.json +0 -9
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2026 FileGRC contributors
3
+ Copyright (c) 2026 filegrc contributors
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # create-filegrc
2
2
 
3
- Create a Git-native FileGRC workspace for a SOC 2 program:
3
+ Create a Git-native filegrc workspace for a SOC 2 program:
4
4
 
5
5
  ```sh
6
6
  npx create-filegrc@latest company-grc
@@ -9,12 +9,12 @@ npm run validate
9
9
  npm run serve
10
10
  ```
11
11
 
12
- Setup asks for the company name, the initial policy owner, and a security contact email. The generated private project includes a starter Security program, Program Readiness, a policy-driven Work Queue, Policy Events that add linked tasks, later audit preparation, evidence packets, and one dependency: `filegrc`.
12
+ Setup asks for the legal organization name, the initial policy owner and their email, a security reporting address, and the program timezone. The generated private project includes a starter Security program, Program Readiness, a policy-driven Work Queue, Policy Events that add linked tasks, later audit preparation, evidence packets, and one dependency: `filegrc`.
13
13
 
14
14
  Generated workspaces also include layered `AGENTS.md` instructions and model-driven headless commands. `filegrc program-path` gives agents the same six steps, exact page guidance, current status, and next actions shown in the renderer. Agents can define program scope, approve policies, implement controls, test External Evidence, complete policy work, trigger event tasks, and prepare later audit packets through the same domain functions used by the renderer.
15
15
 
16
16
  Git is initialized when needed. The browser can create local commits before a remote is configured.
17
17
 
18
- Creation output reports the resolved FileGRC version, whether installation ran, and whether the target joined an existing Git worktree or received a new repository.
18
+ Creation output reports the resolved filegrc version, program timezone, starter record counts, whether installation ran, and whether the target joined an existing Git worktree or received a new repository.
19
19
 
20
20
  Use `npx create-filegrc@latest --help` for non-interactive options.
package/package.json CHANGED
@@ -1,11 +1,11 @@
1
1
  {
2
2
  "name": "create-filegrc",
3
- "version": "0.2.0",
4
- "description": "Create a FileGRC workspace for a SOC 2 program",
3
+ "version": "0.3.0",
4
+ "description": "Create a filegrc workspace for a SOC 2 program",
5
5
  "license": "MIT",
6
6
  "repository": {
7
7
  "type": "git",
8
- "url": "git+https://github.com/Sunpeak-AI/FileGRC.git"
8
+ "url": "git+https://github.com/Sunpeak-AI/filegrc.git"
9
9
  },
10
10
  "type": "module",
11
11
  "bin": {
package/src/cli.js CHANGED
@@ -1,23 +1,35 @@
1
1
  import { readFile } from "node:fs/promises";
2
- import { createFileGRC } from "./index.js";
2
+ import { createFilegrc } from "./index.js";
3
3
 
4
4
  export async function runCli(argv = process.argv.slice(2)) {
5
5
  const { target, options } = parseArgs(argv);
6
6
  if (options.help) return printHelp();
7
7
  if (options.version) return printVersion();
8
- const result = await createFileGRC({ target, ...options });
8
+ const result = await createFilegrc({ target, ...options });
9
9
  console.log(`Created ${result.target}`);
10
- console.log(`FileGRC ${result.engineVersion}: ${result.install === "installed" ? "installed" : "installation skipped"}`);
10
+ console.log(`filegrc ${result.engineVersion}: ${result.install === "installed" ? "installed" : "installation skipped"}`);
11
11
  console.log(`Git: ${result.gitMode === "existing-worktree" ? "joined existing worktree" : "initialized new repository"}`);
12
+ console.log(`Timezone: ${result.values.timezone}`);
13
+ console.log(
14
+ `Program baseline: ${result.resourceCounts.total} records, including ` +
15
+ `${result.resourceCounts.byType.requirement || 0} requirements, ` +
16
+ `${result.resourceCounts.byType.control || 0} controls, and ` +
17
+ `${result.resourceCounts.byType.obligation || 0} obligations.`
18
+ );
12
19
  console.log("");
13
- console.log(` cd ${result.target}`);
20
+ console.log(` cd ${shellQuote(result.target)}`);
14
21
  if (options.install === false) console.log(" npm install");
22
+ console.log(" npx filegrc setup");
15
23
  console.log(" npm run validate");
16
24
  console.log(" npm run serve");
17
25
  console.log("");
18
26
  console.log("Review the starter drafts, then commit the approved baseline.");
19
27
  }
20
28
 
29
+ function shellQuote(value) {
30
+ return `'${String(value).replaceAll("'", "'\\''")}'`;
31
+ }
32
+
21
33
  function parseArgs(argv) {
22
34
  let target;
23
35
  const options = {};
@@ -36,7 +48,9 @@ function parseArgs(argv) {
36
48
  else if (name === "no-install") options.install = false;
37
49
  else if (name === "company-name") options.companyName = next();
38
50
  else if (name === "policy-owner-name") options.policyOwnerName = next();
51
+ else if (name === "policy-owner-email") options.policyOwnerEmail = next();
39
52
  else if (name === "security-contact-email") options.securityContactEmail = next();
53
+ else if (name === "timezone") options.timezone = next();
40
54
  else if (name === "filegrc-version") options.filegrcVersion = next();
41
55
  else throw new Error(`Unknown option "${value}".`);
42
56
  }
@@ -46,18 +60,20 @@ function parseArgs(argv) {
46
60
  function printHelp() {
47
61
  console.log(`create-filegrc [directory] [options]
48
62
 
49
- Create a FileGRC workspace for a SOC 2 program.
63
+ Create a filegrc workspace for a SOC 2 program.
50
64
 
51
65
  Options:
52
- --company-name <name>
53
- --policy-owner-name <name>
54
- --security-contact-email <email>
66
+ --company-name <legal-name> Legal organization name
67
+ --policy-owner-name <name> Initial policy owner
68
+ --policy-owner-email <email> Policy owner's email address
69
+ --security-contact-email <email> Security reporting address
70
+ --timezone <iana-timezone> Program timezone, such as America/Chicago
55
71
  --filegrc-version <version> Override resolved engine version
56
- --no-install Write files and a preliminary lockfile only
57
- --force Allow a non-empty target without overwriting files
58
- --yes Use generic prompt defaults
59
- --version Show the package version
60
- --help Show this help`);
72
+ --no-install Write files and a preliminary lockfile only
73
+ --force Allow a non-empty target without overwriting files
74
+ --yes Use generic prompt defaults
75
+ --version Show the package version
76
+ --help Show this help`);
61
77
  }
62
78
 
63
79
  async function printVersion() {
package/src/defaults.js CHANGED
@@ -4,7 +4,6 @@ import { mkdir, writeFile } from "node:fs/promises";
4
4
  const FRAMEWORK_ID = "framework-aicpa-trust-services-criteria";
5
5
  const DESCRIPTION_FRAMEWORK_ID = "framework-aicpa-soc2-description-criteria";
6
6
  const OWNER_ID = "person-policy-owner";
7
- const INDEPENDENT_APPROVER_ID = "person-independent-approver";
8
7
  const OVERSIGHT_TEAM_ID = "team-security-risk-oversight";
9
8
  const INFORMATION_SECURITY_POLICY_ID = "policy-information-security";
10
9
  const DATA_POLICY_ID = "policy-data-protection-handling";
@@ -963,21 +962,21 @@ export function baselineRecordFiles(effectiveDate) {
963
962
  id: OVERSIGHT_TEAM_ID,
964
963
  type: "team",
965
964
  title: "Security and Risk Oversight",
966
- status: "active",
965
+ status: "inactive",
967
966
  purpose: "Provide independent oversight of the security program, risk register, incidents, findings, vendor and access reviews, policy changes, exercises, and overdue work. The chair must be separate from the policy owner and people who operate the controls under review.",
968
- memberIds: [OWNER_ID, INDEPENDENT_APPROVER_ID],
969
- chairIds: [INDEPENDENT_APPROVER_ID],
967
+ memberIds: [OWNER_ID],
968
+ chairIds: [],
970
969
  meetingCadence: calendar("month", 3, effectiveDate)
971
970
  };
972
971
  const programRepository = {
973
972
  schemaVersion: 1,
974
973
  id: "system-filegrc-program-repository",
975
974
  type: "system",
976
- title: "FileGRC Program Repository",
975
+ title: "filegrc Program Repository",
977
976
  status: "active",
978
977
  criticality: "high",
979
978
  ownerIds: [OWNER_ID],
980
- description: "The Git repository that is authoritative for FileGRC governance records, approvals, exceptions, findings, acknowledgements, evidence indexes, and their revision history.",
979
+ description: "The Git repository that is authoritative for filegrc governance records, approvals, exceptions, findings, acknowledgements, evidence indexes, and their revision history.",
981
980
  systemKind: "governance-system-of-record",
982
981
  environment: "Git repository",
983
982
  dataClassification: "Confidential",
package/src/index.js CHANGED
@@ -10,14 +10,14 @@ const execute = promisify(execFile);
10
10
  const packageRoot = dirname(dirname(fileURLToPath(import.meta.url)));
11
11
  const textExtensions = new Set(["", ".json", ".md", ".txt", ".yml", ".yaml", ".gitignore"]);
12
12
 
13
- export async function createFileGRC(options = {}) {
13
+ export async function createFilegrc(options = {}) {
14
14
  const parameterConfig = JSON.parse(await readFile(join(packageRoot, "template-parameters.json"), "utf8"));
15
15
  const target = resolve(options.target ?? "filegrc-program");
16
16
  await assertWritableTarget(target, Boolean(options.force));
17
17
  if (options.force) await assertNoTemplateCollisions(target);
18
18
 
19
19
  const prompted = await resolvePromptValues(parameterConfig.parameters, options);
20
- const engineVersion = await resolveFileGRCVersion(options.filegrcVersion);
20
+ const engineVersion = await resolveFilegrcVersion(options.filegrcVersion);
21
21
  const values = {
22
22
  ...prompted,
23
23
  effective_date: options.effectiveDate ?? new Date().toISOString().slice(0, 10),
@@ -30,6 +30,7 @@ export async function createFileGRC(options = {}) {
30
30
  await copyTemplate(target);
31
31
  await renderTemplate(target, parameterConfig, values);
32
32
  await writeBaselineRecords(target, values.effective_date);
33
+ const resourceCounts = await summarizeResources(target);
33
34
 
34
35
  const installed = options.install !== false;
35
36
  if (installed) {
@@ -43,12 +44,13 @@ export async function createFileGRC(options = {}) {
43
44
  target,
44
45
  values,
45
46
  engineVersion,
47
+ resourceCounts,
46
48
  install: installed ? "installed" : "skipped",
47
49
  gitMode: joinedExistingWorktree ? "existing-worktree" : "initialized"
48
50
  };
49
51
  }
50
52
 
51
- export async function resolveFileGRCVersion(explicitVersion) {
53
+ export async function resolveFilegrcVersion(explicitVersion) {
52
54
  if (explicitVersion) return cleanVersion(explicitVersion);
53
55
  try {
54
56
  const { stdout } = await execute("npm", ["view", "filegrc", "version", "--json"], {
@@ -67,7 +69,9 @@ async function resolvePromptValues(parameters, options) {
67
69
  const mapped = {
68
70
  company_name: options.companyName,
69
71
  policy_owner_name: options.policyOwnerName,
70
- security_contact_email: options.securityContactEmail
72
+ policy_owner_email: options.policyOwnerEmail,
73
+ security_contact_email: options.securityContactEmail,
74
+ timezone: options.timezone
71
75
  };
72
76
  if (options.yes) {
73
77
  mapped.company_name ??= "Example Company";
@@ -77,21 +81,29 @@ async function resolvePromptValues(parameters, options) {
77
81
  for (const key of Object.keys(mapped)) {
78
82
  if (mapped[key] !== undefined && mapped[key] !== null) mapped[key] = String(mapped[key]).trim();
79
83
  }
80
- const missing = parameters.filter(({ key, required }) => required && !mapped[key]);
81
- if (missing.length) {
82
- if (!process.stdin.isTTY || !process.stdout.isTTY) {
83
- throw new Error(`Missing required values: ${missing.map(({ key }) => key).join(", ")}`);
84
- }
84
+ if (process.stdin.isTTY && process.stdout.isTTY) {
85
85
  const prompt = createInterface({ input: process.stdin, output: process.stdout });
86
86
  try {
87
- for (const parameter of missing) {
87
+ for (const parameter of parameters.filter(({ required, key }) => required && !mapped[key])) {
88
+ const defaultValue = parameterDefault(parameter, mapped);
89
+ const suffix = defaultValue ? ` [${defaultValue}]` : "";
88
90
  let value = "";
89
- while (!value) value = (await prompt.question(`${parameter.prompt}: `)).trim();
91
+ while (!value) {
92
+ value = (await prompt.question(`${parameter.prompt}${suffix}: `)).trim() || defaultValue;
93
+ }
90
94
  mapped[parameter.key] = value;
91
95
  }
92
96
  } finally {
93
97
  prompt.close();
94
98
  }
99
+ } else {
100
+ for (const parameter of parameters.filter(({ required, key }) => required && !mapped[key])) {
101
+ mapped[parameter.key] = parameterDefault(parameter, mapped);
102
+ }
103
+ }
104
+ const missing = parameters.filter(({ key, required }) => required && !mapped[key]);
105
+ if (missing.length) {
106
+ throw new Error(`Missing required values: ${missing.map(({ key }) => key).join(", ")}`);
95
107
  }
96
108
  for (const key of ["company_name", "policy_owner_name"]) {
97
109
  if (/[\u0000-\u001f\u007f]/.test(mapped[key])) {
@@ -102,12 +114,39 @@ async function resolvePromptValues(parameters, options) {
102
114
  throw new Error(`${key} cannot contain template token syntax.`);
103
115
  }
104
116
  }
105
- if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(mapped.security_contact_email)) {
106
- throw new Error("Security contact email must be a valid email address.");
117
+ for (const [key, label] of [
118
+ ["policy_owner_email", "Policy owner email"],
119
+ ["security_contact_email", "Security contact email"]
120
+ ]) {
121
+ if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(mapped[key])) {
122
+ throw new Error(`${label} must be a valid email address.`);
123
+ }
107
124
  }
125
+ if (!isTimezone(mapped.timezone)) throw new Error("Program timezone must be a valid IANA time zone.");
108
126
  return mapped;
109
127
  }
110
128
 
129
+ function parameterDefault(parameter, mapped) {
130
+ if (parameter.defaultFrom) return mapped[parameter.defaultFrom] || "";
131
+ if (parameter.defaultSource === "local-timezone") return localTimezone();
132
+ return "";
133
+ }
134
+
135
+ function localTimezone() {
136
+ const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone;
137
+ return isTimezone(timezone) ? timezone : "UTC";
138
+ }
139
+
140
+ function isTimezone(value) {
141
+ if (!value) return false;
142
+ try {
143
+ new Intl.DateTimeFormat("en-US", { timeZone: value }).format();
144
+ return true;
145
+ } catch {
146
+ return false;
147
+ }
148
+ }
149
+
111
150
  async function assertWritableTarget(target, force) {
112
151
  try {
113
152
  if ((await lstat(target)).isSymbolicLink()) {
@@ -213,16 +252,29 @@ async function collectFiles(directory) {
213
252
  return result;
214
253
  }
215
254
 
255
+ async function summarizeResources(target) {
256
+ const counts = {};
257
+ let total = 0;
258
+ for (const path of await collectFiles(join(target, "data"))) {
259
+ if (extname(path) !== ".json") continue;
260
+ const record = JSON.parse(await readFile(path, "utf8"));
261
+ if (!record?.id || !record?.type || !record?.schemaVersion) continue;
262
+ total += 1;
263
+ counts[record.type] = (counts[record.type] || 0) + 1;
264
+ }
265
+ return { total, byType: counts };
266
+ }
267
+
216
268
  async function writeMinimalLockfile(target, name, versionRange) {
217
269
  const lock = {
218
270
  name,
219
- version: "0.2.0",
271
+ version: "0.3.0",
220
272
  lockfileVersion: 3,
221
273
  requires: true,
222
274
  packages: {
223
275
  "": {
224
276
  name,
225
- version: "0.2.0",
277
+ version: "0.3.0",
226
278
  dependencies: { filegrc: versionRange }
227
279
  }
228
280
  }
@@ -251,7 +303,7 @@ async function run(command, args, cwd) {
251
303
  function cleanVersion(value) {
252
304
  const version = String(value ?? "").trim().replace(/^v/, "");
253
305
  if (!/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/.test(version)) {
254
- throw new Error(`Could not resolve a valid FileGRC version from "${value}".`);
306
+ throw new Error(`Could not resolve a valid filegrc version from "${value}".`);
255
307
  }
256
308
  return version;
257
309
  }
@@ -1,8 +1,8 @@
1
- # FileGRC SOC 2 Workspace Instructions
1
+ # filegrc SOC 2 Workspace Instructions
2
2
 
3
3
  ## Purpose
4
4
 
5
- This repository is {{company_name}}’s FileGRC workspace for its SOC 2 program. Engineers and agents maintain the source records under `data/`. The `filegrc` package validates, searches, edits, and renders those files.
5
+ This repository is {{company_name}}’s filegrc workspace for its SOC 2 program. Engineers and agents maintain the source records under `data/`. The `filegrc` package validates, searches, edits, and renders those files.
6
6
 
7
7
  Using this repository does not establish compliance by itself. Records must match actual practice and evidence must prove that controls operated during the audit period.
8
8
 
@@ -15,7 +15,7 @@ npx filegrc guide --json
15
15
  npx filegrc program-path --json
16
16
  npx filegrc guide risk-assessment --json
17
17
  npx filegrc list person --json
18
- npx filegrc program-readiness --json
18
+ npx filegrc program-readiness --summary --json
19
19
  ```
20
20
 
21
21
  `program-path` gives agents the same six-step order, exact page Instructions, Use, Policy Basis, commands, current state, and next actions shown in the renderer. The general guide lists every supported action and record type. A type guide repeats that page guidance and adds timing, required and conditional fields, current relationship candidates, JSON location, and Markdown slots.
@@ -46,7 +46,7 @@ Read `data/AGENTS.md` before changing records. More specific instructions inside
46
46
  - Let the local app generate IDs from each record’s name or title. When editing JSON directly, keep IDs globally unique, human-readable, and lowercase kebab-case.
47
47
  - Use ISO 8601 dates and RFC 3339 timestamps.
48
48
  - Store relationships as resource IDs.
49
- - Put policies, plans, charters, procedures, meeting minutes, training, assertions, narratives, templates, and audit responses in Markdown beside their JSON records. FileGRC derives the Markdown name, so records do not contain file paths.
49
+ - Put policies, plans, charters, procedures, meeting minutes, training, assertions, narratives, templates, and audit responses in Markdown beside their JSON records. filegrc derives the Markdown name, so records do not contain file paths.
50
50
  - Put signed forms, screenshots, third-party reports, and immutable exports behind evidence records. These files may be PDF, image, CSV, or another fixed format.
51
51
  - Never fetch an external evidence reference automatically.
52
52
  - Do not store secrets, credentials, session data, or personal data that may need to be erased from Git history.
@@ -95,7 +95,7 @@ Headless agents get the same protection by exporting an edit payload with `fileg
95
95
 
96
96
  `data/renderer.json` stores committed renderer preferences. New workspaces set `showOnboarding` to `true`. Completing or skipping onboarding sets it to `false`; the app does not commit that change.
97
97
 
98
- Onboarding explains the file and Git workflow, the program path, policy obligations, and Policy Events before covering report types and the final audit stage. It then collects the initial service boundary, owner, business criticality, highest data classification, internet exposure, and optional program goal. It creates or updates a `system` record and stores the management goal and program scope on `workspace`. Selecting Type 1 or Type 2 does not create an audit engagement. Completing onboarding opens the Step 1 overview so the user can confirm the starter people and oversight team, criteria, commitments, vendors, and systems before approving policies.
98
+ Onboarding explains the file and Git workflow, the program path, policy obligations, and Policy Events before covering report types and the final audit stage. It then collects the initial service boundary, owner, business criticality, highest data classification, internet exposure, and optional program goal. It creates or updates a `system` record and stores the management goal and program scope on `workspace`. Selecting Type 1 or Type 2 does not create an audit engagement. Completing onboarding opens the Step 1 overview so the user can add the real reviewers and operators, finish the oversight team, and confirm the criteria, commitments, vendors, and systems before approving policies.
99
99
 
100
100
  The renderer is optional. Agents may set `showOnboarding` to `false` and maintain all records headlessly. Restart onboarding from Repository when useful. Read-only builds never run it.
101
101
 
@@ -111,7 +111,7 @@ The generated workspace starts with the SOC 2 Security category:
111
111
  - Recurring obligations for the reviews, scans, tests, training, and meetings required by the included policies
112
112
  - A default 5x5 risk method and Public, Internal, Confidential, and Restricted data classifications
113
113
 
114
- Treat every planned control as a proposal until its owner, actual procedure in Record Markdown, system scope, cadence, authoritative evidence sources, implementation date, and mappings match actual practice. For a control linked to FileGRC obligations, every non-retired Work Queue schedule must be enabled and its governing policies effective. Marking the control implemented starts eligible schedules. Do not mark a control implemented because a policy describes it. Add Availability, Processing Integrity, Confidentiality, or Privacy criteria only when they are in scope.
114
+ Treat every planned control as a proposal until its owner, actual procedure in Record Markdown, system scope, cadence, authoritative evidence sources, implementation date, and mappings match actual practice. For a control linked to filegrc obligations, every non-retired Work Queue schedule must be enabled and its governing policies effective. Marking the control implemented starts eligible schedules. Do not mark a control implemented because a policy describes it. Add Availability, Processing Integrity, Confidentiality, or Privacy criteria only when they are in scope.
115
115
 
116
116
  The recurring obligations mirror the fixed cadences in the starter policies. They remain proposals until every governing policy is active and effective and, when they name controls, at least one linked control is implemented. Update the policy, control, and obligation together when an approved cadence changes. Create separate completion records, such as meetings, reviews, scans, tests, exercises, and attestations, for each period.
117
117
 
@@ -141,7 +141,7 @@ npx filegrc trigger person-started --occurred-on 2026-07-25 --subject person-new
141
141
  npx filegrc trigger person-ended --occurred-at 2026-07-25T16:30:00-05:00 --subject person-departing-worker --json
142
142
  ```
143
143
 
144
- Run `npx filegrc obligations` first to preview every task, owner, deadline, and requested proof for each available Policy Event. The trigger command creates one `obligation-event` and adds its full set of Action Items to the Work Queue in a single validated write. Its success output names the event, task count, task IDs, and deadlines. Hour-based deadlines require an RFC 3339 event timestamp so an immediate or 24-hour cutoff is exact. Day-based deadlines use the event’s calendar date. Link the requested completion resources and evidence to each action item, then mark the actions done and the event complete. Every generated action has a cutoff. FileGRC applies a 30-day deadline when a custom event obligation omits one.
144
+ Run `npx filegrc obligations` first to preview every task, owner, deadline, and requested proof for each available Policy Event. The trigger command creates one `obligation-event` and adds its full set of Action Items to the Work Queue in a single validated write. Its success output names the event, task count, task IDs, and deadlines. Hour-based deadlines require an RFC 3339 event timestamp so an immediate or 24-hour cutoff is exact. Day-based deadlines use the event’s calendar date. Link the requested completion resources and evidence to each action item, then mark the actions done and the event complete. Every generated action has a cutoff. filegrc applies a 30-day deadline when a custom event obligation omits one.
145
145
 
146
146
  Complete an event action and link its new proof in one validated write:
147
147
 
@@ -150,7 +150,7 @@ npx filegrc complete-action action-item-id completion-record.json --completed-on
150
150
  npx filegrc complete-event obligation-event-id --completed-on 2026-07-25
151
151
  ```
152
152
 
153
- FileGRC rejects a completion resource whose type does not match the obligation. It will close the event only after every action has its requested proof.
153
+ filegrc rejects a completion resource whose type does not match the obligation. It will close the event only after every action has its requested proof.
154
154
 
155
155
  ## Headless Markdown
156
156
 
@@ -161,7 +161,7 @@ npx filegrc content risk-assessment risk-assessment-2026 --json
161
161
  npx filegrc content risk-assessment risk-assessment-2026 --write updated-assessment.md
162
162
  ```
163
163
 
164
- Run `filegrc guide <type>` to get slot names. Policies use `content`, meetings use `agenda` and `minutes`, and implicit long-form work uses `record`. FileGRC derives the path and rejects content that does not belong to the record.
164
+ Run `filegrc guide <type>` to get slot names. Policies use `content`, meetings use `agenda` and `minutes`, and implicit long-form work uses `record`. filegrc derives the path and rejects content that does not belong to the record.
165
165
 
166
166
  ## Program readiness and the candidate period
167
167
 
@@ -169,7 +169,7 @@ Prepare the management program before creating an audit engagement:
169
169
 
170
170
  ```sh
171
171
  npx filegrc program-readiness
172
- npx filegrc program-readiness --require-ready --json
172
+ npx filegrc program-readiness --require-ready --summary --json
173
173
  ```
174
174
 
175
175
  The Evidence Ready gate requires:
@@ -178,15 +178,15 @@ The Evidence Ready gate requires:
178
178
  2. Active policies with completed text, separate management approval, real approval and effective dates, and linked controls.
179
179
  3. Implemented controls with an owner, actual procedure, scope, cadence, evidence source, mappings, implementation date, and every eligible linked Work Queue schedule running.
180
180
  4. Active authoritative systems with evidence source roles, access owners, and repeatable extraction instructions in Record Markdown.
181
- 5. A verified `test-export` or `test-capture` evidence record for each selected control family that relies on evidence from outside FileGRC.
181
+ 5. A verified `test-export` or `test-capture` evidence record for each selected control family that relies on evidence from outside filegrc.
182
182
 
183
- Completing onboarding creates draft External Evidence records only for evidence that must come from other systems and does not already have a dedicated Step 5 record. FileGRC-managed records, such as risk assessments, meetings, vendor reviews, attestations, vulnerability scans, penetration tests, backup tests, exercises, exceptions, and findings, do not need a separate collection test. Put any fixed external artifact in an External Evidence record and link it from the operating record. For each generated draft, choose its authoritative source System, attach or reference the real result, record its collector and classification, then have another person verify it. Run `npx filegrc evidence-test-drafts` to create any drafts needed after the control set changes.
183
+ Completing onboarding creates draft External Evidence records only for evidence that must come from other systems and does not already have a dedicated Step 5 record. filegrc-managed records, such as risk assessments, meetings, vendor reviews, attestations, vulnerability scans, penetration tests, backup tests, exercises, exceptions, and findings, do not need a separate collection test. Put any fixed external artifact in an External Evidence record and link it from the operating record. For each generated draft, choose its authoritative source System, attach or reference the real result, record its collector and classification, then have another person verify it. Run `npx filegrc evidence-test-drafts` to create any drafts needed after the control set changes.
184
184
 
185
185
  When the gate passes, set `workspace.candidatePeriodStart` to the date reliable evidence collection begins. Do not backdate it. `candidatePeriodStart` and `candidatePeriodEnd` express management’s target. They do not establish the final report period.
186
186
 
187
187
  Maintain risk assessments and the risk register while the program operates. Complete assessments on schedule and after material changes, and add or update controls when the conclusions require a different response. Audit preparation still checks for a current, independently reviewed assessment.
188
188
 
189
- Record complementary customer or subservice controls after the internal control set is defined. `complementary-control.relatedControlIds` is the source of truth for those links. FileGRC derives the reverse connections for Control pages and evidence packets.
189
+ Record complementary customer or subservice controls after the internal control set is defined. `complementary-control.relatedControlIds` is the source of truth for those links. filegrc derives the reverse connections for Control pages and evidence packets.
190
190
 
191
191
  ## Audit preparation and evidence packets
192
192
 
@@ -204,16 +204,16 @@ Preparation creates a separate system description, management assertion, and man
204
204
 
205
205
  Review both evidence paths against the exact firm-agreed date or period:
206
206
 
207
- 1. FileGRC Evidence consists of dated Step 5 operating records. Complete each applicable record, link it to the Controls it supports, record the result in structured fields or Markdown, and link any external artifact needed to support that result.
207
+ 1. filegrc Evidence consists of dated Step 5 operating records. Complete each applicable record, link it to the Controls it supports, record the result in structured fields or Markdown, and link any external artifact needed to support that result.
208
208
  2. External Evidence consists of verified `evidence` records from authoritative Systems. Confirm the source System, audit date or period, Control links, collector, verifier, and fixed attachment or approved external reference.
209
209
 
210
- Audit Readiness reports coverage for both paths. The packet includes the matching FileGRC records and Markdown with Git history, plus External Evidence records, retained attachments, delivery indexes, and checksums.
210
+ Audit Readiness reports coverage for both paths. The packet includes the matching filegrc records and Markdown with Git history, plus External Evidence records, retained attachments, delivery indexes, and checksums.
211
211
 
212
212
  Near the end of fieldwork, link a verified fixed-format copy of the signed management representation letter to its engagement-specific document. Date it on or after the Type 1 date or Type 2 period end. A representation that is still marked for later blocks packet delivery.
213
213
 
214
214
  Catalog each authoritative source under Systems and assign its `evidenceSourceKinds`. A third-party application is still a System because it operates controls or produces evidence. Create a separate Vendor for its provider and connect the System through `vendorId`; keep contracts, due diligence, and supplier risk on the Vendor. Name the people who can access system reports and keep extraction instructions in the System's Record Markdown. For each Type 2 population, select one source system and export the exact audit period. Split a population when different systems or queries produce its items. Link a verified `population-export` evidence record that names the same source system and stores the query or report parameters, generation time, timezone, count, completeness check, and accuracy check. A zero count still requires the source export and query. A population linked to an in-scope control cannot be marked not applicable.
215
215
 
216
- Every evidence record names its collector. Verified evidence also names its verifier and verification date. Use `sourceSystemId` for system exports, `sourceResourceIds` for FileGRC records, and `sourceCommit` to bind the evidence to repository state.
216
+ Every evidence record names its collector. Verified evidence also names its verifier and verification date. Use `sourceSystemId` for system exports, `sourceResourceIds` for filegrc records, and `sourceCommit` to bind the evidence to repository state.
217
217
 
218
218
  Preview coverage before writing output:
219
219
 
@@ -223,15 +223,15 @@ npx filegrc evidence-packet --audit audit-2026-type-2
223
223
  npx filegrc evidence-packet --audit audit-2026-type-2 --preview --require-ready
224
224
  ```
225
225
 
226
- The packet includes records explicitly related to the selected engagement, its systems, controls, criteria, policies, evidence, and dependencies. It does not include unrelated dated records from the workspace. A Type 2 packet adds FileGRC Evidence, recurring obligation occurrences, event workflows, and management population reconciliations. Output includes a control matrix with separate FileGRC Evidence and External Evidence columns, source-system index, external-evidence delivery index, population index, evidence index, committed historical source versions, and SHA-256 checksums. Output under `.filegrc/evidence-packets/` is derived and must not be hand-edited or committed.
226
+ The packet includes records explicitly related to the selected engagement, its systems, controls, criteria, policies, evidence, and dependencies. It does not include unrelated dated records from the workspace. A Type 2 packet adds filegrc Evidence, recurring obligation occurrences, event workflows, and management population reconciliations. Output includes a control matrix with separate filegrc Evidence and External Evidence columns, source-system index, external-evidence delivery index, population index, evidence index, committed historical source versions, and SHA-256 checksums. Output under `.filegrc/evidence-packets/` is derived and must not be hand-edited or committed.
227
227
 
228
- Treat a packet as ready for management delivery only when its status is `delivery-ready`, its review list is clear, and its manifest names a clean Git revision. This means FileGRC's management checks passed. It does not mean the engagement team found the evidence sufficient or appropriate. The generator copies raw records, Markdown, and local fixed attachments. It never fetches external references. Reconcile `external-evidence-index.csv` to the auditor portal or other approved delivery system before telling the engagement team that submission is complete.
228
+ Treat a packet as ready for management delivery only when its status is `delivery-ready`, its review list is clear, and its manifest names a clean Git revision. This means filegrc's management checks passed. It does not mean the engagement team found the evidence sufficient or appropriate. The generator copies raw records, Markdown, and local fixed attachments. It never fetches external references. Reconcile `external-evidence-index.csv` to the auditor portal or other approved delivery system before telling the engagement team that submission is complete.
229
229
 
230
- Link a control test to its `audit-population` record when sampling applies. Link item-level sample evidence separately. Management owns population completeness and accuracy. The auditor owns sample selection, independent testing, exception evaluation, and the report opinion. The auditor or publisher also supplies the authoritative criteria and examination guidance. FileGRC stores references and orientation text, not licensed criteria.
230
+ Link a control test to its `audit-population` record when sampling applies. Link item-level sample evidence separately. Management owns population completeness and accuracy. The auditor owns sample selection, independent testing, exception evaluation, and the report opinion. The auditor or publisher also supplies the authoritative criteria and examination guidance. filegrc stores references and orientation text, not licensed criteria.
231
231
 
232
232
  ## Content and approvals
233
233
 
234
- The seed policy owner is {{policy_owner_name}} and the reporting address is {{security_contact_email}}. Replace ownership or contacts when responsibilities change.
234
+ The seed policy owner is {{policy_owner_name}} at {{policy_owner_email}}, and the security reporting address is {{security_contact_email}}. Replace ownership or contacts when responsibilities change.
235
235
 
236
236
  Appoint an independent management reviewer during policy review, not as a condition of defining the service boundary. The reviewer must be separate from the policy owner and able to challenge the owner’s decisions. Most organizations assign another internal leader or manager. An external reviewer is also allowed, and a one-person company needs one because no second internal person is available. The reviewer chairs Security and Risk Oversight and approves policies and governed documents.
237
237
 
@@ -1,18 +1,18 @@
1
- # FileGRC
1
+ # filegrc
2
+
3
+ ![filegrc, run a SOC 2 program as files in Git](docs/filegrc-social-preview.png)
2
4
 
3
5
  Run a SOC 2 program as files in Git.
4
6
 
5
- FileGRC gives a founder-led engineering team one place to adopt policies, implement controls, test External Evidence collection, run recurring compliance work, and prepare an audit. JSON holds structured records, Markdown holds long-form work, and Git supplies the change history.
7
+ filegrc gives a founder-led engineering team one place to adopt policies, implement controls, test External Evidence collection, run recurring compliance work, and prepare an audit. JSON holds structured records, Markdown holds long-form work, and Git supplies the change history.
6
8
 
7
9
  There is no separate application database. The repository is the program, so engineers and agents can use the same data through the web app, a text editor, or the CLI.
8
10
 
9
- ![FileGRC SOC 2 program overview](docs/filegrc-home.png)
10
-
11
11
  ## Why it exists
12
12
 
13
13
  SOC 2 work tends to scatter across documents, calendars, tickets, screenshots, and the auditor’s request list. That makes it hard to answer basic questions: What is due? Which policy requires it? What changed during the audit period? Is the evidence complete?
14
14
 
15
- FileGRC keeps that work connected:
15
+ filegrc keeps that work connected:
16
16
 
17
17
  - A starter Security program links criteria references, policies, planned controls, owners, and schedules.
18
18
  - Work Queue turns policy timing into upcoming, due, and overdue work.
@@ -34,11 +34,11 @@ npm run validate
34
34
  npm run serve
35
35
  ```
36
36
 
37
- Setup asks for the company name, the initial policy owner, and a security contact email. It initializes Git when needed. The first local run then defines the initial service boundary and an optional program goal. A Type 2 choice records management intent, not an audit engagement. Completing onboarding opens Step 1 so you can confirm the starter people and oversight team, criteria, commitments, vendors, and systems before moving on.
37
+ Setup asks for the legal organization name, the initial policy owner and their email, a security reporting address, and the program timezone. It initializes Git when needed. The first local run then defines the initial service boundary and an optional program goal. A Type 2 choice records management intent, not an audit engagement. Completing onboarding opens Step 1 so you can add the real reviewers and operators, finish the oversight team, and confirm the criteria, commitments, vendors, and systems before moving on.
38
38
 
39
39
  Open the printed local URL. You can commit locally from Repository without configuring a remote. Add a remote when the team is ready to share the workspace, then the browser can pull with rebase and push reviewed commits.
40
40
 
41
- The creation summary reports the resolved engine version, install result, and whether the target joined an existing Git worktree. Generated workspaces receive an organization-specific README with their engine version, validation commands, and remaining setup work.
41
+ The creation summary reports the resolved engine version, program timezone, starter record counts, install result, and whether the target joined an existing Git worktree. Generated workspaces receive an organization-specific README with their engine version, validation commands, and remaining setup work.
42
42
 
43
43
  ## How it works
44
44
 
@@ -46,8 +46,8 @@ The creation summary reports the resolved engine version, install result, and wh
46
46
  2. Review and activate the policies with a separate management reviewer, who is usually internal and may be external.
47
47
  3. Tailor the starter controls, add each owner, actual procedure, scope, cadence, evidence source, and implementation date, and confirm any linked Work Queue schedules are enabled. Marking a control implemented starts eligible schedules. Then record any complementary customer or subservice controls.
48
48
  4. Open each generated External Evidence draft, choose its authoritative source System, collect the named artifact, and have another person verify it.
49
- 5. Start the management candidate period, maintain risk assessments and risks, update controls when needed, work the FileGRC queue, and preserve dated evidence.
50
- 6. Engage a CPA firm, record the separate firm-agreed period, review FileGRC Evidence and External Evidence, prepare fieldwork, and generate the evidence packet.
49
+ 5. Start the management candidate period, maintain risk assessments and risks, update controls when needed, work the filegrc queue, and preserve dated evidence.
50
+ 6. Engage a CPA firm, record the separate firm-agreed period, review filegrc Evidence and External Evidence, prepare fieldwork, and generate the evidence packet.
51
51
 
52
52
  Long-form policies, procedures, plans, minutes, training, assertions, and audit responses are Markdown companions beside their JSON records. Screenshots, signed acknowledgements, reports, and fixed exports are attachments linked through evidence records.
53
53
 
@@ -57,7 +57,9 @@ Third-party software is usually both a System and a Vendor. The application is t
57
57
 
58
58
  Use Overview to follow one six-step path: define scope, approve policies, implement controls, test External Evidence, operate the program, then complete the audit. Steps 1 through 4 and Step 6 open an overview with instructions, record links, progress, and completion status. Step 5 opens Policy Events and the Work Queue because operation is ongoing rather than a one-time checklist. The progress tracker opens the first incomplete step.
59
59
 
60
- Use Work Queue for recurring work, Policy Event tasks, and other assigned follow-up. Trigger a Policy Event when the underlying change occurs, and FileGRC adds its required actions to the queue with their owners and deadlines. Create a separate Action Item only when follow-up needs its own assignee, deadline, and completion proof. Each queue item shows its due window or deadline. Link dated proof to close the work.
60
+ ![filegrc SOC 2 program overview](docs/filegrc-home.png)
61
+
62
+ Use Work Queue for recurring work, Policy Event tasks, and other assigned follow-up. Trigger a Policy Event when the underlying change occurs, and filegrc adds its required actions to the queue with their owners and deadlines. Create a separate Action Item only when follow-up needs its own assignee, deadline, and completion proof. Each queue item shows its due window or deadline. Link dated proof to close the work.
61
63
 
62
64
  Use the resource pages to maintain systems, people, vendors, risks, controls, tests, incidents, training, meetings, and External Evidence. The question-mark guide on each list explains what the record type is for, which policies call for it, and when to update it.
63
65
 
@@ -69,7 +71,7 @@ npx filegrc program-path --json
69
71
  npx filegrc scaffold risk-assessment --title "2026 Annual Risk Assessment"
70
72
  npx filegrc list risk --json
71
73
  npx filegrc obligations --json
72
- npx filegrc program-readiness --json
74
+ npx filegrc program-readiness --summary --json
73
75
  npx filegrc complete obligation-id completion-record.json
74
76
  npx filegrc trigger person-started --occurred-on 2026-07-25 --subject person-id
75
77
  npx filegrc complete-action action-item-id completion-record.json --completed-on 2026-07-25
@@ -77,7 +79,7 @@ npx filegrc complete-event obligation-event-id --completed-on 2026-07-25
77
79
  npx filegrc search "access review"
78
80
  ```
79
81
 
80
- `program-path` reports the same six steps, current status, page order, exact Instructions, Use, Policy Basis, and next actions shown in the renderer. `guide` reports that same page guidance for one resource, plus timing, required fields, valid values, relationship candidates, and Markdown locations. `scaffold` produces the same JSON and Markdown mutation shape used by the browser. Read `AGENTS.md` and `data/AGENTS.md` for the full headless workflow.
82
+ `program-path` reports the same six steps, current status, page order, exact Instructions, Use, Policy Basis, and next actions shown in the renderer. `program-readiness --summary --json` reports compact stage counts and next actions; omit `--summary` when you need every readiness item. `guide` reports that same page guidance for one resource, plus timing, required fields, valid values, relationship candidates, and Markdown locations. `scaffold` produces the same JSON and Markdown mutation shape used by the browser. Read `AGENTS.md` and `data/AGENTS.md` for the full headless workflow.
81
83
 
82
84
  ## Start the evidence period
83
85
 
@@ -88,17 +90,17 @@ npx filegrc program-readiness --json
88
90
  npx filegrc program-readiness --require-ready
89
91
  ```
90
92
 
91
- The Evidence Ready gate requires defined scope, effective policies, implemented controls, configured authoritative systems, and verified collection for external evidence that does not already have a dedicated Step 5 record. Put scan reports, backup output, and other fixed artifacts in External Evidence records, then link them from the applicable Step 5 operating records. Starter obligations remain enabled proposals until their governing policies are effective and at least one linked control is implemented. A FileGRC-managed control cannot be implemented while one of its linked Work Queue schedules is paused or waiting for policy approval.
93
+ The Evidence Ready gate requires defined scope, effective policies, implemented controls, configured authoritative systems, and verified collection for external evidence that does not already have a dedicated Step 5 record. Put scan reports, backup output, and other fixed artifacts in External Evidence records, then link them from the applicable Step 5 operating records. Starter obligations remain enabled proposals until their governing policies are effective and at least one linked control is implemented. A filegrc-managed control cannot be implemented while one of its linked Work Queue schedules is paused or waiting for policy approval.
92
94
 
93
95
  When the gate passes, record `candidatePeriodStart` on the workspace on the date reliable collection begins. This is management’s candidate Type 2 period. Do not backdate it. The later audit record keeps the separate period agreed with the CPA firm.
94
96
 
95
97
  ## Prepare the audit
96
98
 
97
- After engaging a CPA firm, create the audit record with the firm, scope, and exact agreed date or period. Audit Readiness checks the program foundation, engagement, formal scope and dates, management documents, FileGRC Evidence, External Evidence, and Type 2 populations.
99
+ After engaging a CPA firm, create the audit record with the firm, scope, and exact agreed date or period. Audit Readiness checks the program foundation, engagement, formal scope and dates, management documents, filegrc Evidence, External Evidence, and Type 2 populations.
98
100
 
99
- ![FileGRC audit readiness](docs/filegrc-audit.png)
101
+ ![filegrc audit readiness](docs/filegrc-audit.png)
100
102
 
101
- For a Type 2 audit, reconcile each complete period population to its authoritative system after the period closes. A zero-item population still needs its source export and query. FileGRC Evidence consists of dated operating records and their Markdown and Git history. External Evidence consists of verified exports, reports, screenshots, signed files, and approved external references. The packet compiles both paths with the selected records, attachments, indexes, historical versions, and SHA-256 checksums.
103
+ For a Type 2 audit, reconcile each complete period population to its authoritative system after the period closes. A zero-item population still needs its source export and query. filegrc Evidence consists of dated operating records and their Markdown and Git history. External Evidence consists of verified exports, reports, screenshots, signed files, and approved external references. The packet compiles both paths with the selected records, attachments, indexes, historical versions, and SHA-256 checksums.
102
104
 
103
105
  ```sh
104
106
  npx filegrc prepare-audit audit-id
@@ -106,15 +108,15 @@ npx filegrc audit-readiness audit-id --json
106
108
  npx filegrc evidence-packet --audit audit-id
107
109
  ```
108
110
 
109
- FileGRC checks management preparation and packet integrity. The independent CPA firm still selects samples, tests controls, evaluates exceptions, decides whether evidence is sufficient, and issues the SOC 2 report.
111
+ filegrc checks management preparation and packet integrity. The independent CPA firm still selects samples, tests controls, evaluates exceptions, decides whether evidence is sufficient, and issues the SOC 2 report.
110
112
 
111
113
  Early CPA engagement remains available when a customer deadline, unusual scope, or other timing risk needs input before the program reaches Evidence Ready. It is optional, not the default first action.
112
114
 
113
115
  ## What belongs elsewhere
114
116
 
115
- FileGRC does not replace workforce, identity, source-control, deployment, infrastructure, monitoring, endpoint, backup, vulnerability, training, signature, procurement, contract, or vendor-risk systems.
117
+ filegrc does not replace workforce, identity, source-control, deployment, infrastructure, monitoring, endpoint, backup, vulnerability, training, signature, procurement, contract, or vendor-risk systems.
116
118
 
117
- Catalog each authoritative system in FileGRC, record how to export from it, and attach or reference the fixed evidence when Audit Readiness asks for it. The generated external-delivery index identifies files that still need to be supplied through an auditor portal or another approved channel.
119
+ Catalog each authoritative system in filegrc, record how to export from it, and attach or reference the fixed evidence when Audit Readiness asks for it. The generated external-delivery index identifies files that still need to be supplied through an auditor portal or another approved channel.
118
120
 
119
121
  The starter uses the SOC 2 Security category and does not include licensed criteria text. Add Availability, Processing Integrity, Confidentiality, or Privacy only when they are in scope.
120
122
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  This private workspace holds {{company_name}}'s SOC 2 program records and audit evidence. JSON under `data/` stores structured records, Markdown stores long-form work, and Git records reviewed changes.
4
4
 
5
- The workspace uses FileGRC {{filegrc_version}} through the dependency range `{{filegrc_version_range}}`.
5
+ The workspace uses filegrc {{filegrc_version}} through the dependency range `{{filegrc_version_range}}`.
6
6
 
7
7
  ## Work locally
8
8
 
@@ -31,11 +31,11 @@ Read `AGENTS.md` and `data/AGENTS.md` before broad changes.
31
31
 
32
32
  The starter policies, controls, and obligations are proposals. They do not state that {{company_name}} operates the described controls.
33
33
 
34
- 1. Use browser onboarding or `npx filegrc setup --help` to record the initial service and goal, then finish Step 1 by confirming the people and oversight team, applicable criteria, commitments, material vendors, and in-scope systems.
34
+ 1. Run `npx filegrc setup` for guided service and goal setup, or use browser onboarding. Then finish Step 1 by adding the real reviewers and operators, finishing the oversight team, and confirming applicable criteria, commitments, material vendors, and in-scope systems.
35
35
  2. Review the starter policies, appoint a reviewer who is separate from the policy owner, and activate only the policies that match current practice. The reviewer will usually be another person in the organization, but may be external.
36
36
  3. Review the starter control set, implement each applicable control with its actual procedure, scope, cadence, evidence sources, and implementation date, and confirm any linked Work Queue schedules are enabled. Marking a control implemented starts eligible schedules. Then record any complementary customer or subservice controls.
37
37
  4. Open each generated External Evidence draft, choose its authoritative source System, collect the named artifact, and have another person verify it.
38
38
  5. Run `npx filegrc program-readiness --require-ready`, record the management candidate period start when reliable evidence collection begins, maintain risk assessments and risks, update controls when needed, use Work Queue for scheduled work, and trigger Policy Events when changes create required actions. `npx filegrc obligations` previews every event task, owner, deadline, and requested proof before the trigger creates anything.
39
- 6. Engage a CPA firm, record the separate firm-agreed period in an audit record, review FileGRC Evidence and External Evidence, and prepare fieldwork.
39
+ 6. Engage a CPA firm, record the separate firm-agreed period in an audit record, review filegrc Evidence and External Evidence, and prepare fieldwork.
40
40
 
41
- FileGRC manages GRC records and audit evidence. It does not replace infrastructure logging, monitoring, identity, backup, endpoint, or incident-detection systems.
41
+ filegrc manages GRC records and audit evidence. It does not replace infrastructure logging, monitoring, identity, backup, endpoint, or incident-detection systems.
@@ -1,4 +1,4 @@
1
- # FileGRC Data Instructions
1
+ # filegrc Data Instructions
2
2
 
3
3
  These instructions apply to every file under `data/`. The root `AGENTS.md` explains the program and Git workflow. A collection-level `AGENTS.md`, when present, adds rules for that resource.
4
4
 
@@ -24,7 +24,7 @@ Use `program-path` to find the current lifecycle step and see the renderer’s e
24
24
  - Work required on a schedule or event belongs in `obligation`.
25
25
  - A dated instance of work belongs in its activity type, such as `meeting`, `risk-assessment`, `access-review`, `vulnerability-scan`, `backup-test`, or `exercise`.
26
26
  - A fact that may change over time belongs in an inventory record, such as `person`, `system`, `asset`, `vendor`, or `access-grant`.
27
- - A dated Step 5 operating record proves that FileGRC-managed work occurred. Put each fixed external artifact in an `evidence` record and link it from the operating record; never add an unexplained attachment.
27
+ - A dated Step 5 operating record proves that filegrc-managed work occurred. Put each fixed external artifact in an `evidence` record and link it from the operating record; never add an unexplained attachment.
28
28
  - Follow-up work belongs in `action-item`. A gap belongs in `finding`, a known threat belongs in `risk`, and an approved temporary departure belongs in `exception`.
29
29
  - An auditor request belongs in `audit-request`; the engagement itself belongs in `audit`.
30
30
 
@@ -61,7 +61,7 @@ npx filegrc create /tmp/filegrc-mutation.json
61
61
  npx filegrc validate --json
62
62
  ```
63
63
 
64
- Creation is atomic. If JSON, Markdown, relationships, or validation fail, FileGRC rolls back the write. IDs are globally unique and immutable after commit.
64
+ Creation is atomic. If JSON, Markdown, relationships, or validation fail, filegrc rolls back the write. IDs are globally unique and immutable after commit.
65
65
 
66
66
  ## Read and update
67
67
 
@@ -77,7 +77,7 @@ Edit the exported mutation, then run:
77
77
  npx filegrc update RESOURCE_TYPE RESOURCE_ID /tmp/filegrc-mutation.json
78
78
  ```
79
79
 
80
- The mutation includes the complete record, current Markdown, and revision hashes. FileGRC rejects the update if another person or agent changed either source after export. Reload and reapply the intended change instead of overwriting it.
80
+ The mutation includes the complete record, current Markdown, and revision hashes. filegrc rejects the update if another person or agent changed either source after export. Reload and reapply the intended change instead of overwriting it.
81
81
 
82
82
  To update JSON and Markdown together, pass `{ "record": {...}, "content": {...}, "revision": "...", "contentRevisions": {...} }`. To change one Markdown slot:
83
83
 
@@ -121,7 +121,7 @@ Delete only an uncommitted draft or a mistake:
121
121
  npx filegrc delete RESOURCE_TYPE RESOURCE_ID --yes
122
122
  ```
123
123
 
124
- FileGRC rejects deletion that breaks references and removes owned Markdown with the JSON. Retire, close, cancel, supersede, or replace committed records that explain historical operation.
124
+ filegrc rejects deletion that breaks references and removes owned Markdown with the JSON. Retire, close, cancel, supersede, or replace committed records that explain historical operation.
125
125
 
126
126
  ## Evidence and attachments
127
127
 
@@ -148,7 +148,7 @@ Remove a local attachment explicitly before deleting its evidence record:
148
148
  npx filegrc detach EVIDENCE_ID source-export.csv --yes
149
149
  ```
150
150
 
151
- FileGRC will not delete an evidence record that still has local attachments.
151
+ filegrc will not delete an evidence record that still has local attachments.
152
152
 
153
153
  Never invent evidence, dates, approvals, results, people, or source-system details. If a required fact is unavailable, leave the record in a non-final state and report the missing input.
154
154
 
@@ -167,13 +167,13 @@ Run `obligations` before `trigger` to preview every Policy Event task, owner, de
167
167
  ## Audit work
168
168
 
169
169
  ```sh
170
- npx filegrc program-readiness --json
170
+ npx filegrc program-readiness --summary --json
171
171
  npx filegrc prepare-audit AUDIT_ID
172
172
  npx filegrc audit-readiness AUDIT_ID --json
173
173
  npx filegrc evidence-packet --audit AUDIT_ID --preview --json
174
174
  ```
175
175
 
176
- Run Program Readiness before creating the normal audit engagement. It checks scope, effective policies, implemented controls, evidence sources, and test captures without an audit ID. Fix readiness errors in source records. Do not edit packet output under `.filegrc/`. A delivery-ready FileGRC packet means the management checks passed; the engagement team still judges evidence and performs the examination.
176
+ Run Program Readiness before creating the normal audit engagement. It checks scope, effective policies, implemented controls, evidence sources, and test captures without an audit ID. Fix readiness errors in source records. Do not edit packet output under `.filegrc/`. A delivery-ready filegrc packet means the management checks passed; the engagement team still judges evidence and performs the examination.
177
177
 
178
178
  ## Finish every change
179
179
 
@@ -1,6 +1,6 @@
1
1
  # Action Item Instructions
2
2
 
3
- Create an Action Item only when follow-up needs its own assignee, deadline, and completion proof. Keep simpler remediation on the Finding or other source record. Set `sourceResourceId` to the record that created the work; FileGRC derives the backlink and adds every open Action Item to Work Queue. Keep the assignee, due date or policy window, blockers, completion records, and evidence explicit.
3
+ Create an Action Item only when follow-up needs its own assignee, deadline, and completion proof. Keep simpler remediation on the Finding or other source record. Set `sourceResourceId` to the record that created the work; filegrc derives the backlink and adds every open Action Item to Work Queue. Keep the assignee, due date or policy window, blockers, completion records, and evidence explicit.
4
4
 
5
5
  For an event-generated action, do not weaken or extend its policy deadline by hand. Create the requested completion resource and close the action atomically:
6
6
 
@@ -8,4 +8,4 @@ For an event-generated action, do not weaken or extend its policy deadline by ha
8
8
  npx filegrc complete-action ACTION_ITEM_ID completion-mutation.json --completed-on YYYY-MM-DD
9
9
  ```
10
10
 
11
- FileGRC rejects the wrong completion type. Mark ordinary Action Items `done` only after the work occurred, set `completedOn`, and link the completion record or evidence. Use `blocked` while a named dependency prevents work, and link that dependency with `blockingResourceIds`.
11
+ filegrc rejects the wrong completion type. Mark ordinary Action Items `done` only after the work occurred, set `completedOn`, and link the completion record or evidence. Use `blocked` while a named dependency prevents work, and link that dependency with `blockingResourceIds`.
@@ -17,10 +17,10 @@ Preparation creates engagement-specific management documents and, for Type 2, po
17
17
 
18
18
  Review both evidence paths for the exact formal date or period:
19
19
 
20
- 1. FileGRC Evidence consists of dated Step 5 operating records. Complete the record, link it to the applicable Controls, record the result in its fields or Markdown, and link any external artifact needed to support that result.
20
+ 1. filegrc Evidence consists of dated Step 5 operating records. Complete the record, link it to the applicable Controls, record the result in its fields or Markdown, and link any external artifact needed to support that result.
21
21
  2. External Evidence consists of verified `evidence` records from other Systems. Confirm the source System, date or period, Control links, collector, verifier, and fixed attachment or approved external reference.
22
22
 
23
- The packet compiles both paths. It includes FileGRC records and Markdown with Git history, plus External Evidence records, retained attachments, delivery indexes, and checksums.
23
+ The packet compiles both paths. It includes filegrc records and Markdown with Git history, plus External Evidence records, retained attachments, delivery indexes, and checksums.
24
24
 
25
25
  Run readiness repeatedly and fix source records. Preview the packet before writing it:
26
26
 
@@ -29,4 +29,4 @@ npx filegrc evidence-packet --audit AUDIT_ID --preview --json
29
29
  npx filegrc evidence-packet --audit AUDIT_ID
30
30
  ```
31
31
 
32
- Do not state that an auditor accepted evidence, selected a sample, cleared an exception, or issued a report unless that fact came from the engagement team. FileGRC tracks management preparation; the CPA firm owns examination judgments and the report.
32
+ Do not state that an auditor accepted evidence, selected a sample, cleared an exception, or issued a report unless that fact came from the engagement team. filegrc tracks management preparation; the CPA firm owns examination judgments and the report.
@@ -6,7 +6,6 @@
6
6
  "status": "draft",
7
7
  "documentKind": "plan",
8
8
  "ownerIds": ["person-policy-owner"],
9
- "approverIds": ["person-independent-approver"],
10
9
  "version": "1.0",
11
10
  "effectiveOn": "{{effective_date}}",
12
11
  "reviewCadence": {
@@ -6,7 +6,6 @@
6
6
  "status": "draft",
7
7
  "documentKind": "attestation-template",
8
8
  "ownerIds": ["person-policy-owner"],
9
- "approverIds": ["person-independent-approver"],
10
9
  "version": "1.0",
11
10
  "effectiveOn": "{{effective_date}}",
12
11
  "reviewCadence": {
@@ -6,7 +6,6 @@
6
6
  "status": "draft",
7
7
  "documentKind": "attestation-template",
8
8
  "ownerIds": ["person-policy-owner"],
9
- "approverIds": ["person-independent-approver"],
10
9
  "version": "1.0",
11
10
  "effectiveOn": "{{effective_date}}",
12
11
  "reviewCadence": {
@@ -6,7 +6,6 @@
6
6
  "status": "draft",
7
7
  "documentKind": "schedule",
8
8
  "ownerIds": ["person-policy-owner"],
9
- "approverIds": ["person-independent-approver"],
10
9
  "version": "1.0",
11
10
  "effectiveOn": "{{effective_date}}",
12
11
  "reviewCadence": {
@@ -6,7 +6,6 @@
6
6
  "status": "draft",
7
7
  "documentKind": "attestation-template",
8
8
  "ownerIds": ["person-policy-owner"],
9
- "approverIds": ["person-independent-approver"],
10
9
  "version": "1.0",
11
10
  "effectiveOn": "{{effective_date}}",
12
11
  "reviewCadence": {
@@ -6,7 +6,6 @@
6
6
  "status": "draft",
7
7
  "documentKind": "attestation-template",
8
8
  "ownerIds": ["person-policy-owner"],
9
- "approverIds": ["person-independent-approver"],
10
9
  "version": "1.0",
11
10
  "effectiveOn": "{{effective_date}}",
12
11
  "reviewCadence": {
@@ -6,7 +6,6 @@
6
6
  "status": "draft",
7
7
  "documentKind": "attestation-template",
8
8
  "ownerIds": ["person-policy-owner"],
9
- "approverIds": ["person-independent-approver"],
10
9
  "version": "1.0",
11
10
  "effectiveOn": "{{effective_date}}",
12
11
  "reviewCadence": {
@@ -6,7 +6,6 @@
6
6
  "status": "draft",
7
7
  "documentKind": "plan",
8
8
  "ownerIds": ["person-policy-owner"],
9
- "approverIds": ["person-independent-approver"],
10
9
  "version": "1.0",
11
10
  "effectiveOn": "{{effective_date}}",
12
11
  "reviewCadence": {
@@ -9,9 +9,6 @@
9
9
  "ownerIds": [
10
10
  "person-policy-owner"
11
11
  ],
12
- "approverIds": [
13
- "person-independent-approver"
14
- ],
15
12
  "version": "0.1",
16
13
  "classification": "Confidential"
17
14
  }
@@ -9,9 +9,6 @@
9
9
  "ownerIds": [
10
10
  "person-policy-owner"
11
11
  ],
12
- "approverIds": [
13
- "person-independent-approver"
14
- ],
15
12
  "version": "0.1",
16
13
  "classification": "Confidential"
17
14
  }
@@ -9,9 +9,6 @@
9
9
  "ownerIds": [
10
10
  "person-policy-owner"
11
11
  ],
12
- "approverIds": [
13
- "person-independent-approver"
14
- ],
15
12
  "version": "0.1",
16
13
  "classification": "Confidential"
17
14
  }
@@ -6,7 +6,7 @@ Reporting period: [start date] through [end date]
6
6
 
7
7
  Management reconciled every audit-population record linked to this engagement to its authoritative source and included every item relevant to the in-scope system and controls. The generated `population-index.csv` is incorporated into this statement by reference and records each population ID, source system, query, timezone, count, validation, reviewer, conclusion, and fixed export.
8
8
 
9
- | Population | FileGRC population ID | Result or exception |
9
+ | Population | filegrc population ID | Result or exception |
10
10
  | --- | --- | --- |
11
11
  | Workforce starts, role changes, and departures | [Population ID] | [Result] |
12
12
  | Access grants, changes, reviews, and removals | [Population ID] | [Result] |
@@ -27,6 +27,6 @@ For a population with zero items, retain the source-system export or report that
27
27
 
28
28
  ## Management Confirmation
29
29
 
30
- To the best of management's knowledge after the reconciliations above, FileGRC and the linked evidence contain the complete populations and reportable events relevant to the engagement period.
30
+ To the best of management's knowledge after the reconciliations above, filegrc and the linked evidence contain the complete populations and reportable events relevant to the engagement period.
31
31
 
32
32
  [Identify the responsible signer, title, signature or approval method, and date.]
@@ -9,9 +9,6 @@
9
9
  "ownerIds": [
10
10
  "person-policy-owner"
11
11
  ],
12
- "approverIds": [
13
- "person-independent-approver"
14
- ],
15
12
  "version": "0.1",
16
13
  "classification": "Internal"
17
14
  }
@@ -1,6 +1,6 @@
1
1
  # {{company_name}} SOC 2 System Description
2
2
 
3
- > Draft preparation document. Complete every bracketed item, reconcile it to the FileGRC records, and have the service auditor review the final presentation.
3
+ > Draft preparation document. Complete every bracketed item, reconcile it to the filegrc records, and have the service auditor review the final presentation.
4
4
 
5
5
  ## Reporting Period and Scope
6
6
 
@@ -16,7 +16,7 @@
16
16
 
17
17
  ## DC2: Service Commitments and System Requirements
18
18
 
19
- [Summarize customer commitments, contractual security promises, internal objectives, and the system requirements needed to meet them. Link the FileGRC commitment records.]
19
+ [Summarize customer commitments, contractual security promises, internal objectives, and the system requirements needed to meet them. Link the filegrc commitment records.]
20
20
 
21
21
  ## DC3: System Components
22
22
 
@@ -46,7 +46,7 @@
46
46
 
47
47
  ## DC5: Applicable Criteria and Controls
48
48
 
49
- [Reference the selected criteria and control matrix generated by FileGRC.]
49
+ [Reference the selected criteria and control matrix generated by filegrc.]
50
50
 
51
51
  ## DC6: Complementary User Entity Controls
52
52
 
@@ -2,14 +2,14 @@
2
2
 
3
3
  An evidence record explains what a proof item is, where it came from, what period it supports, who collected it, and which records or controls it supports. The attachment alone is not enough.
4
4
 
5
- Completing onboarding creates draft collection tests only for evidence that must come from systems outside FileGRC and does not already have a dedicated Step 5 record. Risk assessments, meetings, vendor reviews, attestations, vulnerability scans, penetration tests, backup tests, exercises, exceptions, and findings do not need a separate test. When one of those operating records needs a fixed external artifact, create or update an External Evidence record for the artifact and link its ID from the operating record. Keep a generated collection test as `draft` until the artifact has actually been captured. Set it to `collected` only after selecting the source System, attaching or referencing the result, and recording the source, date, classification, and collector. Set it to `verified` only after another named person checks it.
5
+ Completing onboarding creates draft collection tests only for evidence that must come from systems outside filegrc and does not already have a dedicated Step 5 record. Risk assessments, meetings, vendor reviews, attestations, vulnerability scans, penetration tests, backup tests, exercises, exceptions, and findings do not need a separate test. When one of those operating records needs a fixed external artifact, create or update an External Evidence record for the artifact and link its ID from the operating record. Keep a generated collection test as `draft` until the artifact has actually been captured. Set it to `collected` only after selecting the source System, attaching or referencing the result, and recording the source, date, classification, and collector. Set it to `verified` only after another named person checks it.
6
6
 
7
7
  ## Create evidence
8
8
 
9
9
  1. Run `npx filegrc guide evidence --json`.
10
10
  2. Use one evidence record for one coherent proof item or fixed export.
11
11
  3. Put local attachments under `data/evidence/EVIDENCE_ID/` and list their data-relative paths in `filePaths`.
12
- 4. Use `externalReference` only when the file must remain in an approved external system. FileGRC never fetches it.
12
+ 4. Use `externalReference` only when the file must remain in an approved external system. filegrc never fetches it.
13
13
  5. Link `sourceResourceIds`, `controlIds`, and `auditIds` as applicable. Use `sourceCommit` when the evidence represents repository state.
14
14
  6. Name the actual collector. A `verified` record also needs the actual verifier and verification date.
15
15
 
@@ -21,7 +21,7 @@ npx filegrc attach EVIDENCE_ID /path/to/source-file --name auditor-facing-name.c
21
21
 
22
22
  The command never overwrites an existing attachment.
23
23
 
24
- Use `npx filegrc detach EVIDENCE_ID FILE_NAME --yes` when removing a mistaken attachment. FileGRC will not delete an evidence record while local attachments remain.
24
+ Use `npx filegrc detach EVIDENCE_ID FILE_NAME --yes` when removing a mistaken attachment. filegrc will not delete an evidence record while local attachments remain.
25
25
 
26
26
  For a rendered page capture, record the route, filters, audit period, exact Git commit, capture time and method, source resource IDs, and screenshot. A current screenshot cannot prove an earlier state unless it is rendered from or bound to that revision.
27
27
 
@@ -15,4 +15,4 @@ Complete each action with the requested resource type and proof. Then close the
15
15
  npx filegrc complete-event OBLIGATION_EVENT_ID --completed-on YYYY-MM-DD
16
16
  ```
17
17
 
18
- FileGRC refuses to close an event with unfinished or unproved actions. Cancel an event only when the triggering event itself was entered in error or did not occur; explain the reason in related records or the commit message.
18
+ filegrc refuses to close an event with unfinished or unproved actions. Cancel an event only when the triggering event itself was entered in error or did not occur; explain the reason in related records or the commit message.
@@ -4,7 +4,7 @@
4
4
  "type": "person",
5
5
  "title": "{{policy_owner_name}}",
6
6
  "status": "active",
7
- "email": "{{security_contact_email}}",
7
+ "email": "{{policy_owner_email}}",
8
8
  "role": "Policy Owner",
9
9
  "teamIds": ["team-security-risk-oversight"]
10
10
  }
@@ -5,7 +5,6 @@
5
5
  "title": "Anti-Bribery and Corruption Policy",
6
6
  "status": "draft",
7
7
  "ownerIds": ["person-policy-owner"],
8
- "approverIds": ["person-independent-approver"],
9
8
  "policyKind": "corporate-conduct",
10
9
  "version": "1.0",
11
10
  "effectiveOn": "{{effective_date}}",
@@ -5,7 +5,6 @@
5
5
  "title": "Clear Desk and Clear Screen Policy",
6
6
  "status": "draft",
7
7
  "ownerIds": ["person-policy-owner"],
8
- "approverIds": ["person-independent-approver"],
9
8
  "policyKind": "information-security",
10
9
  "version": "1.0",
11
10
  "effectiveOn": "{{effective_date}}",
@@ -5,7 +5,6 @@
5
5
  "title": "Data Protection and Handling Policy",
6
6
  "status": "draft",
7
7
  "ownerIds": ["person-policy-owner"],
8
- "approverIds": ["person-independent-approver"],
9
8
  "policyKind": "information-security",
10
9
  "version": "1.0",
11
10
  "effectiveOn": "{{effective_date}}",
@@ -5,7 +5,6 @@
5
5
  "title": "Employee Handbook",
6
6
  "status": "draft",
7
7
  "ownerIds": ["person-policy-owner"],
8
- "approverIds": ["person-independent-approver"],
9
8
  "policyKind": "workforce-conduct",
10
9
  "version": "1.0",
11
10
  "effectiveOn": "{{effective_date}}",
@@ -5,7 +5,6 @@
5
5
  "title": "Information Security Policy",
6
6
  "status": "draft",
7
7
  "ownerIds": ["person-policy-owner"],
8
- "approverIds": ["person-independent-approver"],
9
8
  "policyKind": "information-security",
10
9
  "version": "1.0",
11
10
  "effectiveOn": "{{effective_date}}",
@@ -5,7 +5,6 @@
5
5
  "title": "Mobile Computing and Communications Policy",
6
6
  "status": "draft",
7
7
  "ownerIds": ["person-policy-owner"],
8
- "approverIds": ["person-independent-approver"],
9
8
  "policyKind": "information-security",
10
9
  "version": "1.0",
11
10
  "effectiveOn": "{{effective_date}}",
@@ -1,9 +1,9 @@
1
- # FileGRC Program Repository
1
+ # filegrc Program Repository
2
2
 
3
- This Git repository is the system of record for FileGRC governance records and their revision history. It can supply the training and acknowledgement catalog, exception and finding populations, policy and document approvals, obligation history, Policy Event workflows, and management evidence indexes.
3
+ This Git repository is the system of record for filegrc governance records and their revision history. It can supply the training and acknowledgement catalog, exception and finding populations, policy and document approvals, obligation history, Policy Event workflows, and management evidence indexes.
4
4
 
5
5
  ## Evidence Extraction
6
6
 
7
- Run FileGRC from a clean commit. Use resource dates and audit links to select the exact engagement date or period, save the query or agent instructions with the export, and retain the fixed result behind an evidence record. Record a zero count when the committed source query returns no relevant items.
7
+ Run filegrc from a clean commit. Use resource dates and audit links to select the exact engagement date or period, save the query or agent instructions with the export, and retain the fixed result behind an evidence record. Record a zero count when the committed source query returns no relevant items.
8
8
 
9
9
  The repository is authoritative only for records stored here. Identity, workforce, source-control, deployment, monitoring, endpoint, backup, vulnerability, and vendor systems remain authoritative for the activity they perform.
@@ -5,7 +5,7 @@
5
5
  "type": "workspace",
6
6
  "title": "{{company_name}} SOC 2 Program",
7
7
  "organizationName": "{{company_name}}",
8
- "timezone": "UTC",
8
+ "timezone": "{{timezone}}",
9
9
  "description": "SOC 2 Security program based on the AICPA Trust Services Criteria.",
10
10
  "riskMethodology": {
11
11
  "method": "5x5 likelihood and impact",
Binary file
Binary file
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "{{project_name}}",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "private": true,
5
- "description": "FileGRC workspace for a SOC 2 program",
5
+ "description": "filegrc workspace for a SOC 2 program",
6
6
  "type": "module",
7
7
  "scripts": {
8
8
  "serve": "filegrc serve",
@@ -2,18 +2,30 @@
2
2
  "parameters": [
3
3
  {
4
4
  "key": "company_name",
5
- "prompt": "Company name",
5
+ "prompt": "Legal organization name",
6
6
  "required": true
7
7
  },
8
8
  {
9
9
  "key": "policy_owner_name",
10
- "prompt": "Your name",
10
+ "prompt": "Policy owner name",
11
11
  "required": true
12
12
  },
13
13
  {
14
14
  "key": "security_contact_email",
15
15
  "prompt": "Security contact email",
16
16
  "required": true
17
+ },
18
+ {
19
+ "key": "policy_owner_email",
20
+ "prompt": "Policy owner email",
21
+ "required": true,
22
+ "defaultFrom": "security_contact_email"
23
+ },
24
+ {
25
+ "key": "timezone",
26
+ "prompt": "Program timezone",
27
+ "required": true,
28
+ "defaultSource": "local-timezone"
17
29
  }
18
30
  ],
19
31
  "generated": [
@@ -1,9 +0,0 @@
1
- {
2
- "schemaVersion": 1,
3
- "id": "person-independent-approver",
4
- "type": "person",
5
- "title": "Independent Reviewer",
6
- "status": "active",
7
- "role": "Security and Risk Oversight Reviewer",
8
- "teamIds": ["team-security-risk-oversight"]
9
- }