# Synthetic workflow divergence; base R only. No external data.
d <- data.frame(id=1:8,arm=factor(rep(c('control','treatment'),each=4)),y=c(1,2,3,4,3,4,5,10),z=c(1,2,3,4,1,2,3,NA))
a <- lm(y~arm,d)
b <- lm(y~arm+z,d)
same <- d[complete.cases(d[c('y','arm','z')]),]
c <- lm(y~arm,same)
reverse <- transform(d,arm=relevel(arm,ref='treatment'))
r <- lm(y~arm,reverse)
cat(sprintf('Original model: n=%d, treatment-control=%.3f\n',nobs(a),coef(a)[2]))
cat(sprintf('Same formula on complete rows: n=%d, treatment-control=%.3f\n',nobs(c),coef(c)[2]))
cat(sprintf('Added z: n=%d, conditional treatment-control=%.3f\n',nobs(b),coef(b)[2]))
cat(sprintf('Reversed reference: control-treatment=%.3f; max fitted-value difference=%.8f\n',coef(r)[2],max(abs(fitted(a)-fitted(r)))))
# Stable audit manifest: record input checksum, identifiers, formula and session.
f <- tempfile(fileext='.csv'); write.csv(d,f,row.names=FALSE,quote=FALSE)
cat('Input MD5:',unname(tools::md5sum(f)),'\n'); unlink(f)
cat('Included IDs:',paste(d$id[as.integer(rownames(model.frame(a)))],collapse=','),'\n')
print(formula(a)); print(options('contrasts','na.action')); print(RNGkind()); sessionInfo()
stopifnot(nobs(a)==8,nobs(b)==7,max(abs(fitted(a)-fitted(r)))<1e-8)
