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 0a5175f
Browse filesBrowse the repository at this point in the historyBrowse files
Copy file name to clipboardExpand all lines: docs/decisions.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
@@ -26,10 +26,10 @@ This log wins over the [design spec](design-spec.md) wherever the two disagree.
26
26
| 124 | 2026-10-21 | Each dataset manifest (`datasets/*.json`) holds its card for Rock's installer: a summary, what it is best for, two to four highlights, and its people, households, campuses, and typical install time, measured from real loads. The loader embeds the manifests, and `SampleDataDatasets` reads them. The builder refuses a manifest without a card, and the verify tool fails a default-seed load whose people or households differ from the card by more than 2%. | Rock's block shows every dataset before it downloads one, from the loader it already has. The card sits beside the settings that make the dataset, and verify keeps its numbers from going stale. |
27
27
| 125 | 2026-10-21 | Steps are their own part, `Steps`, loaded after notes. Choosing steps loads small groups, serving teams, and giving too. The part holds both step programs, the Discipleship Path and the Student Path (decisions 115 to 119). The Student Path's student check-ins come from the attendance plan, not the attendance rows, so steps do not need the attendance part. Steps plan only when they load, and Cast step stories, the students' among them, are checked only when steps loaded. | Steps are a feature a person can want or not, like prayer or notes. Each Small Group, Serve, and Lead step copies a membership that small groups or serving wrote, open requests to serve come from serving, and each Give step must agree with the journey stage giving writes. So a step needs those rows to be true, which widens the rule in decision 121 from rows that point at another part's rows to rows that must agree with them. The attendance plan holds exactly the check-ins the attendance step writes, so the student steps are the same as in a full load whether or not attendance loads, and choosing steps does not also force attendance. Without attendance, Rock shows student steps without the check-ins behind them, the way adult steps already count family Sundays from the plan. Nothing after steps reads them, so leaving them out changes no other part. |
28
28
| 126 | 2026-10-22 | The building campaign (decision 109) is church setup, not a part. Its fund, campus accounts, campaign dates, Create Pledge page, and statement template settings load with configuration in every load. The fund's goal, written into its description from the planned pledges, is written in every load too. The pledges and campaign gifts, the Cast's (decisions 110 to 112) and the Crowd's and businesses' (decisions 113 and 114), belong to the Giving part. They are written in the Giving step, not a step or part of their own, and the Cast's campaign stories are checked only when giving loaded. All pledges are planned in every load, before giving is planned. | A fund, its accounts, and page settings are setup a church has before anyone gives, like the funds and campus accounts that already load with configuration. A person who leaves out giving still gets a Create Pledge page that works. Pledges and campaign gifts are giving records. Most campaign gifts are a line on a usual gift, so they cannot load without giving, and a pledge without its gifts would show every pledger as not started. Planning the pledges in every load keeps the giving plan the same, so prayer, which reads that plan, does not change when giving is left out. It also keeps the fund the same in every load, since its goal comes from the pledged total. The generated pledgers are drawn from the giving patterns people carry, which always load, so the draw needs no other part. No other part reads pledge rows. |
29
-
|D-release-1| 2026-10-21 | Releases are built by the release workflow (`.github/workflows/release.yml`), never on a developer's machine. For each Rock release in `release/rock-releases.json`, it checks out that Rock from SparkDevNetwork/Rock (a release tag, or a pinned commit before Rock tags it), builds it with Visual Studio's MSBuild, starts SQL Server, writes every dataset's package, runs the verify tool, and runs the publishing gate. A version tag (`v1.0.0`) publishes. A manual run is a dry run unless it is on `main` and asks to publish. | Each package is for one exact Rock (decision 52), so one release covers every supported Rock. A clean machine for every run means a package never depends on what a developer had built or installed. |
30
-
|D-release-2| 2026-10-21 | Published files never change. A release uploads each package and its receipt to `sampledata/packages/v{version}/rock-{Rock version}/`, cached for a year. A re-run skips a file already there with the same bytes and stops at one with other bytes. The index, `sampledata/packages/index.json`, is merged and uploaded last, cached for 5 minutes. It lists each dataset once per Rock version: a release replaces the entry for the same dataset and Rock, and entries for other Rocks stay. | Every package URL can be cached forever, a failed run can simply be run again, and no one sees a package in the index before its file exists. Older packages keep working at their own paths after the index moves on. |
31
-
|D-release-3| 2026-10-21 | A prerelease tag (`v1.1.0-beta.1`) publishes the loader as a NuGet prerelease and uploads its packages, but changes only `packages/index-prerelease.json`: the stable index plus the prerelease. A stable release writes both indexes. | Rock's installer block reads `index.json`, so a church never gets a prerelease. Testers point the block at the prerelease index instead. |
32
-
|D-release-4| 2026-10-21 | Publishing stores no secrets. The publish job runs in the `release` GitHub environment, which needs a person's approval and allows only `main` and `v*` tags. It signs in to nuget.org with trusted publishing, and to Azure with OpenID Connect as an identity that trusts only that environment and whose only role is Storage Blob Data Contributor on the `sampledata` container. | There is no key to leak, rotate, or expire. The identity can write only sample data, and a person approves every publish. |
29
+
|127| 2026-10-21 | Releases are built by the release workflow (`.github/workflows/release.yml`), never on a developer's machine. For each Rock release in `release/rock-releases.json`, it checks out that Rock from SparkDevNetwork/Rock (a release tag, or a pinned commit before Rock tags it), builds it with Visual Studio's MSBuild, starts SQL Server, writes every dataset's package, runs the verify tool, and runs the publishing gate. A version tag (`v1.0.0`) publishes. A manual run is a dry run unless it is on `main` and asks to publish. | Each package is for one exact Rock (decision 52), so one release covers every supported Rock. A clean machine for every run means a package never depends on what a developer had built or installed. |
30
+
|128| 2026-10-21 | Published files never change. A release uploads each package and its receipt to `sampledata/packages/v{version}/rock-{Rock version}/`, cached for a year. A re-run skips a file already there with the same bytes and stops at one with other bytes. The index, `sampledata/packages/index.json`, is merged and uploaded last, cached for 5 minutes. It lists each dataset once per Rock version: a release replaces the entry for the same dataset and Rock, and entries for other Rocks stay. | Every package URL can be cached forever, a failed run can simply be run again, and no one sees a package in the index before its file exists. Older packages keep working at their own paths after the index moves on. |
31
+
|129| 2026-10-21 | A prerelease tag (`v1.1.0-beta.1`) publishes the loader as a NuGet prerelease and uploads its packages, but changes only `packages/index-prerelease.json`: the stable index plus the prerelease. A stable release writes both indexes. | Rock's installer block reads `index.json`, so a church never gets a prerelease. Testers point the block at the prerelease index instead. |
32
+
|130| 2026-10-21 | Publishing stores no secrets. The publish job runs in the `release` GitHub environment, which needs a person's approval and allows only `main` and `v*` tags. It signs in to nuget.org with trusted publishing, and to Azure with OpenID Connect as an identity that trusts only that environment and whose only role is Storage Blob Data Contributor on the `sampledata` container. | There is no key to leak, rotate, or expire. The identity can write only sample data, and a person approves every publish. |
Copy file name to clipboardExpand all lines: docs/glossary.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -34,7 +34,7 @@ The words this project uses, in alphabetical order.
34
34
|**Mass send**| An email, text, or push sent to 25 or more people at once. Calibration part 7 measures them. |
35
35
|**Opportunity**| One way to serve that people can ask about, such as Greeter. Each opportunity places people on its serving team. |
36
36
|**Package**| A zip the builder writes for one dataset and one exact Rock: data files only, never SQL, with a checksum for every file in `package.json`. |
37
-
|**Package index**|`index.json`, the hosted list of packages that Rock's installer block reads, at `storage.rockrms.com/sampledata/packages/`. The release workflow merges each release into it and uploads it last (decision D-release-2). |
37
+
|**Package index**|`index.json`, the hosted list of packages that Rock's installer block reads, at `storage.rockrms.com/sampledata/packages/`. The release workflow merges each release into it and uploads it last (decision 128). |
38
38
|**Pending**| A team member who has connected but is not serving yet. The team leader makes them Active after onboarding. The scheduler only schedules Active members. |
39
39
|**Persona**| A behavior pattern, such as a weekly giver or a holiday-only attender. |
40
40
|**Pledge**| A promise to give a total to a fund over set dates, with an optional frequency. Rock's Pledge Analytics compares it with what the giving unit gave. |
@@ -43,7 +43,7 @@ The words this project uses, in alphabetical order.
43
43
|**Position**| A room a serving team serves in, with a minimum, desired, and maximum number of people at each service. |
44
44
|**Profile**| The blended target numbers the builder uses, in `calibration/profiles/`. |
45
45
|**Relative date**| A date stored as `yearsAgo` plus a month and day, or as `daysAgo`, instead of a fixed date. |
46
-
|**Release workflow**|`.github/workflows/release.yml`. On a version tag it builds, verifies, and publishes every package for every supported Rock, and pushes the loader to nuget.org (decision D-release-1). |
46
+
|**Release workflow**|`.github/workflows/release.yml`. On a version tag it builds, verifies, and publishes every package for every supported Rock, and pushes the loader to nuget.org (decision 127). |
47
47
|**Rhythm step**| A step that is a habit, such as being in a small group or giving. It starts and can stop. A milestone step happens once, such as baptism. See [Steps](steps.md). |
48
48
|**Rotation**| How often a volunteer serves: one of Rock's four schedule templates (every week, every other week, 1st and 3rd, or 2nd and 4th). |
49
49
|**Seed**| The text every random choice starts from. The same seed and anchor give the same data. |
Copy file name to clipboardExpand all lines: docs/maintaining.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -120,7 +120,7 @@ Tests and documentation rely on Cast people. Treat a change like a code change:
120
120
121
121
## Publishing a release
122
122
123
-
The release workflow, `.github/workflows/release.yml`, publishes everything (decisions D-release-1 to D-release-4). It has four jobs:
123
+
The release workflow, `.github/workflows/release.yml`, publishes everything (decisions 127 to 130). It has four jobs:
124
124
125
125
| Job | Where | What it does |
126
126
|---|---|---|
@@ -144,7 +144,7 @@ A run without "publish" stops after the first three jobs. That is a dry run.
144
144
145
145
4. Approve the Publish job when GitHub asks.
146
146
147
-
A tag with a label, such as `v1.1.0-beta.1`, is a prerelease. NuGet lists the loader as a prerelease, and only `packages/index-prerelease.json` changes (decision D-release-3). To try one in Rock, point the installer block at `https://storage.rockrms.com/sampledata/packages/index-prerelease.json`.
147
+
A tag with a label, such as `v1.1.0-beta.1`, is a prerelease. NuGet lists the loader as a prerelease, and only `packages/index-prerelease.json` changes (decision 129). To try one in Rock, point the installer block at `https://storage.rockrms.com/sampledata/packages/index-prerelease.json`.
148
148
149
149
A manual run can also publish: run it on `main`, give a version, and tick "publish". Use this when a tag's run failed for a reason outside the repository. A run that failed partway can be run again: files already uploaded with the same bytes are skipped, and a version already on nuget.org is skipped.
Copy file name to clipboardExpand all lines: docs/roadmap.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -40,7 +40,7 @@ Where the project stands: the team's working list. Update this page whenever som
40
40
41
41
-**The Sample Data Installer block in Rock**, built in the Rock repository against the loader package. It shows Core 1, Core 3, and Full 7 as cards from the dataset catalog and downloads the chosen package from a hosted `index.json`, beside the old sample data block.
42
42
-**Communications** (decisions 90 to 96; see [Communications](communications.md)). Email, texts, and push with very large mass sends, opens and clicks, SMS conversations, one-to-one messages, and messages tied to steps. Slice 1 is done: the design, calibration part 7, and the church app stub. Source-1 has run part 7, and its communication shapes are in the profile. Next: the setup slice.
43
-
-**The release workflow** (decisions D-release-1 to D-release-4; see [Publishing a release](maintaining.md#publishing-a-release)). `.github/workflows/release.yml` builds each Rock release in `release/rock-releases.json`, writes and verifies every package, and runs the publishing gate. On a version tag it pushes the loader to nuget.org and uploads the packages, receipts, and index to Azure, the index last. A dry run on GitHub's `windows-2025` runner on 2026-10-22 built Rock 21.0.2, ran SQL Server 2025, passed verify on all three packages, and passed the gate. Its Packages job took 66 minutes (about 30 to build Rock, 6 for SQL Server, and 28 for verify). A self-hosted runner stays a fallback. The one-time setup in [Maintaining](maintaining.md#one-time-setup) is done (2026-10-22): the Azure identity and its role, nuget.org trusted publishing for `SparkDevNetwork.Rock.SampleData.Loader`, and the `release` environment with its approvers and variables. What is left:
43
+
-**The release workflow** (decisions 127 to 130; see [Publishing a release](maintaining.md#publishing-a-release)). `.github/workflows/release.yml` builds each Rock release in `release/rock-releases.json`, writes and verifies every package, and runs the publishing gate. On a version tag it pushes the loader to nuget.org and uploads the packages, receipts, and index to Azure, the index last. A dry run on GitHub's `windows-2025` runner on 2026-10-22 built Rock 21.0.2, ran SQL Server 2025, passed verify on all three packages, and passed the gate. Its Packages job took 66 minutes (about 30 to build Rock, 6 for SQL Server, and 28 for verify). A self-hosted runner stays a fallback. The one-time setup in [Maintaining](maintaining.md#one-time-setup) is done (2026-10-22): the Azure identity and its role, nuget.org trusted publishing for `SparkDevNetwork.Rock.SampleData.Loader`, and the `release` environment with its approvers and variables. What is left:
44
44
- The first real release, to prove the Publish job.
45
45
- Change the Rock 21.0.2 entry from a develop commit to its tag once Rock tags it.
Copy file name to clipboardExpand all lines: loader/README.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -133,7 +133,7 @@ The two builds are meant to load the same rows. One difference is expected: .NET
133
133
134
134
## The package index
135
135
136
-
The hosted list of packages is `index.json` (decision 123). The [release workflow](../docs/maintaining.md#publishing-a-release) merges each release into it and uploads it last, at `https://storage.rockrms.com/sampledata/packages/index.json`, beside the versioned packages (decision D-release-2). A prerelease changes only `index-prerelease.json` beside it (decision D-release-3). `SampleDataPackageIndex.Parse` reads it, and it refuses text that is not JSON, another format version, or an entry without a required field.
136
+
The hosted list of packages is `index.json` (decision 123). The [release workflow](../docs/maintaining.md#publishing-a-release) merges each release into it and uploads it last, at `https://storage.rockrms.com/sampledata/packages/index.json`, beside the versioned packages (decision 128). A prerelease changes only `index-prerelease.json` beside it (decision 129). `SampleDataPackageIndex.Parse` reads it, and it refuses text that is not JSON, another format version, or an entry without a required field.
Copy file name to clipboardExpand all lines: release/README.md
+2-2Lines changed: 2 additions & 2 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,8 +4,8 @@ What the release workflow, `.github/workflows/release.yml`, reads and runs. How
4
4
5
5
| File | What it is |
6
6
|---|---|
7
-
|`rock-releases.json`| The Rock releases each release builds packages for, each with the tag or commit to check out from SparkDevNetwork/Rock (decision D-release-1). |
8
-
|`merge-index.js`| Merges one release's verified packages into the hosted `index.json` (decision D-release-2). |
7
+
|`rock-releases.json`| The Rock releases each release builds packages for, each with the tag or commit to check out from SparkDevNetwork/Rock (decision 127). |
8
+
|`merge-index.js`| Merges one release's verified packages into the hosted `index.json` (decision 128). |
Copy file name to clipboardExpand all lines: release/rock-releases.json
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -1,5 +1,5 @@
1
1
{
2
-
"$comment": "The Rock releases the release workflow builds packages for (decision D-release-1). Each package is for one exact Rock (decision 52), so the workflow checks out each ref from SparkDevNetwork/Rock, builds it, writes and verifies every dataset's package for it, and publishes them under packages/v{tag}/rock-{version}/. 'ref' is a release tag once Rock tags the release, or a full commit hash before then. The workflow refuses a ref whose Directory.Build.props has a different version.",
2
+
"$comment": "The Rock releases the release workflow builds packages for (decision 127). Each package is for one exact Rock (decision 52), so the workflow checks out each ref from SparkDevNetwork/Rock, builds it, writes and verifies every dataset's package for it, and publishes them under packages/v{tag}/rock-{version}/. 'ref' is a release tag once Rock tags the release, or a full commit hash before then. The workflow refuses a ref whose Directory.Build.props has a different version.",
0 commit comments