filegrc 0.4.0 → 0.5.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 +11 -3
- package/model/index.js +9 -5
- package/model/v3.json +9391 -0
- package/package.json +2 -2
- package/src/agent.js +53 -0
- package/src/appointments.js +19 -0
- package/src/audit-preparation.js +47 -6
- package/src/audit-transition.js +96 -0
- package/src/batch-review.js +109 -0
- package/src/cli.js +418 -61
- package/src/collection-review.js +185 -0
- package/src/evidence-packet.js +34 -2
- package/src/external-reviewer.js +165 -0
- package/src/files.js +46 -10
- package/src/index.js +36 -2
- package/src/model-docs.js +15 -0
- package/src/model-migration.js +516 -21
- package/src/obligations.js +396 -13
- package/src/program-lifecycle.js +1 -0
- package/src/program-path.js +49 -12
- package/src/program-readiness.js +331 -27
- package/src/reconciliation.js +277 -0
- package/src/server.js +242 -14
- package/src/setup.js +36 -4
- package/src/source-coverage.js +61 -0
- package/src/state.js +37 -1
- package/src/validate.js +100 -3
- package/src/web.js +961 -202
- package/src/workflow.js +1595 -0
package/src/program-path.js
CHANGED
|
@@ -10,7 +10,7 @@ export const RESOURCE_INSTRUCTIONS = {
|
|
|
10
10
|
policy: "Tailor each policy to match how the organization works. Clear placeholders, assign an owner and separate approver, then record its approval and effective dates. Controls link to their governing Policies.",
|
|
11
11
|
document: "Tailor the governed plans and other supporting documents the program needs. Assign owners and approvers, then keep the approved Markdown in Git.",
|
|
12
12
|
control: "Finish each applicable starter control with the procedure people will follow, its owner, scope, operation pattern, governing Policy and Requirement mappings, authoritative evidence source Systems, and implementation date. Put calendar and event schedules in Obligations. Confirm that each source is active, has the required evidence role and access owners, and includes repeatable retrieval instructions in Record Markdown.",
|
|
13
|
-
"complementary-control": "
|
|
13
|
+
"complementary-control": "Review whether any in-scope Control depends on a customer or carved-out provider action. Record each real dependency, or confirm that the current scope has none.",
|
|
14
14
|
evidence: "Create External Evidence when a real export, report, screenshot, signed file, or approved external reference exists. Select its authoritative source System, link the Controls and operating record it supports, retain the fixed artifact or reference, and have another person verify it before audit use.",
|
|
15
15
|
"risk-assessment": "Complete and approve an assessment of the risks to the in-scope service, systems, vendors, and commitments.",
|
|
16
16
|
risk: "Record each risk identified by an assessment or operating activity. Assign an owner, rate it, document the chosen response, and link the Controls that treat it from the Risk record.",
|
|
@@ -35,19 +35,38 @@ export const RESOURCE_INSTRUCTIONS = {
|
|
|
35
35
|
finding: "Create a Finding only for a confirmed gap that needs separate remediation tracking. Keep the report details in the source record’s Markdown, then assign the Finding, set its due date, and verify closure.",
|
|
36
36
|
"action-item": "Create an Action Item only when follow-up needs its own assignee, deadline, and completion proof. Point it to the record that created the work, then work it from Work Queue.",
|
|
37
37
|
audit: "Create this record after engaging the CPA firm, then record the agreed scope, criteria, Systems, and report period. Control Tests and External Evidence link back with auditId or auditIds.",
|
|
38
|
-
"audit-request": "
|
|
38
|
+
"audit-request": "When FileGRC is the approved request tracker, record each request from the audit team, assign an owner and due date, and link the approved response and evidence.",
|
|
39
39
|
"data-request": "Record privacy or contractual requests when they apply to the audit scope or the organization’s commitments.",
|
|
40
|
-
"control-test": "Record
|
|
40
|
+
"control-test": "Record a management Control Test only when management performs and reviews one. The CPA firm records its own independent testing separately.",
|
|
41
41
|
"audit-population": "Record each complete Type 2 population with its source System, fixed export, query, count, and reconciliation."
|
|
42
42
|
};
|
|
43
43
|
|
|
44
|
+
export const RESOURCE_PAGE_SUMMARIES = {
|
|
45
|
+
person: "Confirm who participates in the program.",
|
|
46
|
+
appointment: "Assign named program authority to the right people.",
|
|
47
|
+
team: "Confirm shared program responsibilities and membership.",
|
|
48
|
+
framework: "Confirm the SOC 2 criteria framework.",
|
|
49
|
+
requirement: "Decide which criteria apply to the service.",
|
|
50
|
+
commitment: "Record customer promises that affect scope or controls.",
|
|
51
|
+
vendor: "Identify providers that affect the service or its controls.",
|
|
52
|
+
system: "Define the service boundary and the Systems that operate controls or produce evidence.",
|
|
53
|
+
policy: "Turn starter policies into the organization’s approved rules.",
|
|
54
|
+
document: "Tailor and approve the plans and governed documents the program needs.",
|
|
55
|
+
control: "Define how each applicable control works and where its evidence comes from.",
|
|
56
|
+
"complementary-control": "Record customer or provider responsibilities, or confirm there are none.",
|
|
57
|
+
audit: "Record the real CPA engagement and agreed report scope.",
|
|
58
|
+
"audit-request": "Track approved fieldwork requests and responses.",
|
|
59
|
+
"audit-population": "Prepare complete Type 2 populations for sampling.",
|
|
60
|
+
"control-test": "Record management testing when management performs it."
|
|
61
|
+
};
|
|
62
|
+
|
|
44
63
|
export const PROGRAM_PATH = [
|
|
45
64
|
{
|
|
46
65
|
id: "scope",
|
|
47
66
|
number: 1,
|
|
48
67
|
title: "Define Scope",
|
|
49
68
|
description: "Ownership, criteria, and service boundary",
|
|
50
|
-
summary: "
|
|
69
|
+
summary: "Set program ownership, choose the criteria, and define the service, Systems, and providers in scope.",
|
|
51
70
|
sections: [
|
|
52
71
|
{ id: "ownership", title: "Program Ownership", description: "Confirm the people, appointments, and teams that own, approve, review, and operate the program.", steps: ["Confirm the initial program lead’s actual job title and the separate Policy Owner Appointment.", "Add the organization’s real appointments, reviewers, and operators.", "Review the starter Security and Risk Oversight team, its members, and its chair.", "Add other teams only when the organization assigns shared responsibility to them."], types: ["person", "appointment", "team"], defaultOpen: true },
|
|
53
72
|
{ id: "criteria", title: "Criteria", description: "Confirm the criteria used for the program, resolve whether each requirement applies, and record customer commitments that shape the service or control design.", steps: ["Review the included Security criteria references.", "Mark each requirement applicable or not applicable with a rationale.", "Record customer commitments and keep optional criteria out until management deliberately adds them."], types: ["framework", "requirement", "commitment"], defaultOpen: true },
|
|
@@ -59,6 +78,10 @@ export const PROGRAM_PATH = [
|
|
|
59
78
|
"filegrc guide person --json",
|
|
60
79
|
"filegrc guide appointment --json",
|
|
61
80
|
"filegrc guide system --json",
|
|
81
|
+
"filegrc review-collection person --scaffold",
|
|
82
|
+
"filegrc review-collection framework --scaffold",
|
|
83
|
+
"filegrc review-collection vendor --scaffold",
|
|
84
|
+
"filegrc review-collection system --scaffold",
|
|
62
85
|
"filegrc list system --json"
|
|
63
86
|
]
|
|
64
87
|
},
|
|
@@ -67,7 +90,7 @@ export const PROGRAM_PATH = [
|
|
|
67
90
|
number: 2,
|
|
68
91
|
title: "Approve Policies",
|
|
69
92
|
description: "Tailor, review, approve, and adopt",
|
|
70
|
-
summary: "Turn
|
|
93
|
+
summary: "Turn the starter policy set into approved rules that match how the organization works.",
|
|
71
94
|
sections: [
|
|
72
95
|
{ id: "library", title: "Policy Library", description: "Review, approve, and activate policies and governed plans without treating starter text as adopted practice.", steps: ["Review policy Markdown and replace every organization placeholder.", "Confirm the owner, separate approver, audience, review Obligation, and Controls that point to the Policy.", "Record approval and effective dates before changing the status to active."], types: ["policy", "document"], defaultOpen: true }
|
|
73
96
|
],
|
|
@@ -83,7 +106,7 @@ export const PROGRAM_PATH = [
|
|
|
83
106
|
number: 3,
|
|
84
107
|
title: "Implement Controls",
|
|
85
108
|
description: "Finish controls and their evidence sources",
|
|
86
|
-
summary: "
|
|
109
|
+
summary: "Define how each control works, where its evidence comes from, and whether customers or providers have responsibilities.",
|
|
87
110
|
sections: [
|
|
88
111
|
{ id: "catalog", title: "Control Catalog", description: "Finish the starter controls and their authoritative evidence sources, record applicable complementary controls, and see whether filegrc tracks operation through Work Queue or evidence records.", steps: ["Open every planned Control and confirm its mappings and operation pattern.", "Write the real procedure in Record Markdown, add system scope, and map the exact authoritative evidence source Systems.", "Create or confirm every calendar and event schedule as an Obligation.", "Confirm each source System is active, has the required evidence role and current access owners, and includes repeatable retrieval instructions in Record Markdown.", "Resolve every incomplete evidence-family check before marking the Controls implemented.", "Record any required customer or carved-out provider controls as Complementary Controls."], types: ["control", "complementary-control"], defaultOpen: true }
|
|
89
112
|
],
|
|
@@ -92,6 +115,7 @@ export const PROGRAM_PATH = [
|
|
|
92
115
|
"filegrc guide control --json",
|
|
93
116
|
"filegrc list control --json",
|
|
94
117
|
"filegrc get CONTROL_ID --mutation",
|
|
118
|
+
"filegrc review-collection complementary-control --scaffold",
|
|
95
119
|
"filegrc evidence-map --json",
|
|
96
120
|
"filegrc program-readiness --json"
|
|
97
121
|
]
|
|
@@ -101,7 +125,7 @@ export const PROGRAM_PATH = [
|
|
|
101
125
|
number: 4,
|
|
102
126
|
title: "Operate the Program",
|
|
103
127
|
description: "Run the work and retain dated proof",
|
|
104
|
-
summary: "
|
|
128
|
+
summary: "Run scheduled and event-driven work, maintain risk, and retain dated evidence throughout the operating period.",
|
|
105
129
|
sections: [
|
|
106
130
|
{ id: "risk", title: "Risk", description: "Maintain the program’s risk assessments and risk register as the service, threats, suppliers, and control needs change.", steps: ["Complete and approve risk assessments on schedule and after material changes.", "Record risks that need treatment, acceptance, or ongoing tracking.", "Add or update controls when the assessment identifies a new or changed response."], types: ["risk-assessment", "risk"], defaultOpen: true },
|
|
107
131
|
{ id: "queue", title: "Work Queue", description: "Complete recurring work, Policy Event tasks, and assigned follow-up within their required windows.", steps: ["Review proposed work while policies are drafts.", "Complete due work within its allowed window and link dated proof.", "Start Policy Events when hiring, departures, incidents, or material changes occur; every other open Action Item appears here automatically."], types: ["obligation", "obligation-event", "data-request"], utility: "obligation-board", defaultOpen: true },
|
|
@@ -143,6 +167,7 @@ export const PROGRAM_PATH = [
|
|
|
143
167
|
{
|
|
144
168
|
id: "policy-events",
|
|
145
169
|
title: "Policy Events",
|
|
170
|
+
summary: "Start a guided checklist when a policy-triggering change occurs.",
|
|
146
171
|
instructions: "Trigger the matching workflow when an event occurs. filegrc adds every required action to the Work Queue with its owner and deadline.",
|
|
147
172
|
use: "Preview the full workflow before triggering it, then create the event and every linked task in one validated write.",
|
|
148
173
|
policyBasis: "Active event obligations translate policy-triggering changes into owned, deadline-bound Action Items. Proposed workflows remain unavailable until their governing policies and linked controls are ready.",
|
|
@@ -151,17 +176,24 @@ export const PROGRAM_PATH = [
|
|
|
151
176
|
{
|
|
152
177
|
id: "work-queue",
|
|
153
178
|
title: "Work Queue",
|
|
179
|
+
summary: "Complete scheduled, event-driven, and assigned work by its due date.",
|
|
154
180
|
instructions: "Complete recurring work, Policy Event tasks, and assigned Action Items within their allowed windows, link the requested dated proof, and resolve overdue items.",
|
|
155
|
-
use: "See proposed, upcoming, due, and overdue policy work together with every open Action Item. Continuous and per-transaction controls still operate in their source Systems and need dated operating records or evidence.",
|
|
181
|
+
use: "See proposed, upcoming, blocked, due, and overdue policy work together with every open Action Item. Continuous and per-transaction controls still operate in their source Systems and need dated operating records or evidence.",
|
|
156
182
|
policyBasis: "Effective policies and implemented linked controls activate reusable obligations. Policy Events and source records create owned Action Items. Each occurrence or task retains its own deadline, completion record, and evidence.",
|
|
157
|
-
commands: [
|
|
183
|
+
commands: [
|
|
184
|
+
"filegrc obligations --json",
|
|
185
|
+
"filegrc complete OBLIGATION_ID --scaffold --window-start YYYY-MM-DD --completed-on YYYY-MM-DD",
|
|
186
|
+
"filegrc complete OBLIGATION_ID completion-mutation.json --json"
|
|
187
|
+
]
|
|
158
188
|
}
|
|
159
189
|
],
|
|
160
190
|
commands: [
|
|
161
191
|
"filegrc obligations --json",
|
|
162
192
|
"filegrc trigger EVENT_TYPE (--occurred-on YYYY-MM-DD | --occurred-at RFC3339) --subject RESOURCE_ID --json",
|
|
163
|
-
"filegrc complete OBLIGATION_ID
|
|
164
|
-
"filegrc complete
|
|
193
|
+
"filegrc complete OBLIGATION_ID --scaffold --window-start YYYY-MM-DD --completed-on YYYY-MM-DD",
|
|
194
|
+
"filegrc complete OBLIGATION_ID completion-mutation.json --json",
|
|
195
|
+
"filegrc complete-action ACTION_ITEM_ID --scaffold --completed-on YYYY-MM-DD",
|
|
196
|
+
"filegrc complete-action ACTION_ITEM_ID completion-mutation.json --completed-on YYYY-MM-DD --json",
|
|
165
197
|
"filegrc complete-event OBLIGATION_EVENT_ID --completed-on YYYY-MM-DD --expected-revision REVISION --json",
|
|
166
198
|
"filegrc program-readiness --json"
|
|
167
199
|
]
|
|
@@ -171,7 +203,7 @@ export const PROGRAM_PATH = [
|
|
|
171
203
|
number: 5,
|
|
172
204
|
title: "Audit",
|
|
173
205
|
description: "Firm, formal period, fieldwork, and report",
|
|
174
|
-
summary: "
|
|
206
|
+
summary: "Set up the CPA engagement, support fieldwork, and prepare the final evidence packet.",
|
|
175
207
|
sections: [
|
|
176
208
|
{ id: "engagement", title: "Engagement", description: "Record the actual CPA engagement, formal scope and dates, requests, and management responses.", steps: ["Create the Audit after the CPA firm is engaged.", "Record the firm-agreed type, scope, systems, criteria, and dates.", "Track incoming requests and approved response material."], types: ["audit", "audit-request"], defaultOpen: true },
|
|
177
209
|
{ id: "fieldwork", title: "Fieldwork", description: "Prepare management documents, reconcile Type 2 populations, review both evidence paths, support testing, and build the indexed packet.", steps: ["Initialize engagement-specific management documents and populations.", "Review dated filegrc Evidence and verified External Evidence for the formal period.", "Reconcile complete populations, link samples, and resolve fieldwork requests and findings.", "Build the packet from a clean Git revision; it includes filegrc records, Markdown, External Evidence, attachments, indexes, history, and checksums."], types: ["audit-population", "control-test"], utility: "audit-packet", defaultOpen: true }
|
|
@@ -181,6 +213,7 @@ export const PROGRAM_PATH = [
|
|
|
181
213
|
{
|
|
182
214
|
id: "audit-packet",
|
|
183
215
|
title: "Audit Evidence & Packet",
|
|
216
|
+
summary: "Review fieldwork readiness and build the indexed evidence packet.",
|
|
184
217
|
instructions: "Review filegrc Evidence and External Evidence for the formal period, complete engagement preparation, and build the indexed audit packet.",
|
|
185
218
|
use: "Prepare management documents and populations, answer fieldwork requests, review both evidence paths, and compile a delivery bound to a clean Git revision.",
|
|
186
219
|
policyBasis: "Management prepares the scoped records, evidence, populations, assertions, and responses. The CPA firm selects samples, evaluates evidence and exceptions, and issues the report.",
|
|
@@ -189,6 +222,8 @@ export const PROGRAM_PATH = [
|
|
|
189
222
|
],
|
|
190
223
|
commands: [
|
|
191
224
|
"filegrc guide audit --json",
|
|
225
|
+
"filegrc scaffold audit --title \"YEAR SOC 2 TYPE\"",
|
|
226
|
+
"filegrc create AUDIT-MUTATION.json --json",
|
|
192
227
|
"filegrc prepare-audit AUDIT_ID --json",
|
|
193
228
|
"filegrc audit-readiness AUDIT_ID --json",
|
|
194
229
|
"filegrc evidence-packet --audit AUDIT_ID --preview --json"
|
|
@@ -205,6 +240,7 @@ export function buildAgentProgramPath(model) {
|
|
|
205
240
|
order: stage.id === "run" ? null : `${stage.number}.${String.fromCharCode(97 + index)}`,
|
|
206
241
|
type,
|
|
207
242
|
title: definition.pluralTitle,
|
|
243
|
+
summary: RESOURCE_PAGE_SUMMARIES[type] || definition.description,
|
|
208
244
|
instructions: RESOURCE_INSTRUCTIONS[type] || definition.description,
|
|
209
245
|
use: definition.description,
|
|
210
246
|
policyBasis: definition.guidance.policyBasis,
|
|
@@ -216,6 +252,7 @@ export function buildAgentProgramPath(model) {
|
|
|
216
252
|
order: stage.id === "run" ? null : `${stage.number}.${String.fromCharCode(97 + stage.resourceTypes.length + index)}`,
|
|
217
253
|
utility: utility.id,
|
|
218
254
|
title: utility.title,
|
|
255
|
+
summary: utility.summary,
|
|
219
256
|
instructions: utility.instructions,
|
|
220
257
|
use: utility.use,
|
|
221
258
|
policyBasis: utility.policyBasis,
|