Skip to content

Commit ce702e2

Browse files
committed
Merged part7-source1-rerun: source-1's profile is regenerated from its part 7 rerun, adding saturation and a year of unsubscribes, and the sample church excludes five designed or unmeasured values. All three packages pass verify on Rock 21.0.2
2 parents 41b514b + e563258 commit ce702e2

4 files changed

Lines changed: 91 additions & 12 deletions

File tree

‎calibration/profiles/sample-church.json‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,12 @@
4040
{ "path": "communicationDetail.unsubscribes", "reason": "The measured sends recorded no unsubscribes or spam complaints, so these rates are designed." },
4141
{ "path": "communicationDetail.sms.massReplies", "reason": "Replies were not linked to the texts they answer in the measured data, so this reads zero. Reply rates are designed." },
4242
{ "path": "communicationDetail.sms.inbound.pctLinkedToCommunication", "reason": "Replies were not linked to the texts they answer in the measured data." },
43-
{ "path": "communicationDetail.outcomes.Recipient preference.pctOpenedOfDelivered", "reason": "Some opens are recorded without updating the recipient's status, so this reads low. The open rate is engagement's pctUniqueOpenersOfDelivered." }
43+
{ "path": "communicationDetail.outcomes.Recipient preference.pctOpenedOfDelivered", "reason": "Some opens are recorded without updating the recipient's status, so this reads low. The open rate is engagement's pctUniqueOpenersOfDelivered." },
44+
{ "path": "communicationDetail.saturation.byMedium.Email.bulkFlagged", "reason": "The sample church flags every mass send as bulk (decision 132), so its load is graded against the all-mass-sends shape." },
45+
{ "path": "communicationDetail.saturation.byMedium.SMS.bulkFlagged", "reason": "The sample church flags every mass send as bulk (decision 132), so its load is graded against the all-mass-sends shape." },
46+
{ "path": "communicationDetail.saturation.byMedium.Push", "reason": "The measured data has almost no pushes, so push load is designed." },
47+
{ "path": "communicationDetail.unsubscribesYear.levelMix", "reason": "Only texted STOPs are recorded on recipient rows in the measured data, so the email unsubscribe levels are designed (decision 131)." },
48+
{ "path": "communicationDetail.unsubscribesYear.perThousandMassRecipients.Recipient preference", "reason": "Too few unsubscribes to use." }
4449
],
4550
"overrides": [
4651
{ "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)." },

‎calibration/profiles/sources/source-1.json‎

Lines changed: 81 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -835,7 +835,7 @@
835835
},
836836
"Recipient preference": {
837837
"pctDelivered": 97.9,
838-
"pctOpenedOfDelivered": 37.8,
838+
"pctOpenedOfDelivered": 37.9,
839839
"pctFailed": 2.1,
840840
"pctCancelled": 0
841841
},
@@ -849,14 +849,14 @@
849849
"engagement": {
850850
"Email": {
851851
"pctUniqueOpenersOfDelivered": 65.1,
852-
"opensPerOpener": 1.85,
852+
"opensPerOpener": 1.86,
853853
"pctUniqueClickersOfOpeners": 13.4,
854854
"pctUniqueClickersOfDelivered": 8.7,
855855
"clicksPerClicker": 1.61,
856856
"pctClicksOnUnsubscribeLinks": 0
857857
},
858858
"Recipient preference": {
859-
"pctUniqueOpenersOfDelivered": 46.9,
859+
"pctUniqueOpenersOfDelivered": 47,
860860
"opensPerOpener": 1.82,
861861
"pctUniqueClickersOfOpeners": 14.1,
862862
"pctUniqueClickersOfDelivered": 6.6,
@@ -898,12 +898,12 @@
898898
"6-7 days or more": 1.5
899899
},
900900
"Opened": {
901-
"1-under 1 hour": 46.7,
902-
"2-1 to 6 hours": 28.3,
901+
"1-under 1 hour": 46.6,
902+
"2-1 to 6 hours": 28.2,
903903
"3-6 to 24 hours": 13.7,
904904
"4-1 to 3 days": 7.7,
905905
"5-3 to 7 days": 2.1,
906-
"6-7 days or more": 1.5
906+
"6-7 days or more": 1.7
907907
}
908908
}
909909
},
@@ -933,7 +933,7 @@
933933
"pctIos": 94.2,
934934
"pctAndroid": 5.8,
935935
"pctNotificationsOn": 88.6,
936-
"pctSeenInLast30Days": 4
936+
"pctSeenInLast30Days": 4.2
937937
},
938938
"sms": {
939939
"inboundPerYearPerThousandActiveAdults": 123.7,
@@ -1020,6 +1020,80 @@
10201020
"hasFlows": true,
10211021
"pctActive": 100,
10221022
"communicationsPerFlowP50": 9
1023+
},
1024+
"saturation": {
1025+
"periodStart": "2026-09-01",
1026+
"byMedium": {
1027+
"Email": {
1028+
"bulkFlagged": {
1029+
"00": 85,
1030+
"01": 1.5,
1031+
"02": 0,
1032+
"03": 11.3,
1033+
"04-06": 2.3,
1034+
"07-09": 0
1035+
},
1036+
"mass": {
1037+
"00": 84.1,
1038+
"01": 1.7,
1039+
"02": 0.1,
1040+
"03": 0,
1041+
"04-06": 12.7,
1042+
"07-09": 0.9,
1043+
"10-14": 0.3,
1044+
"15-19": 0,
1045+
"20+": 0
1046+
}
1047+
},
1048+
"Push": {
1049+
"bulkFlagged": {
1050+
"00": 100
1051+
},
1052+
"mass": {
1053+
"00": 100
1054+
}
1055+
},
1056+
"SMS": {
1057+
"bulkFlagged": {
1058+
"00": 97.5,
1059+
"01": 1.2,
1060+
"02": 0,
1061+
"03": 0,
1062+
"04-06": 1.3,
1063+
"07-09": 0
1064+
},
1065+
"mass": {
1066+
"00": 95.3,
1067+
"01": 1.9,
1068+
"02": 0.5,
1069+
"03": 0.2,
1070+
"04-06": 1.7,
1071+
"07-09": 0.3,
1072+
"10-14": 0.1,
1073+
"15-19": 0
1074+
}
1075+
}
1076+
}
1077+
},
1078+
"unsubscribesYear": {
1079+
"perThousandMassRecipients": {
1080+
"Recipient preference": {
1081+
"All": 0.024
1082+
},
1083+
"SMS": {
1084+
"All": 0.338
1085+
}
1086+
},
1087+
"levelMix": {
1088+
"All": 100
1089+
},
1090+
"delayMix": {
1091+
"1-same day": 87,
1092+
"2-1 to 2 days": 9.3,
1093+
"3-3 to 7 days": 1.7,
1094+
"4-8 to 30 days": 0.7,
1095+
"5-over 30 days": 1.3
1096+
}
10231097
}
10241098
}
10251099
}

‎docs/communications.md‎

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -83,15 +83,15 @@ Unsubscribes are designed, not measured (decision 131). The measured data record
8383
- **Which sends.** Large newsletters draw more unsubscribes than small ministry sends.
8484
- **Texted STOP.** A few people text STOP. Their newest text gets a level All unsubscribe, and texting is turned off on their phone, so later texts leave them out.
8585
- **The Cast.** A couple of Cast people unsubscribe in ways their stories explain, such as leaving the Men's list after moving to a Saturday group, so tests can find a known case.
86-
- **Calibration.** Part 7 also counts a whole year of unsubscribes, with their levels and timing, where Rock 19's unsubscribe index exists. Where a source has them, they shape the design.
86+
- **Calibration.** Part 7 also counts a whole year of unsubscribes, with their levels and timing, where Rock 19's unsubscribe index exists. In the measured data, recipient rows hold texted STOPs (about 0.34 per 1,000 mass-text recipients, mostly the same day) but no email unsubscribes, so the STOP rate and the timing are measured, and the email levels and rates are designed.
8787

8888
## Message load per person
8989

9090
Rock's Saturation report shows how many messages each adult got. A plan that sends every newsletter to a whole campus list would put most adults in the same bucket, and no real church looks like that (decision 133).
9191

9292
- **List membership follows involvement.** Leading and Engaged adults are on more lists (Volunteers, Small Group Leaders, Prayer Team, Parents of Kids) than Known adults, and some adults are on none. Parents get kids and student messages, and volunteers get serving reminders, so the busiest people sit in the high buckets.
9393
- **Some get nothing.** Adults with no email, an inactive email, "No mass emails", or no list get no mass email, and adults who cannot text get no texts.
94-
- **Graded.** Part 7 measures the share of active adults in each bucket over a month, by medium, for sends flagged bulk and for all mass sends. Validation grades the sample church against it.
94+
- **Graded.** Part 7 measures the share of active adults in each bucket over a month, by medium, for sends flagged bulk and for all mass sends. Validation grades the sample church against the all-mass-sends shape, since the sample church flags every mass send as bulk. In the measured data, most active adults get no mass email in a month and a core group gets about one a week, with a thin tail above that; texts reach far fewer people.
9595

9696
## Texts and SMS conversations
9797

@@ -163,7 +163,7 @@ Volume is designed, as for prayer and notes: the sample church shows what good c
163163
Each slice lands on its own, passes verify, and goes to the integrator.
164164

165165
1. **Design and calibration.** This page, the decisions, the calibration part 7 script, and the church app stub. Done. Source-1 has run part 7, and its shapes are in the profile.
166-
2. **Setup.** System phone numbers, communication lists with membership that follows involvement, topics, the sample church template, and the message library. Before this starts, source-1 reruns part 7 for the saturation and unsubscribe measures.
166+
2. **Setup.** System phone numbers, communication lists with membership that follows involvement, topics, the sample church template, and the message library.
167167
3. **Bulk email.** Sends flagged bulk with a sender, reviewer, and topic, recipients with their own send time, opens, clicks, failures, and unsubscribes that follow Rock's rules with matching History. Validation starts grading saturation.
168168
4. **Texts and SMS conversations.** Bulk texts, replies, the Cast's threads, generated threads, and STOP opt-outs.
169169
5. **One-to-one messages.** Serving, connections, prayer, and staff messages.

‎docs/roadmap.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ Where the project stands: the team's working list. Update this page whenever som
3939
## In progress
4040

4141
- **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-
- **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. The plan now covers the Unsubscribe and Saturation reports (decisions 131 to 133), and part 7 measures saturation and a year of unsubscribes. Next: source-1 reruns part 7, then the setup slice.
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. The plan now covers the Unsubscribe and Saturation reports (decisions 131 to 133), and part 7 measures saturation and a year of unsubscribes. Source-1 has rerun part 7, so the profile has its saturation shape, texted STOP rate, and unsubscribe timing. Next: the setup slice.
4343
- **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:
4444
- The first real release, to prove the Publish job.
4545
- Change the Rock 21.0.2 entry from a develop commit to its tag once Rock tags it.

0 commit comments

Comments
 (0)