Index: doc/proposals/modules-gen-hdr/akwd-val-trans/a.src.c
===================================================================
--- doc/proposals/modules-gen-hdr/akwd-val-trans/a.src.c	(revision b28ce93ef6648a426d1fb594f74b51bfeda9976c)
+++ doc/proposals/modules-gen-hdr/akwd-val-trans/a.src.c	(revision b28ce93ef6648a426d1fb594f74b51bfeda9976c)
@@ -0,0 +1,14 @@
+#import auto & b
+
+//# @
+struct a_t {
+    struct b_t * b;
+};
+
+//# $f
+void a( struct a_t * p, int depth ) {
+        int printf( const char *, ... );  // scaffold
+    if (depth < 0) return;
+    printf( "a %p %d\n", p, depth );
+    b( p->b, depth-1 );
+}
Index: doc/proposals/modules-gen-hdr/akwd-val-trans/b.src.c
===================================================================
--- doc/proposals/modules-gen-hdr/akwd-val-trans/b.src.c	(revision b28ce93ef6648a426d1fb594f74b51bfeda9976c)
+++ doc/proposals/modules-gen-hdr/akwd-val-trans/b.src.c	(revision b28ce93ef6648a426d1fb594f74b51bfeda9976c)
@@ -0,0 +1,16 @@
+#import auto a
+
+//# @
+struct b_t {
+    // embedding is really a tack-on here; tested in coop
+    // but it justifies the aymmetric a/b imports
+    struct a_t a; // not a pointer
+};
+
+//# $f
+void b( struct b_t * p, int depth ) {
+        int printf( const char *, ... );  // scaffold
+    if (depth <= 0) return;
+    printf( "b %p %d\n", p, depth );
+    a( & p->a, depth-1 );
+}
Index: doc/proposals/modules-gen-hdr/akwd-val-trans/main.src.c
===================================================================
--- doc/proposals/modules-gen-hdr/akwd-val-trans/main.src.c	(revision b28ce93ef6648a426d1fb594f74b51bfeda9976c)
+++ doc/proposals/modules-gen-hdr/akwd-val-trans/main.src.c	(revision b28ce93ef6648a426d1fb594f74b51bfeda9976c)
@@ -0,0 +1,11 @@
+#import static over_a
+#import static over_b
+
+//# $f
+int main() {
+        int printf( const char *, ... );  // scaffold
+    struct b_t x;
+    x.a.b = & x;
+    over_a( & x.a, 5 );
+    over_b( & x, 5 );
+}
Index: doc/proposals/modules-gen-hdr/akwd-val-trans/over_a.src.c
===================================================================
--- doc/proposals/modules-gen-hdr/akwd-val-trans/over_a.src.c	(revision b28ce93ef6648a426d1fb594f74b51bfeda9976c)
+++ doc/proposals/modules-gen-hdr/akwd-val-trans/over_a.src.c	(revision b28ce93ef6648a426d1fb594f74b51bfeda9976c)
@@ -0,0 +1,17 @@
+// in full-option-A transitive semantics, includes b's functions
+#import auto a
+
+// awkward but necessary here, unnecessary in full-option-A transitive semantics
+// MANUAL step as ERR1: comment out the import
+//   (manual becuase can't ifdef an import)
+//   scaffold note: leave space after comment token, so `// #`, not `//#`
+#import static b
+
+//# $f
+void over_a( struct a_t * p, int depth ) {
+        int printf( const char *, ... );  // scaffold
+    printf( "over_a -> a\n" );
+    a( p, depth);
+    printf( "over_a -> b\n" );
+    b( p->b, depth);
+}
Index: doc/proposals/modules-gen-hdr/akwd-val-trans/over_b.src.c
===================================================================
--- doc/proposals/modules-gen-hdr/akwd-val-trans/over_b.src.c	(revision b28ce93ef6648a426d1fb594f74b51bfeda9976c)
+++ doc/proposals/modules-gen-hdr/akwd-val-trans/over_b.src.c	(revision b28ce93ef6648a426d1fb594f74b51bfeda9976c)
@@ -0,0 +1,15 @@
+// in full-option-A transitive semantics and demo-hybrid, includes a's functions
+#import auto b
+
+// necessary only in full-option-B transitive semantics
+// (unnecessary in demo's awkward hybrid semantics)
+// #import static under_a
+
+//# $f
+void over_b( struct b_t * p, int depth ) {
+        int printf( const char *, ... );  // scaffold
+    printf( "over_b -> a\n" );
+    a(& p->a, depth);
+    printf( "over_b -> b\n" );
+    b( p, depth);
+}
