You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit effed8f
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: README.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -151,7 +151,7 @@ and push. Ask me before anything that removes or rewrites history.
151
151
-**Every campus has businesses** that give, each with one or two contacts. The main campus has at least 6 and every other campus at least 2.
152
152
-**Dates are generated at install**, counted back from install day, so "last 12 months" reports are always full.
153
153
-**Realism is measured.** The same scripts that measure real churches grade our data. Today 91% of measured values fall within tolerance, including serving, connections, and prayer.
154
-
-**Correctness is proven against Rock itself.** Before a package is published, the verify tool loads it into a clean copy of its exact Rock release, checks it against Rock's schema, runs rule checks, and has Rock's own Rock Cleanup job look for anything to fix. See [Verification](docs/verification.md).
154
+
-**Correctness is proven against Rock itself.** Before a package is published, the verify tool loads it into a clean copy of the Rock release it is built on, checks it against Rock's schema, runs rule checks, and has Rock's own Rock Cleanup job look for anything to fix. See [Verification](docs/verification.md).
155
155
-**People have notes** in six note types, secured to staff. Cast notes are hand-written and tied to each family's story, and they show more and better note use than most churches have today.
156
156
-**A building campaign is under way.** Built on the Rock is about 38% through on install day, with pledges from people and businesses in every state Pledge Analytics can show.
157
157
-**Giving analytics work on install.** Giving attributes, journey stages, and a year of giving alerts are filled in the way Rock computes them, and a version guard catches Rock changing that math.
@@ -171,7 +171,7 @@ and push. Ask me before anything that removes or rewrites history.
171
171
|[builder/](builder/README.md)| The .NET tool that turns this repository into one dataset package per dataset. |
172
172
|[loader/](loader/README.md), `loader-cli/`, `loader-compat-check/`| The loader library that installs a package into a Rock database (for .NET 10 and for Rock's .NET Framework, as the `SparkDevNetwork.Rock.SampleData.Loader` NuGet package), its command line for developers and test harnesses, and the check that both builds compute the same keys. |
173
173
|[validation/](validation/README.md)| Tolerances and the script that grades generated data, plus the invariants, contract, and standards check the verify tool uses. |
174
-
|[verify/](verify/README.md)| The tool that proves each package works on one exact Rock and writes its receipt. Publishing needs a passing receipt. |
174
+
|[verify/](verify/README.md)| The tool that proves each package works on the Rock it is built on and writes its receipt. Publishing needs a passing receipt. |
175
175
|[release/](release/README.md)| The Rock releases each release builds for, and the script that merges a release into the hosted package index. `.github/workflows/release.yml` publishes the packages and the loader on a version tag. How to release, what has shipped, and how to fix a failed run: [Publishing a release](docs/maintaining.md#publishing-a-release). |
176
176
|[datasets/](datasets/README.md)| One manifest per dataset, with its settings. |
177
177
|[content/](content/README.md)| Fonts for check images, and later the text pools. |
@@ -194,11 +194,11 @@ You need the .NET 10 SDK, Node.js 20 or later, and SQL Server with a freshly ins
194
194
dotnet run -- --rock C:\Development\Rock
195
195
```
196
196
197
-
3. Load Core 1 into a fresh Rock database. Add `--dry-run` to roll everything back at the end. If your database is on a different migration than the checkout, add `--any-rock`.
197
+
3. Load Core 1 into a fresh Rock database. `--rock` names your built Rock checkout, so the loader can read its version from `RockWeb\bin\Rock.Version.dll`. Add `--dry-run` to roll everything back at the end. If your database is on another Rock major release than the checkout, add `--any-rock`.
198
198
199
199
```
200
200
cd ../loader-cli
201
-
dotnet run -- --package ../packages/core-1.zip --connection "Server=localhost;Database=RockSample;Integrated Security=true;TrustServerCertificate=true"
201
+
dotnet run -- --package ../packages/core-1.zip --rock C:\Development\Rock --connection "Server=localhost;Database=RockSample;Integrated Security=true;TrustServerCertificate=true"
202
202
```
203
203
204
204
4. Grade the result against the profile. See [Validation](validation/README.md) for the three commands.
Copy file name to clipboardExpand all lines: builder/README.md
+4-4Lines changed: 4 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,12 +10,12 @@ From the `builder` folder:
10
10
dotnet run -- --rock C:\Development\Rock
11
11
```
12
12
13
-
That writes every dataset's package to `../packages/` (git ignores it). Each package is for the Rock in the checkout you name.
13
+
That writes every dataset's package to `../packages/` (git ignores it). Each package is for the major release of the Rock in the checkout you name, such as Rock 21, and serves every dot release of it (decision 52).
14
14
15
15
| Option | Meaning |
16
16
|---|---|
17
-
|`--rock <folder>`| A Rock checkout. The package records its version (from `Directory.Build.props`) and its newest migration (from `Rock.Migrations/Migrations`). The `ROCK_PATH` environment variable does the same. Required unless both values below are given. |
18
-
|`--rock-version`| The Rock version, for example `21.0.1`. Wins over the checkout's. |
17
+
|`--rock <folder>`| A Rock checkout. The package records its version (from `Directory.Build.props`), whose first number is the major release, and its newest migration (from `Rock.Migrations/Migrations`). The `ROCK_PATH` environment variable does the same. Required unless both values below are given. |
18
+
|`--rock-version`| The Rock version, for example `21.0.2`. Its first number is the package's major release. Wins over the checkout's. |
19
19
|`--rock-migration`| The newest migration Id, for example `202609222138362_AddWorkflowBuilder`. Wins over the checkout's. |
20
20
|`--dataset`| One dataset (`core-1`, `core-3`, or `full-7`), or `all` (the default). |
21
21
|`--out <folder>`| Where to write packages. Defaults to `../packages`. |
@@ -28,7 +28,7 @@ A package is a zip of data, never SQL (decision 41). Files keep their paths from
28
28
29
29
| Path | What it holds |
30
30
|---|---|
31
-
|`package.json`| The format version, the dataset, the source commit, the one Rock it is for (decision 52), and the SHA-256 of every other file. |
31
+
|`package.json`| The format version, the dataset, the source commit, the Rock major release it is for and the exact Rock it was built on (decision 52), the oldest loader that can load it (decision 158), and the SHA-256 of every other file. |
32
32
|`configuration/*.json`| The church setup, unchanged. |
33
33
|`cast/households/*.json`, `cast/groups/*.json`| The Cast and its small group plans, unchanged. |
34
34
|`datasets/{key}.json`| The dataset's settings and its [card](../datasets/README.md#the-dataset-card). |
thrownewInvalidOperationException("A package must say which Rock it is for. Pass --rock <Rock checkout> (or set ROCK_PATH), or both --rock-version and --rock-migration.");
Copy file name to clipboardExpand all lines: builder/package-readme.md
+3-3Lines changed: 3 additions & 3 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# {{name}} sample data package
2
2
3
-
This package installs the **{{name}}** dataset (`{{dataset}}`) of Rock Sample Data into a fresh Rock database. It is for Rock {{rockVersion}} (newest migration `{{rockMigration}}`). The loader refuses any other Rock.
3
+
This package installs the **{{name}}** dataset (`{{dataset}}`) of Rock Sample Data into a fresh Rock database. It is for every Rock {{rockMajor}} release, and was verified on Rock {{rockVersion}}. The loader refuses any other major release of Rock. It needs loader {{minimumLoaderVersion}} or newer.
4
4
5
5
All the people, families, and organizations in it are fictional.
6
6
@@ -17,7 +17,7 @@ The package holds the inputs, not the records. It has no attendance rows, gifts,
17
17
|`addresses/pool.json`| Real-street addresses with house numbers that do not exist |
18
18
|`photos/`| Profile photos, and a photo of each Cast small group |
19
19
|`content/fonts/`| Fonts for the scanned check images, with their licenses |
20
-
|`package.json`| The format version, the Rock this package is for, and a SHA-256 for every file |
20
+
|`package.json`| The format version, the Rock major release this package is for, the oldest loader that can load it, and a SHA-256 for every file |
21
21
|`LICENSE.md`| The license for this data |
22
22
23
23
## What the loader makes from it
@@ -52,7 +52,7 @@ The loader library (`RockSampleData.Loader`) and its command line both install p
Before it writes anything, the loader checks the format version, every file's SHA-256, that the database has no people beyond a new Rock install, and that it is Rock {{rockVersion}}. The load runs in one transaction, so a failure leaves nothing behind. Every row it writes carries `ForeignKey = SampleData:{{dataset}}`.
55
+
Before it writes anything, the loader checks the format version, that it is loader {{minimumLoaderVersion}} or newer, every file's SHA-256, that the database has no people beyond a new Rock install, and that its Rock is a Rock {{rockMajor}} release. It reads Rock's version from `Rock.Version.dll`. The load runs in one transaction, so a failure leaves nothing behind. Every row it writes carries `ForeignKey = SampleData:{{dataset}}`.
Copy file name to clipboardExpand all lines: calibration/profiles/sample-church.json
+1Lines changed: 1 addition & 0 deletions
Original file line number
Diff line number
Diff line change
@@ -48,6 +48,7 @@
48
48
{ "path": "communicationDetail.unsubscribesYear.perThousandMassRecipients.Recipient preference", "reason": "Too few unsubscribes to use." }
49
49
],
50
50
"overrides": [
51
+
{ "path": "people.ageMix", "value": { "00-05": 3.94, "06-11": 9.61, "12-17": 18.64, "18-24": 18.51, "25-34": 15.27, "35-44": 15.72, "45-54": 9.37, "55-64": 5.35, "65-74": 2.9, "75+": 0.78 }, "reason": "Assumption. The measured age mix counts only people with a birth date, and 17.9% of measured people have none (people.pctNoBirthDate), but every sample person has one (decision 156). These are the measured shares restated as shares of all people, assuming the people with no birth date are adults spread like the adults who have one: each child band is the measured share times 0.821, and each adult band the measured share times 1.115. Every band keeps its measured ratio to the others in its group, so the generator, which reads these shares as weights, draws almost exactly the same ages as before." },
51
52
{ "path": "groups.smallGroups.pctDidAttend", "value": 65, "reason": "Design choice. Small group attendance sits between the measured rate and a livelier demo church (docs/small-groups.md)." },
52
53
{ "path": "groups.smallGroups.weightedMedianSize", "value": 12, "reason": "Design choice. Small groups have about 12 members (decision 33)." },
53
54
{ "path": "groups.smallGroups.pctLeaders", "value": 8.3, "reason": "Design choice. Each small group has one leader, about 1 in 12 members (decision 33)." },
Copy file name to clipboardExpand all lines: docs/crowd.md
+2Lines changed: 2 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,6 +9,8 @@ The Cast is hand-designed. Everyone else is generated: the **Crowd** gives Full
9
9
3. Names come from public-domain frequency data and never depend on photo ethnicity.
10
10
4. Crowd households have no photos. About half of Core 3's companions get photos from the pool (see [Datasets](../datasets/README.md)).
11
11
5. Core 3's companions use a more involved connection status mix than the Crowd, set in the dataset manifest, so more of them attend, give, and join groups (decision 142). Core 1 and Core 3 also scale up checks as a payment method, so check batches and check images have enough to show (decision 143).
12
+
6. Every generated person has a birth date. Measured age mixes count only people with a birth date, so the profile states the age mix as shares of all people, and validation grades it against people with a birth date, which is nearly all of them (decision 156).
13
+
7. A child on their own, in a one-person family, is a student aged 12 to 17 (decision 157).
0 commit comments