filegrc 0.5.0 → 0.6.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 +14 -6
- package/model/index.js +4 -4
- package/model/v4.json +10052 -0
- package/package.json +2 -2
- package/src/agent.js +17 -5
- package/src/audit-preparation.js +17 -13
- package/src/audit-transition.js +7 -4
- package/src/batch-review.js +31 -8
- package/src/cli.js +43 -25
- package/src/collection-review.js +71 -25
- package/src/evidence-packet.js +76 -43
- package/src/external-reviewer.js +4 -4
- package/src/files.js +70 -6
- package/src/git.js +70 -13
- package/src/index.js +1 -0
- package/src/model-migration.js +631 -14
- package/src/obligations.js +14 -7
- package/src/program-path.js +49 -38
- package/src/program-readiness.js +94 -54
- package/src/program.js +52 -0
- package/src/reconciliation.js +2 -2
- package/src/server.js +50 -8
- package/src/setup.js +56 -21
- package/src/source-coverage.js +13 -9
- package/src/startup.js +1 -1
- package/src/state.js +17 -14
- package/src/timing.js +6 -0
- package/src/validate.js +100 -9
- package/src/web.js +709 -151
- package/src/workflow.js +47 -25
package/src/obligations.js
CHANGED
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
import { currentCalendarDate, isRfc3339Timestamp } from "./time.js";
|
|
16
16
|
import { loadWorkspace } from "./workspace.js";
|
|
17
17
|
import { obligationProgramStatus } from "./program-lifecycle.js";
|
|
18
|
+
import { resolveProgram } from "./program.js";
|
|
18
19
|
|
|
19
20
|
const COMPLETION_DATE_FIELDS = [
|
|
20
21
|
"completedOn",
|
|
@@ -487,6 +488,7 @@ function plannedActionForScaffold(loaded, action, completedOn) {
|
|
|
487
488
|
|
|
488
489
|
function applyCompletionScaffoldDefaults(record, context) {
|
|
489
490
|
const { loaded, item, obligation, completedOn, activity } = context;
|
|
491
|
+
const program = resolveProgram(loaded);
|
|
490
492
|
const responsiblePeople = currentPeopleForParties(loaded.resources, item.ownerIds || []);
|
|
491
493
|
if (!responsiblePeople.length) {
|
|
492
494
|
throw new Error(`Obligation "${obligation.id}" needs an active owner whose Appointment or Team resolves to a current Person.`);
|
|
@@ -501,7 +503,7 @@ function applyCompletionScaffoldDefaults(record, context) {
|
|
|
501
503
|
.filter((candidate) => (
|
|
502
504
|
candidate.type === "system"
|
|
503
505
|
&& candidate.status !== "retired"
|
|
504
|
-
&& (
|
|
506
|
+
&& (program.systemIds || []).includes(candidate.id)
|
|
505
507
|
))
|
|
506
508
|
.map(({ id }) => id);
|
|
507
509
|
const vendorIds = loaded.resources
|
|
@@ -547,7 +549,7 @@ function applyCompletionScaffoldDefaults(record, context) {
|
|
|
547
549
|
scope: "In-scope SOC 2 systems and dependencies",
|
|
548
550
|
assessorIds: responsiblePeople,
|
|
549
551
|
reviewerIds,
|
|
550
|
-
methodology:
|
|
552
|
+
methodology: program.riskMethodology?.method || "Documented risk methodology",
|
|
551
553
|
summary: "",
|
|
552
554
|
evidenceIds: [],
|
|
553
555
|
approvedOn: completedOn
|
|
@@ -626,7 +628,7 @@ function applyCompletionScaffoldDefaults(record, context) {
|
|
|
626
628
|
controlIds: item.controlIds || obligation.controlIds || [],
|
|
627
629
|
scopeResourceIds: (item.scopeResourceIds || obligation.scopeResourceIds || []).length
|
|
628
630
|
? (item.scopeResourceIds || obligation.scopeResourceIds)
|
|
629
|
-
: [
|
|
631
|
+
: [program.id],
|
|
630
632
|
performerIds: responsiblePeople,
|
|
631
633
|
completedAt: timestamp,
|
|
632
634
|
method: "",
|
|
@@ -681,7 +683,7 @@ function applyCompletionScaffoldDefaults(record, context) {
|
|
|
681
683
|
sourceDescription: "Internal control operation",
|
|
682
684
|
collectedOn: completedOn,
|
|
683
685
|
collectorIds: responsiblePeople,
|
|
684
|
-
classificationId: defaultClassificationId(loaded
|
|
686
|
+
classificationId: defaultClassificationId(loaded),
|
|
685
687
|
coverage,
|
|
686
688
|
controlIds: item.controlIds || obligation.controlIds || [],
|
|
687
689
|
sourceResourceIds: [obligation.id]
|
|
@@ -717,8 +719,13 @@ function completionTeam(resources, ownerIds) {
|
|
|
717
719
|
)) || null;
|
|
718
720
|
}
|
|
719
721
|
|
|
720
|
-
function defaultClassificationId(
|
|
721
|
-
|
|
722
|
+
function defaultClassificationId(loaded) {
|
|
723
|
+
if (String(loaded.model.modelVersion) === "4") {
|
|
724
|
+
return loaded.resources.find(({ type, id, status }) => type === "classification" && id === "internal" && status === "active")?.id
|
|
725
|
+
|| loaded.resources.find(({ type, status }) => type === "classification" && status === "active")?.id
|
|
726
|
+
|| "";
|
|
727
|
+
}
|
|
728
|
+
const definitions = loaded.workspace.classificationDefinitions || {};
|
|
722
729
|
return Object.hasOwn(definitions, "internal") ? "internal" : Object.keys(definitions)[0] || "";
|
|
723
730
|
}
|
|
724
731
|
|
|
@@ -785,7 +792,7 @@ function planEventRun(event, actionItems, byId, asOf, now, model) {
|
|
|
785
792
|
const completionProfile = obligation?.type === "obligation"
|
|
786
793
|
? obligationActivity(model, obligation.activityType).completionProfile || null
|
|
787
794
|
: null;
|
|
788
|
-
const completionIds = String(model.modelVersion)
|
|
795
|
+
const completionIds = ["3", "4"].includes(String(model.modelVersion))
|
|
789
796
|
? record.completionResourceIds || []
|
|
790
797
|
: [...(record.completionResourceIds || []), ...(record.evidenceIds || [])];
|
|
791
798
|
const linkedCompletionIds = [...new Set(completionIds)];
|
package/src/program-path.js
CHANGED
|
@@ -1,17 +1,21 @@
|
|
|
1
1
|
export const RESOURCE_INSTRUCTIONS = {
|
|
2
|
+
program: "Define one management compliance or assurance Program with its goal, bounded Systems, selected Frameworks, Requirement applicability decisions, Controls, owners, risk method, and candidate period.",
|
|
2
3
|
person: "Record each person’s actual organizational job title. Keep named program authority, such as CISO, DPO, Policy Owner, or team chair, in dated Appointment records.",
|
|
3
4
|
appointment: "Record one person’s dated appointment to a named organizational or program responsibility. Scope it to the workspace, a team, or the records governed by that appointment.",
|
|
4
5
|
team: "Review the starter Security and Risk Oversight team, including its members and chair. Membership and chairs are authoritative on the Team record.",
|
|
5
|
-
system: "
|
|
6
|
-
|
|
6
|
+
system: "Start with the complete bounded System management governs or the auditor will examine. Record its purpose, services, boundary, exclusions, Information Types, owners, and continuity objectives.",
|
|
7
|
+
component: "Add a Component only when it materially delivers a selected System, supports a Control, produces authoritative Evidence, or supports relevant operations. Give every System use a role and rationale.",
|
|
8
|
+
vendor: "Catalog material external provider relationships. Link a supplied Component when it meets the Component inclusion rules, but do not mirror every Vendor into a Component.",
|
|
9
|
+
classification: "Define an ordered information-handling category used by inventory and Evidence Artifacts.",
|
|
10
|
+
"information-type": "Define a stable category of information and its default Classification, then link it from Systems, Components, and Vendors.",
|
|
7
11
|
framework: "Confirm the criteria framework and version used for the program.",
|
|
8
|
-
requirement: "
|
|
12
|
+
requirement: "Keep the published criterion as catalog content. Record management applicability and rationale on the selected Program.",
|
|
9
13
|
commitment: "Record supplemental customer promises and service requirements that shape the scope or control design. The Commitment’s systemIds and controlIds are authoritative for what fulfills it.",
|
|
10
14
|
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
15
|
document: "Tailor the governed plans and other supporting documents the program needs. Assign owners and approvers, then keep the approved Markdown in Git.",
|
|
12
|
-
control: "Finish each applicable starter
|
|
16
|
+
control: "Finish each applicable starter Control with the procedure people follow, its owner, bounded System scope, operating Components, authoritative evidence-source Components, governing Policy and Requirement mappings, and implementation date. Put calendar and event schedules in Obligations.",
|
|
13
17
|
"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
|
-
evidence: "Create
|
|
18
|
+
evidence: "Create an Evidence Artifact when a real export, report, screenshot, signed file, or approved external reference exists. Select its authoritative source Component, link the Controls and operating records it supports, retain the fixed artifact or reference, and have another person verify it before audit use.",
|
|
15
19
|
"risk-assessment": "Complete and approve an assessment of the risks to the in-scope service, systems, vendors, and commitments.",
|
|
16
20
|
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.",
|
|
17
21
|
obligation: "Review the recurring work proposed by effective policies. Confirm who owns it, when it is due, and what proof completion requires.",
|
|
@@ -21,7 +25,7 @@ export const RESOURCE_INSTRUCTIONS = {
|
|
|
21
25
|
exception: "Record and approve any time-limited departure from a policy or control before the departure begins.",
|
|
22
26
|
asset: "Keep the inventory of important devices, software, media, and records current, including ownership, custody, and status.",
|
|
23
27
|
"vendor-review": "Document due diligence before relying on a provider, then repeat the review on schedule or after a material change.",
|
|
24
|
-
"access-grant": "Record each person’s or service account’s access to a
|
|
28
|
+
"access-grant": "Record each person’s or service account’s access to a Component, including approval, provisioning, changes, and removal.",
|
|
25
29
|
"access-review": "Review access on schedule, record each decision, and assign any access changes that result.",
|
|
26
30
|
"service-account": "Catalog non-human accounts that need separate tracking, including their owner, purpose, System, privilege, and expiry.",
|
|
27
31
|
training: "Maintain the training content people must complete, along with its audience, timing, and passing requirements.",
|
|
@@ -34,30 +38,34 @@ export const RESOURCE_INSTRUCTIONS = {
|
|
|
34
38
|
exercise: "Record each incident or continuity exercise, including its objective, participants, result, and follow-up.",
|
|
35
39
|
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
40
|
"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
|
-
audit: "Create this record after engaging the CPA firm, then record the agreed scope, criteria, Systems, and report period. Control Tests and
|
|
41
|
+
audit: "Create this record after engaging the CPA firm, then select the Program and record the agreed scope, criteria, Systems, subservice treatments, and report period. Control Tests and Evidence Artifacts link back with auditId or auditIds.",
|
|
38
42
|
"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
43
|
"data-request": "Record privacy or contractual requests when they apply to the audit scope or the organization’s commitments.",
|
|
40
44
|
"control-test": "Record a management Control Test only when management performs and reviews one. The CPA firm records its own independent testing separately.",
|
|
41
|
-
"audit-population": "Record each complete Type 2 population with its source
|
|
45
|
+
"audit-population": "Record each complete Type 2 population with its source Component, fixed export, query, count, and reconciliation."
|
|
42
46
|
};
|
|
43
47
|
|
|
44
48
|
export const RESOURCE_PAGE_SUMMARIES = {
|
|
45
|
-
person: "Confirm who
|
|
46
|
-
appointment: "Assign named
|
|
47
|
-
team: "Confirm shared
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
49
|
+
person: "Confirm who works on the program.",
|
|
50
|
+
appointment: "Assign named authority.",
|
|
51
|
+
team: "Confirm shared owners and members.",
|
|
52
|
+
program: "Choose the goal, scope, criteria, controls, owners, and risk method.",
|
|
53
|
+
framework: "Confirm the SOC 2 framework.",
|
|
54
|
+
requirement: "Decide which SOC 2 criteria apply.",
|
|
55
|
+
commitment: "Record customer promises that affect scope.",
|
|
56
|
+
vendor: "List material external providers.",
|
|
57
|
+
system: "Define the service boundary.",
|
|
58
|
+
component: "Connect each material Component to a System.",
|
|
59
|
+
classification: "Define handling levels.",
|
|
60
|
+
"information-type": "Define information categories.",
|
|
61
|
+
policy: "Adapt and approve starter policies.",
|
|
62
|
+
document: "Adapt and approve plans.",
|
|
63
|
+
control: "Describe each Control and its evidence source.",
|
|
56
64
|
"complementary-control": "Record customer or provider responsibilities, or confirm there are none.",
|
|
57
|
-
audit: "Record the
|
|
58
|
-
"audit-request": "Track
|
|
59
|
-
"audit-population": "Prepare
|
|
60
|
-
"control-test": "Record management testing when
|
|
65
|
+
audit: "Record the CPA engagement and scope.",
|
|
66
|
+
"audit-request": "Track fieldwork requests and responses.",
|
|
67
|
+
"audit-population": "Prepare Type 2 populations for sampling.",
|
|
68
|
+
"control-test": "Record management testing when it occurs."
|
|
61
69
|
};
|
|
62
70
|
|
|
63
71
|
export const PROGRAM_PATH = [
|
|
@@ -66,22 +74,24 @@ export const PROGRAM_PATH = [
|
|
|
66
74
|
number: 1,
|
|
67
75
|
title: "Define Scope",
|
|
68
76
|
description: "Ownership, criteria, and service boundary",
|
|
69
|
-
summary: "
|
|
77
|
+
summary: "Name the owners, criteria, service, Systems, and providers in scope.",
|
|
70
78
|
sections: [
|
|
71
79
|
{ 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 },
|
|
72
|
-
{ id: "criteria", title: "Criteria", description: "
|
|
73
|
-
{ id: "boundary", title: "
|
|
80
|
+
{ id: "criteria", title: "Program and Criteria", description: "Define the Program, confirm its Frameworks, record Program-scoped Requirement applicability, and connect customer commitments that shape the System or Control design.", steps: ["Confirm the Program goal, owners, risk method, and candidate period.", "Review the included Security criteria references and record each applicability decision on the Program.", "Record customer commitments and keep optional criteria out until management deliberately adds them."], types: ["program", "framework", "requirement", "commitment"], defaultOpen: true },
|
|
81
|
+
{ id: "boundary", title: "System Boundary", description: "Start with the bounded System. Add Components that materially deliver the service, support Controls, produce authoritative Evidence, or support relevant operations. Keep Vendor relationships and specific Assets separate.", steps: ["Create the complete bounded System and select it on the Program.", "Add only relevant Components, with a role and rationale for each System use.", "Create Vendors for material external provider relationships and link supplied Components when factual.", "Normalize Information Types and Classifications used by the System, Components, Vendors, Risks, and Evidence Artifacts."], types: ["system", "component", "vendor", "classification", "information-type"], defaultOpen: false }
|
|
74
82
|
],
|
|
75
|
-
resourceTypes: ["person", "appointment", "team", "framework", "requirement", "commitment", "vendor", "
|
|
83
|
+
resourceTypes: ["person", "appointment", "team", "program", "framework", "requirement", "commitment", "system", "component", "vendor", "classification", "information-type"],
|
|
76
84
|
commands: [
|
|
77
85
|
"filegrc setup",
|
|
78
86
|
"filegrc guide person --json",
|
|
79
87
|
"filegrc guide appointment --json",
|
|
80
88
|
"filegrc guide system --json",
|
|
89
|
+
"filegrc guide component --json",
|
|
81
90
|
"filegrc review-collection person --scaffold",
|
|
82
91
|
"filegrc review-collection framework --scaffold",
|
|
83
92
|
"filegrc review-collection vendor --scaffold",
|
|
84
93
|
"filegrc review-collection system --scaffold",
|
|
94
|
+
"filegrc review-collection component --scaffold",
|
|
85
95
|
"filegrc list system --json"
|
|
86
96
|
]
|
|
87
97
|
},
|
|
@@ -90,7 +100,7 @@ export const PROGRAM_PATH = [
|
|
|
90
100
|
number: 2,
|
|
91
101
|
title: "Approve Policies",
|
|
92
102
|
description: "Tailor, review, approve, and adopt",
|
|
93
|
-
summary: "
|
|
103
|
+
summary: "Adapt and approve the starter policies.",
|
|
94
104
|
sections: [
|
|
95
105
|
{ 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 }
|
|
96
106
|
],
|
|
@@ -106,9 +116,9 @@ export const PROGRAM_PATH = [
|
|
|
106
116
|
number: 3,
|
|
107
117
|
title: "Implement Controls",
|
|
108
118
|
description: "Finish controls and their evidence sources",
|
|
109
|
-
summary: "
|
|
119
|
+
summary: "Describe each Control and connect its evidence source.",
|
|
110
120
|
sections: [
|
|
111
|
-
{ id: "catalog", title: "Control Catalog", description: "Finish the starter
|
|
121
|
+
{ 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 operating records.", steps: ["Open every planned Control and confirm its mappings and operation pattern.", "Write the real procedure in Record Markdown, add bounded System scope, and map the operating and authoritative evidence-source Components.", "Create or confirm every calendar and event schedule as an Obligation.", "Confirm each source Component is active, has an evidence-source role and rationale in the Control's System scope, has 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 }
|
|
112
122
|
],
|
|
113
123
|
resourceTypes: ["control", "complementary-control"],
|
|
114
124
|
commands: [
|
|
@@ -125,11 +135,11 @@ export const PROGRAM_PATH = [
|
|
|
125
135
|
number: 4,
|
|
126
136
|
title: "Operate the Program",
|
|
127
137
|
description: "Run the work and retain dated proof",
|
|
128
|
-
summary: "
|
|
138
|
+
summary: "Complete scheduled and event work. Keep dated proof.",
|
|
129
139
|
sections: [
|
|
130
140
|
{ 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 },
|
|
131
141
|
{ 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 },
|
|
132
|
-
{ id: "evidence", title: "
|
|
142
|
+
{ id: "evidence", title: "Evidence Artifacts", description: "Create records only for real exports, reports, screenshots, signed files, or approved external references collected during operation.", steps: ["Create an Evidence Artifact when the artifact exists or an operating record needs fixed supporting proof.", "Select the authoritative source Component, link the Controls and source operating record, and retain the fixed attachment or approved reference.", "Record the collector and Classification, then have another person verify the artifact before audit use."], types: ["evidence"], defaultOpen: true },
|
|
133
143
|
{ id: "governance", title: "Governance", description: "Record formal reviews, oversight meetings, and approved policy or control exceptions.", steps: ["Complete scheduled policy reviews and oversight meetings.", "Record decisions, attendees, follow-up work, and evidence.", "Approve time-bound exceptions before the departure begins."], types: ["policy-review", "meeting", "exception"], defaultOpen: false },
|
|
134
144
|
{ id: "inventories", title: "Assets and Vendors", description: "Maintain the asset inventory and recurring reviews of supplier relationships during operation.", steps: ["Keep ownership, custody, status, and lifecycle current for important assets.", "Perform vendor reviews on schedule and after material supplier changes.", "Link fixed reports and review evidence to the operating records."], types: ["asset", "vendor-review"], defaultOpen: false },
|
|
135
145
|
{ id: "access-training", title: "Access and Training", description: "Inventory service accounts before recording access decisions, periodic reviews, assignments, and acknowledgements.", steps: ["Catalog service accounts that need separate tracking.", "Preserve access approvals and removals as they occur, then complete periodic access reviews and resolve exceptions.", "Assign training and retain acknowledgement evidence for the exact content revision."], types: ["service-account", "access-grant", "access-review", "training", "attestation"], defaultOpen: false },
|
|
@@ -178,7 +188,7 @@ export const PROGRAM_PATH = [
|
|
|
178
188
|
title: "Work Queue",
|
|
179
189
|
summary: "Complete scheduled, event-driven, and assigned work by its due date.",
|
|
180
190
|
instructions: "Complete recurring work, Policy Event tasks, and assigned Action Items within their allowed windows, link the requested dated proof, and resolve overdue items.",
|
|
181
|
-
use: "See proposed, upcoming, blocked, due, and overdue policy work together with every open Action Item. Continuous and per-transaction
|
|
191
|
+
use: "See proposed, upcoming, blocked, due, and overdue policy work together with every open Action Item. Continuous and per-transaction Controls still operate through their Components and need dated operating records or Evidence.",
|
|
182
192
|
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.",
|
|
183
193
|
commands: [
|
|
184
194
|
"filegrc obligations --json",
|
|
@@ -203,18 +213,18 @@ export const PROGRAM_PATH = [
|
|
|
203
213
|
number: 5,
|
|
204
214
|
title: "Audit",
|
|
205
215
|
description: "Firm, formal period, fieldwork, and report",
|
|
206
|
-
summary: "
|
|
216
|
+
summary: "Track the CPA engagement, fieldwork, and evidence packet.",
|
|
207
217
|
sections: [
|
|
208
218
|
{ 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 },
|
|
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
|
|
219
|
+
{ 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 operating records and verified Evidence Artifacts 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, Evidence Artifacts, attachments, indexes, history, and checksums."], types: ["audit-population", "control-test"], utility: "audit-packet", defaultOpen: true }
|
|
210
220
|
],
|
|
211
221
|
resourceTypes: ["audit", "audit-request", "audit-population", "control-test"],
|
|
212
222
|
utilities: [
|
|
213
223
|
{
|
|
214
224
|
id: "audit-packet",
|
|
215
225
|
title: "Audit Evidence & Packet",
|
|
216
|
-
summary: "Review
|
|
217
|
-
instructions: "Review
|
|
226
|
+
summary: "Review readiness and build the evidence packet.",
|
|
227
|
+
instructions: "Review FileGRC operating records and Evidence Artifacts for the formal period, complete engagement preparation, and build the indexed audit packet.",
|
|
218
228
|
use: "Prepare management documents and populations, answer fieldwork requests, review both evidence paths, and compile a delivery bound to a clean Git revision.",
|
|
219
229
|
policyBasis: "Management prepares the scoped records, evidence, populations, assertions, and responses. The CPA firm selects samples, evaluates evidence and exceptions, and issues the report.",
|
|
220
230
|
commands: ["filegrc audit-readiness AUDIT_ID --json", "filegrc evidence-packet --audit AUDIT_ID --preview --json"]
|
|
@@ -233,7 +243,8 @@ export const PROGRAM_PATH = [
|
|
|
233
243
|
|
|
234
244
|
export function buildAgentProgramPath(model) {
|
|
235
245
|
return PROGRAM_PATH.map((stage) => {
|
|
236
|
-
const programResourceTypes = [...stage.resourceTypes, ...(stage.supportingResourceTypes || [])]
|
|
246
|
+
const programResourceTypes = [...stage.resourceTypes, ...(stage.supportingResourceTypes || [])]
|
|
247
|
+
.filter((type) => model.resources[type]);
|
|
237
248
|
const resourcePages = programResourceTypes.map((type, index) => {
|
|
238
249
|
const definition = model.resources[type];
|
|
239
250
|
return {
|