create-filegrc 0.3.3 → 0.4.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.
- package/README.md +6 -5
- package/package.json +1 -1
- package/src/cli.js +34 -5
- package/src/defaults.js +81 -112
- package/src/index.js +66 -14
- package/template/AGENTS.md +38 -16
- package/template/README.md +14 -5
- package/template/data/AGENTS.md +36 -12
- package/template/data/action-items/AGENTS.md +2 -2
- package/template/data/appointments/appointment-policy-owner.json +11 -0
- package/template/data/audits/AGENTS.md +1 -1
- package/template/data/documents/document-business-continuity-disaster-recovery.json +12 -12
- package/template/data/documents/document-business-continuity-disaster-recovery.md +1 -1
- package/template/data/documents/document-contractor-policy-acknowledgement.json +10 -11
- package/template/data/documents/document-contractor-training-acknowledgement.json +13 -12
- package/template/data/documents/document-data-retention-schedule.json +9 -11
- package/template/data/documents/document-employee-handbook-acknowledgement.json +10 -11
- package/template/data/documents/document-employee-policy-acknowledgement.json +10 -11
- package/template/data/documents/document-employee-training-acknowledgement.json +13 -12
- package/template/data/documents/document-incident-response-plan.json +12 -12
- package/template/data/documents/document-incident-response-plan.md +2 -2
- package/template/data/documents/document-soc2-management-assertion.json +2 -3
- package/template/data/documents/document-soc2-management-representation.json +2 -3
- package/template/data/documents/document-soc2-period-completeness.json +2 -3
- package/template/data/documents/document-soc2-system-description.json +2 -3
- package/template/data/evidence/AGENTS.md +3 -3
- package/template/data/obligation-events/AGENTS.md +2 -2
- package/template/data/obligations/AGENTS.md +1 -1
- package/template/data/people/person-program-lead.json +9 -0
- package/template/data/policies/AGENTS.md +1 -1
- package/template/data/policies/policy-anti-bribery-corruption.json +9 -15
- package/template/data/policies/policy-anti-bribery-corruption.md +1 -1
- package/template/data/policies/policy-clear-desk-screen.json +8 -14
- package/template/data/policies/policy-clear-desk-screen.md +1 -1
- package/template/data/policies/policy-data-protection-handling.json +10 -22
- package/template/data/policies/policy-data-protection-handling.md +2 -2
- package/template/data/policies/policy-employee-handbook.json +6 -16
- package/template/data/policies/policy-information-security.json +8 -40
- package/template/data/policies/policy-information-security.md +2 -2
- package/template/data/policies/policy-mobile-computing-communications.json +8 -18
- package/template/data/policies/policy-mobile-computing-communications.md +1 -1
- package/template/data/renderer.json +3 -1
- package/template/data/training/training-anti-bribery-high-risk-roles.json +1 -2
- package/template/data/training/training-privileged-sensitive-roles.json +1 -2
- package/template/data/training/training-secure-development.json +1 -2
- package/template/data/training/training-security-awareness.json +7 -9
- package/template/data/training/training-security-awareness.md +1 -1
- package/template/data/workspace.json +19 -8
- package/template/docs/filegrc-home.png +0 -0
- package/template/package.json +1 -1
- package/template-parameters.json +6 -1
- package/template/data/people/person-policy-owner.json +0 -10
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. Use a dedicated private repository so browser-generated compliance commits stay separate from application development history.
|
|
4
4
|
|
|
5
5
|
```sh
|
|
6
6
|
npx create-filegrc@latest company-grc
|
|
@@ -9,9 +9,9 @@ npm run validate
|
|
|
9
9
|
npm run serve
|
|
10
10
|
```
|
|
11
11
|
|
|
12
|
-
Setup asks for the legal organization name, the initial
|
|
12
|
+
Setup asks for the legal organization name, the initial program lead and their organization job title and email, a security reporting address, and the program timezone. The generated Person records the lead’s actual position, while a separate dated Policy Owner Appointment owns the starter work. 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
|
-
Creation has two layers. The
|
|
14
|
+
Creation has two layers. The six-record foundation contains workspace settings, the initial program lead, the Policy Owner Appointment, the oversight team, renderer settings, and the filegrc system of record. The default `security` starter adds the framework references, proposed policies, controls, obligations, documents, and training records. Pass `--starter foundation` when you want to stop before selecting a framework.
|
|
15
15
|
|
|
16
16
|
For one noninteractive run, pass company and service fields together or use `--config setup.json`. The optional `setup` object defines the service boundary and management goal after installation. Use `--filegrc-package <directory>` to exercise unpublished local engine changes instead of installing the registry release. This writes a machine-local `file:` dependency, so replace it with a released version before sharing the generated workspace.
|
|
17
17
|
|
|
@@ -19,6 +19,7 @@ For one noninteractive run, pass company and service fields together or use `--c
|
|
|
19
19
|
{
|
|
20
20
|
"companyName": "Example Company",
|
|
21
21
|
"policyOwnerName": "Security Owner",
|
|
22
|
+
"policyOwnerJobTitle": "Chief Executive Officer",
|
|
22
23
|
"policyOwnerEmail": "owner@example.com",
|
|
23
24
|
"securityContactEmail": "security@example.com",
|
|
24
25
|
"timezone": "America/Chicago",
|
|
@@ -38,9 +39,9 @@ For one noninteractive run, pass company and service fields together or use `--c
|
|
|
38
39
|
npx create-filegrc@latest company-grc --config setup.json
|
|
39
40
|
```
|
|
40
41
|
|
|
41
|
-
Generated workspaces also include layered `AGENTS.md` instructions and model-driven headless commands. `filegrc program-path` gives agents the same
|
|
42
|
+
Generated workspaces also include layered `AGENTS.md` instructions and model-driven headless commands. `filegrc program-path` gives agents the same five steps, exact page guidance, current status, and next actions shown in the renderer. Agents can define program scope, approve policies, implement controls and their evidence sources, complete policy work, trigger event tasks, and prepare later audit packets through the same domain functions used by the renderer.
|
|
42
43
|
|
|
43
|
-
Git is initialized when needed.
|
|
44
|
+
Git is initialized on `main` when needed. New workspaces use trunk mode with `main` and `origin`. Browser editing becomes available after that branch has an upstream; each save fast-forwards, validates, commits, and pushes automatically. Existing parent repositories are supported and never receive a nested Git repository.
|
|
44
45
|
|
|
45
46
|
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.
|
|
46
47
|
|
package/package.json
CHANGED
package/src/cli.js
CHANGED
|
@@ -30,9 +30,30 @@ export async function runCli(argv = process.argv.slice(2)) {
|
|
|
30
30
|
`filegrc ${result.engineVersion}${result.enginePackage ? ` from ${result.enginePackage}` : ""}: ` +
|
|
31
31
|
`${result.install === "installed" ? "installed" : "installation skipped"}`
|
|
32
32
|
);
|
|
33
|
+
console.log("Use a dedicated private repository for your FileGRC workspace. The browser");
|
|
34
|
+
console.log("commits and pushes each saved program change, so a standalone repository keeps");
|
|
35
|
+
console.log("the compliance audit trail separate from application development history.");
|
|
33
36
|
console.log(`Git: ${result.gitMode === "existing-worktree" ? "joined existing worktree" : "initialized new repository"}`);
|
|
34
|
-
if (result.
|
|
35
|
-
console.log("
|
|
37
|
+
if (result.gitMode === "existing-worktree") {
|
|
38
|
+
console.log("");
|
|
39
|
+
console.log("This FileGRC workspace joined an existing Git repository.");
|
|
40
|
+
console.log("");
|
|
41
|
+
console.log("FileGRC recommends a dedicated private repository because browser saves create");
|
|
42
|
+
console.log("frequent compliance commits. A standalone repository keeps the GRC audit trail");
|
|
43
|
+
console.log("separate from application development history.");
|
|
44
|
+
console.log("");
|
|
45
|
+
console.log("Monorepo mode remains supported. Browser Git operations will commit only files");
|
|
46
|
+
console.log("inside this FileGRC workspace.");
|
|
47
|
+
}
|
|
48
|
+
if (
|
|
49
|
+
result.gitMode === "existing-worktree"
|
|
50
|
+
&& result.repository.mode === "trunk"
|
|
51
|
+
&& (result.gitDetached || result.gitBranch !== result.repository.authoritativeBranch)
|
|
52
|
+
) {
|
|
53
|
+
console.log("");
|
|
54
|
+
console.log("The browser will open in read-only mode until this workspace is available on");
|
|
55
|
+
console.log("the configured authoritative branch. File creation and CLI validation still");
|
|
56
|
+
console.log("work from this checkout.");
|
|
36
57
|
}
|
|
37
58
|
console.log(`Timezone: ${result.values.timezone}`);
|
|
38
59
|
for (const stage of result.stages) {
|
|
@@ -97,17 +118,21 @@ function parseArgs(argv) {
|
|
|
97
118
|
else if (name === "config") options.config = next();
|
|
98
119
|
else if (name === "company-name") options.companyName = next();
|
|
99
120
|
else if (name === "policy-owner-name") options.policyOwnerName = next();
|
|
121
|
+
else if (name === "policy-owner-job-title") options.policyOwnerJobTitle = next();
|
|
100
122
|
else if (name === "policy-owner-email") options.policyOwnerEmail = next();
|
|
101
123
|
else if (name === "security-contact-email") options.securityContactEmail = next();
|
|
102
124
|
else if (name === "timezone") options.timezone = next();
|
|
103
125
|
else if (name === "starter") options.starter = next();
|
|
104
126
|
else if (name === "filegrc-version") options.filegrcVersion = next();
|
|
105
127
|
else if (name === "filegrc-package") options.filegrcPackage = next();
|
|
128
|
+
else if (name === "repository-mode") options.repositoryMode = next();
|
|
129
|
+
else if (name === "authoritative-branch") options.authoritativeBranch = next();
|
|
130
|
+
else if (name === "repository-remote") options.repositoryRemote = next();
|
|
106
131
|
else if (name === "service-name") setup.serviceName = next();
|
|
107
132
|
else if (name === "boundary") setup.boundary = next();
|
|
108
133
|
else if (name === "service-owner") setup.ownerId = next();
|
|
109
134
|
else if (name === "criticality") setup.criticality = next();
|
|
110
|
-
else if (name === "classification") setup.
|
|
135
|
+
else if (name === "classification") setup.classificationId = next();
|
|
111
136
|
else if (name === "internet-exposed") setup.internetExposed = booleanOption(next(), "internet-exposed");
|
|
112
137
|
else if (name === "program-goal") setup.programGoal = next();
|
|
113
138
|
else if (name === "setup-draft") setup.draft = true;
|
|
@@ -124,16 +149,20 @@ Create a filegrc workspace for a SOC 2 program.
|
|
|
124
149
|
Options:
|
|
125
150
|
--config <json-file|-> Read creation and optional setup values
|
|
126
151
|
--company-name <legal-name> Legal organization name
|
|
127
|
-
--policy-owner-name <name> Initial
|
|
152
|
+
--policy-owner-name <name> Initial program lead
|
|
153
|
+
--policy-owner-job-title <title> Program lead's organization job title
|
|
128
154
|
--policy-owner-email <email> Policy owner's email address
|
|
129
155
|
--security-contact-email <email> Security reporting address
|
|
130
156
|
--timezone <iana-timezone> Program timezone, such as America/Chicago
|
|
131
157
|
--starter <profile> security (default) or foundation
|
|
132
158
|
--filegrc-version <version> Override resolved engine version
|
|
133
159
|
--filegrc-package <directory> Install an unpublished local filegrc package
|
|
160
|
+
--repository-mode <mode> trunk (default) or manual
|
|
161
|
+
--authoritative-branch <name> Browser write branch, defaults to main
|
|
162
|
+
--repository-remote <name> Browser sync remote, defaults to origin
|
|
134
163
|
--service-name <name> Complete service setup after creation
|
|
135
164
|
--boundary <description> Initial service boundary
|
|
136
|
-
--service-owner <person-id> Defaults to person-
|
|
165
|
+
--service-owner <person-id> Defaults to person-program-lead
|
|
137
166
|
--criticality <level> low, medium, high, or critical
|
|
138
167
|
--classification <name> Initial data classification
|
|
139
168
|
--internet-exposed <bool> true or false
|