Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion DESCRIPTION
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
Package: contentvalidR
Type: Package
Title: Tools for Substantive and Content Validity Pretesting
Version: 0.10.0
Version: 0.10.0.9000
Authors@R: c(
person(given = "Joshua", family = "Uhalt", email = "Josh.Uhalt@gmail.com",
role = c("aut", "cre"))
Expand Down
8 changes: 8 additions & 0 deletions NEWS.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
# contentvalidR 0.10.0.9000 (development version)

* The README has a section on the handoff to nomologR, just above the
references: what a handoff carries, the two nomologR calls that read it, how
to read its decisions, and how the schema is versioned. The nomologR README
carries the mirror section, so the handoff can be found from either
package's front page.

# contentvalidR 0.10.0

Tenth public release, and the last planned before the joint 1.0 release
Expand Down
26 changes: 26 additions & 0 deletions README.Rmd
Original file line number Diff line number Diff line change
Expand Up @@ -144,6 +144,32 @@ Five deterministic example data sets, covering the item-sort, construct-rating,

Cite the package with `citation("contentvalidR")`. The reference list below is also installed in BibTeX form: `system.file("REFERENCES.bib", package = "contentvalidR")`.

## The handoff to nomologR

Content review decides which items go on to be tested with response data. `content_handoff()` packages that decision so the empirical stage can pick it up without retyping anything, and [nomologR](https://github.com/JUhalt/nomologR) is the partner package that reads it. A handoff carries:

- the items carried forward, and the items held back, each with its status, its recommendation, and the rule that made the decision;
- the scales, where the design maps items to constructs;
- each item's statistics, with their intervals and criteria, and the panel's agreement where one was computed;
- two facts about the instrument that only you know: which items are reverse-worded (`reverse_keyed`, or `character(0)` if you checked and none is) and the response scale respondents will answer on (`response_scale`).

```{r handoff}
h <- content_handoff(fit, reverse_keyed = character(0), response_scale = c(1, 5))
h$items
```

Once responses are collected, pass the handoff itself to nomologR, not `h$items`, so the keying and the reasons for anything held back travel with the items:

```{r handoff-nomologr, eval=FALSE}
library(nomologR)
nomo_screen(responses, items = h) # screens the carried items
nomo_run(responses, scales = h) # runs the empirical stage on the handoff's scales
```

**Reading a handoff.** Take each item's decision from `carried` and `status`; never re-derive it by comparing a statistic with its criterion, or by branching on the version that produced it. `recommendation` states the same decision in the workflow's own words and, like `rule`, is prose. A `keying` of `NA` means nobody said, never that an item is forward-worded.

**Versions.** The handoff is schema version 1, frozen since 0.7.0: its fields and columns keep their names, positions, and types, and new optional ones may only be added at the end. A change that broke this would be schema version 2, produced beside version 1 for at least a release cycle. The reader in nomologR is tested against handoffs from contentvalidR 0.6.0 through 0.9.0, and neither package depends on the other. See `?content_handoff` for the full contract, `vignette("handoff-to-empirical-validation")` for a guide, and `vignette("one-item-set-both-stages")` for the joint walkthrough.

## References

Works cited in this README, the help pages, and the vignettes.
Expand Down
51 changes: 51 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -267,6 +267,57 @@ Cite the package with `citation("contentvalidR")`. The reference list
below is also installed in BibTeX form:
`system.file("REFERENCES.bib", package = "contentvalidR")`.

## The handoff to nomologR

Content review decides which items go on to be tested with response
data. `content_handoff()` packages that decision so the empirical stage
can pick it up without retyping anything, and
[nomologR](https://github.com/JUhalt/nomologR) is the partner package
that reads it. A handoff carries:

- the items carried forward, and the items held back, each with its
status, its recommendation, and the rule that made the decision;
- the scales, where the design maps items to constructs;
- each item鈥檚 statistics, with their intervals and criteria, and the
panel鈥檚 agreement where one was computed;
- two facts about the instrument that only you know: which items are
reverse-worded (`reverse_keyed`, or `character(0)` if you checked and
none is) and the response scale respondents will answer on
(`response_scale`).

``` r
h <- content_handoff(fit, reverse_keyed = character(0), response_scale = c(1, 5))
h$items
#> [1] "Clear 1" "Clear 2"
```

Once responses are collected, pass the handoff itself to nomologR, not
`h$items`, so the keying and the reasons for anything held back travel
with the items:

``` r
library(nomologR)
nomo_screen(responses, items = h) # screens the carried items
nomo_run(responses, scales = h) # runs the empirical stage on the handoff's scales
```

**Reading a handoff.** Take each item鈥檚 decision from `carried` and
`status`; never re-derive it by comparing a statistic with its
criterion, or by branching on the version that produced it.
`recommendation` states the same decision in the workflow鈥檚 own words
and, like `rule`, is prose. A `keying` of `NA` means nobody said, never
that an item is forward-worded.

**Versions.** The handoff is schema version 1, frozen since 0.7.0: its
fields and columns keep their names, positions, and types, and new
optional ones may only be added at the end. A change that broke this
would be schema version 2, produced beside version 1 for at least a
release cycle. The reader in nomologR is tested against handoffs from
contentvalidR 0.6.0 through 0.9.0, and neither package depends on the
other. See `?content_handoff` for the full contract,
`vignette("handoff-to-empirical-validation")` for a guide, and
`vignette("one-item-set-both-stages")` for the joint walkthrough.

## References

Works cited in this README, the help pages, and the vignettes.
Expand Down
15 changes: 11 additions & 4 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -860,10 +860,17 @@ reads no handoffs and takes no part in the joint 1.0.
another round is needed). It is a tag only, never a GitHub release,
because R-universe publishes GitHub releases to users. Handoff fixtures
from a candidate are named `handoff-<fit>-v0.99.0.rds`.
- **2026-10-17, release-candidate day.** `agreement_summary()` is removed,
the version becomes 0.99.0, and `v1.0.0-rc.1` is tagged. Then the round
below runs: the fixture set goes to nomologR, and the compatibility
table, the shared handoff example, and the release notes are drafted.
- **2026-10-17, release-candidate day,** for both packages, in this order,
agreed with nomologR so that its tests pass before either package tags:
1. contentvalidR removes `agreement_summary()`, sets the version to
0.99.0, pushes that commit untagged, and generates the fixture set
from it, with the commit recorded in the manifest;
2. nomologR adds the fixtures, reads 0.99.0 as a producer version, and
runs its suite;
3. once that passes, both packages tag `v1.0.0-rc.1`, contentvalidR on
exactly the commit the fixtures came from;
4. then the compatibility table, the shared handoff example, and the
release notes are drafted.
- **CRAN submission, after that.** CRAN asks for updates to an established
package no more often than every one to two months. So the joint 1.0 goes
to CRAN no sooner than about a month after the later of the two
Expand Down
Loading