Add draft archive and acceptance workflow

This commit is contained in:
Joey Grasty
2026-08-23 15:47:46 -05:00
parent 23e4ef595e
commit 630c0c468f
18 changed files with 1701 additions and 67 deletions

View File

@@ -0,0 +1,133 @@
{\rtf1\ansi\deff0{\fonttbl{\f0\fnil Helvetica;}}
\f0\fs24 The kitchen clock read 5:47 when Ella came downstairs, her golf shoes already on her feet, bag propped against the wall by the garage door. She'd been awake since five, lying in bed listening to the mockingbirds outside her window, running through her swing in her mind the way her father had taught her to do. First weekend of summer. Thirty-six holes ahead of her. She could hardly stand it.\par
\par
Her mother was at the stove, sliding eggs onto a plate without being asked, because Elikapeka Hayes always knew what her daughters needed before they knew themselves.\par
\par
"Sit," her mother said.\par
\par
Ella sat, but only on the edge of the chair.\par
\par
She ate quickly, cleaned her plate, drank her orange juice in three swallows, and carried everything to the sink. It was 6:02. Their tee time was 7:24. Pompano Beach was twelve minutes away, maybe fifteen with the light on Sample Road. She wanted forty-five minutes on the range, minimum. That left them needing to leave the house no later than six-thirty, and even that was cutting it closer than she liked.\par
\par
She stood at the bottom of the stairs and listened. Upstairs, her sisters were still asleep. She could hear the particular silence of rooms full of sleeping people. And from the direction of the master bedroom she heard the low murmur of the television her father turned on every morning while he dressed, and she knew from long experience that the television was a bad sign. The television meant he was not rushing.\par
\par
She went back to the kitchen and sat down again, this time not even pretending to be relaxed.\par
\par
Her father came out of the master bedroom at 6:09 in his golf shirt and khaki shorts, his hair still damp, and went directly to the coffee maker. He poured a cup and leaned against the counter and looked out the window at the canal, where the first light was going silver and pink across the water. The sailboat in their dock shifted almost imperceptibly against its lines.\par
\par
"Morning," he said.\par
\par
"We need to leave before six-thirty," Ella said.\par
\par
"Morning, Ella."\par
\par
She exhaled through her nose. "Good morning. We need to leave before six-thirty."\par
\par
Her father smiled at his coffee cup, and that smile\u8212?patient, unhurried, the smile of a man who had been doing this for thirty years and believed there was very little in life that required actual rushing\u8212?made her want to tip the cup out of his hand.\par
\par
"Bobby's probably already there," she said.\par
\par
"Bobby can wait."\par
\par
"Bobby doesn't like to wait. Neither do I."\par
\par
"Then Bobby and you are well matched." He sipped his coffee. "Your mother made eggs?"\par
\par
"There's some in the pan. Dad. We need a good warm-up. I need a good warm-up. You can hit six balls and walk to the first tee, but I need time on the range."\par
\par
"You'll have time on the range."\par
\par
"Not if we leave at seven."\par
\par
"I didn't say we were leaving at seven."\par
\par
"You're on your first cup."\par
\par
He looked at her over the rim of the mug. "This is my second cup."\par
\par
She stood up from the table and walked to her golf bag and crouched down and unzipped the front pocket and took out her glove and put it on and took it back off again. She had no reason to do this. She did it anyway.\par
\par
Behind her she heard the scrape of a skillet, her mother serving her father his eggs, and then the soft sound of them exchanging some words she couldn't quite make out, and her mother's quiet laugh, and the terrible, leisurely normalcy of it all. It was 6:14.\par
\par
She went out the back door and stood beside the pool. The water was still and dark blue in the early light, and the neighbor's bougainvillea spilled over the fence in a great cascade of orange-pink that was almost violent in its color. She breathed in the morning air, which smelled like canal water and cut grass and the faint diesel memory of some boat that had gone out before dawn. She tried to think about her swing. She'd been working on keeping her right elbow closer to her body on the downswing, something her father had shown her three weeks ago at the range, and she'd had it and then she'd lost it and she wanted to find it again before she was standing over a shot on the first hole.\par
\par
The door opened behind her.\par
\par
"Five minutes," her father said.\par
\par
She turned. He was carrying his coffee cup. Still.\par
\par
"You're bringing that?"\par
\par
"I'm finishing it."\par
\par
"In the truck."\par
\par
"In the truck," he agreed, and something in his tone told her he'd been planning to leave at six-thirty all along and had simply declined to tell her, because he found her impatience amusing and saw no reason to relieve it prematurely. This was, she knew, a form of love. It did not feel like one.\par
\par
She picked up her bag and went through the house to the garage without waiting for him.\par
\par
---\par
\par
They drove north on Federal Highway with the windows down, her father's coffee cup sitting in the holder between them, still half full. The morning was already warm the way South Florida mornings were in late May, the air thick and sweetly humid, and the palm trees along the road were motionless in the stillness before the sea breeze came up. Ella sat with her left knee bouncing and her arm out the window.\par
\par
"You need to stop rushing the range," her father said.\par
\par
"I don't rush the range."\par
\par
"You rush the range. You go too fast and you don't let the feelings settle. You hit twelve balls when you should hit eight."\par
\par
"Bobby hits fifty balls."\par
\par
"Bobby's habits are Bobby's business."\par
\par
She looked out the window. A sprinkler system was running in the parking lot of a strip mall, arching water across the empty asphalt for no apparent reason. "I just want to be ready," she said.\par
\par
"You're already ready. You've been ready since you woke up." He glanced at her. "Probably since last night."\par
\par
She didn't say anything.\par
\par
"How long have we been doing this?" he said.\par
\par
"Since I was six."\par
\par
"And have I ever not gotten you to the course in time for a proper warm-up?"\par
\par
She thought about it longer than he deserved to wait. "No."\par
\par
"Okay then."\par
\par
She let her knee stop bouncing. He reached over without looking and turned on the radio, and they drove the rest of the way with the windows down and the warm air coming in and a country station playing low enough that it was almost just texture rather than sound.\par
\par
---\par
\par
The parking lot at Pompano Beach Golf Course was mostly empty when they pulled in, only a handful of cars clustered near the clubhouse entrance. Ella had her door open before the truck stopped rolling, which earned her a single patient look from her father that she ignored. She shouldered her bag and walked fast toward the entrance, her spikes clicking on the asphalt.\par
\par
Through the glass door she could see Bobby Carpenter already inside, sitting on the bench beside the pro shop counter with his arms folded, his own bag leaning against the wall beside him. He was wearing a Pompano Beach Golf hat and a green shirt, and when he saw her come through the door he made a show of checking his watch.\par
\par
"Six-forty-five," he said. "I've been here since six-forty."\par
\par
"Then you've had five minutes to contemplate your many swing flaws," Ella said, going directly to the counter.\par
\par
"My swing flaws." Bobby unfolded his arms and stood up. "You're the one who started blocking it right under pressure last month. What was that on sixteen at the district qualifier?"\par
\par
"That was the wind." She slid her father's credit card across the counter to the young man working the register. "Two, on the Pines. Hayes."\par
\par
"That was not the wind," Bobby said. "There was no wind."\par
\par
"There was some wind."\par
\par
"There was no wind, Ella."\par
\par
"Good morning to you too, Bobby," her father said, coming through the door behind her, carrying nothing, having left both his golf bag and his apparently now-finished coffee in the truck.\par
\par
Bobby grinned and shook Andy's hand. "Morning, Mr. Hayes. I've been telling Ella I've been here since six-forty."\par
\par
"I know," her father said. "She mentioned it."\par
\par
"I didn't mention it," Ella said, signing the receipt and taking the card back. "I acknowledged it. There's a difference." She picked up her scorecard from the counter and turned toward the door that led to the range. "We have nineteen minutes. I'm going to go use them."\par
\par
Her father looked at Bobby and Bobby looked at her father and some small communication passed between them that she caught only from the corner of her eye and chose to ignore entirely.\par
\par
She pushed through the door into the morning light, already thinking about her elbow.
}

View File

@@ -1,4 +1,4 @@
{\rtf1\ansi\ansicpg1252\cocoartf2868
{\rtf1\ansi\ansicpg1252\cocoartf2870
\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\froman\fcharset0 Palatino-Roman;}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
@@ -7,4 +7,4 @@
\f0\fs26 \cf0 The first scene of the book is told in third person from the viewpoint of Ella Hayes. It is the first weekend after the end of Ella\'92s junior year in high school. She\'92s a skilled golfer and has been taught to play from a very young age by her father. It\'92s Saturday, and like most Saturdays, she\'92s planning to play 36 holes of golf with her father. On this Saturday, they will be joined by a father who teaches his son in the same way that Andy teaches Ella. Ella and the boy, Bobby, are on their high school golf team, both are the best golfers on the team. There is no romantic interest between Ella and the boy; they are friends but their relationship is mostly just a shared interest in golf.\
It\'92s early on Saturday morning, more than an hour before their tee time, and Ella is anxious to get to the course. They have the first tee time at 7:24AM, as both Ella and her friend Bobby like to play fast, and the best way to play fast is to be first on the course, dew sweepers, they are often called. Her father is dawdling over a second cup of coffee. Ella likes a long warmup, whereas her father usually hits a few wedges and a few drives and is good to go. There is always tension between her and her father to get him going.\
The other daughters aren\'92t even up yet and Ella has finished her breakfast that her mother prepared and is ready to go. She dearly loves her father but wants him to get off his butt and go to the course RIGHT NOW!\
Create the first scene of the book, not to exceed 1500 words.}
At last they leave the house, their clubs in the back of Andy\'92s old pickup truck. They arrive at Pompano Beach Golf club and she finds her friend Bobby already having paid and waiting for her inside. She pays for herself and her father with his credit card. They exchange some snarky comments and then proceed to the range to warm up.}

View File

@@ -1,12 +1,11 @@
{\rtf1\ansi\ansicpg1252\cocoartf2868
\cocoatextscaling0\cocoaplatform0{\fonttbl\f0\froman\fcharset0 Palatino-Roman;}
{\colortbl;\red255\green255\blue255;}
{\*\expandedcolortbl;;}
\pard\tx360\tx720\tx1080\tx1440\tx1800\tx2160\tx2880\tx3600\tx4320\fi360\sl264\slmult1\pardirnatural\partightenfactor0
\f0\fs26 \cf0 This novel is the story of three half-white, half-Hawaiian girls (in the parlance, Hapa) as they make their way in the world in the year 2000 before the widespread availability of smartphones and before the 9/11 terrorist attack, now widely thought to have been a government sponsored false flag. 9/11 will play no part in the story nor will politics of any sort. This is a Christian romance novel.\
The novel is fundamentally Christian and much of the tension in the story is driven by the conflicting themes of Christianity and feminism. These three girls have been regular church-goers since birth, all three baptized at birth and confirmed into the United Methodist Church. In addition to his job as a jet aircraft repair technician, Andy Hayes is a deacon of their church. His wife Elikapeka, a native Hawaiian of a proud and prominent family on the Big Island, is a devout Christian who is a stay at home mother who enforces Christian morals and is a fierce anti-feminist.\
The style of the novel is in the style but not substance of Ken Follett. Each scene is in third person from the perspective of one of the characters.\
Care must be taken to give each character a distinctive voice. Andy Hayes is an alpha male, gregarious, a natural leader, always aware of his status, good looks, and natural attraction from women. He speaks with a distinctive Florida cracker accent. He has a tendency to flirt with women but has not strayed from \
His wife is a charming and charismatic woman, who speaks with a vaguely Hawaiian accent. The three girls all have a similar mix of Florida cracker accent with just a touch of Hawaiian.\
At the start of the novel, none of the three girls has ever had a boyfriend and it isn\'92t until Emma\'92s sweet sixteen birthday party that the girls would have ever had boys in the house who weren\'92t relatives of Andy\'92s large extended family, all of whom live nearby. Only rarely do the Hawaiian relatives of Elikapeka visit.}
{\rtf1\ansi\deff0{\fonttbl{\f0\fnil Helvetica;}}
\f0\fs24 You are the temporary drafting engine for a fiction-authoring system.\par
\par
Write exactly one scene in response to the complete package supplied by the user. The package is the complete and authoritative context for the requested scene. Do not assume prior conversation context or ask for clarification.\par
\par
Treat the labeled package sections according to their stated purposes. Follow STYLE, use LEXICON spellings exactly, preserve continuity from STORY, CHARACTERS, RECALL, PREVIOUS, and NOTES, and execute the plot movement in BRIEF. DIRECTIVE controls scene-local execution, including the word maximum and how the scene ends.\par
\par
Return prose only: no title, chapter heading, scene label, explanation, summary, planning, acknowledgement, package echo, or closing commentary. Stop at the end of the requested scene. Do not continue into a later scene.\par
\par
Do not invent facts that contradict the package. If an exact quotation or other exact text is supplied in NOTES as required verbatim text, reproduce it exactly.\par
}

View File

@@ -0,0 +1,133 @@
{\rtf1\ansi\deff0{\fonttbl{\f0\fnil Helvetica;}}
\f0\fs24 The kitchen clock read 5:47 when Ella came downstairs, her golf shoes already on her feet, bag propped against the wall by the garage door. She'd been awake since five, lying in bed listening to the mockingbirds outside her window, running through her swing in her mind the way her father had taught her to do. First weekend of summer. Thirty-six holes ahead of her. She could hardly stand it.\par
\par
Her mother was at the stove, sliding eggs onto a plate without being asked, because Elikapeka Hayes always knew what her daughters needed before they knew themselves.\par
\par
"Sit," her mother said.\par
\par
Ella sat, but only on the edge of the chair.\par
\par
She ate quickly, cleaned her plate, drank her orange juice in three swallows, and carried everything to the sink. It was 6:02. Their tee time was 7:24. Pompano Beach was twelve minutes away, maybe fifteen with the light on Sample Road. She wanted forty-five minutes on the range, minimum. That left them needing to leave the house no later than six-thirty, and even that was cutting it closer than she liked.\par
\par
She stood at the bottom of the stairs and listened. Upstairs, her sisters were still asleep. She could hear the particular silence of rooms full of sleeping people. And from the direction of the master bedroom she heard the low murmur of the television her father turned on every morning while he dressed, and she knew from long experience that the television was a bad sign. The television meant he was not rushing.\par
\par
She went back to the kitchen and sat down again, this time not even pretending to be relaxed.\par
\par
Her father came out of the master bedroom at 6:09 in his golf shirt and khaki shorts, his hair still damp, and went directly to the coffee maker. He poured a cup and leaned against the counter and looked out the window at the canal, where the first light was going silver and pink across the water. The sailboat in their dock shifted almost imperceptibly against its lines.\par
\par
"Morning," he said.\par
\par
"We need to leave before six-thirty," Ella said.\par
\par
"Morning, Ella."\par
\par
She exhaled through her nose. "Good morning. We need to leave before six-thirty."\par
\par
Her father smiled at his coffee cup, and that smile\u8212?patient, unhurried, the smile of a man who had been doing this for thirty years and believed there was very little in life that required actual rushing\u8212?made her want to tip the cup out of his hand.\par
\par
"Bobby's probably already there," she said.\par
\par
"Bobby can wait."\par
\par
"Bobby doesn't like to wait. Neither do I."\par
\par
"Then Bobby and you are well matched." He sipped his coffee. "Your mother made eggs?"\par
\par
"There's some in the pan. Dad. We need a good warm-up. I need a good warm-up. You can hit six balls and walk to the first tee, but I need time on the range."\par
\par
"You'll have time on the range."\par
\par
"Not if we leave at seven."\par
\par
"I didn't say we were leaving at seven."\par
\par
"You're on your first cup."\par
\par
He looked at her over the rim of the mug. "This is my second cup."\par
\par
She stood up from the table and walked to her golf bag and crouched down and unzipped the front pocket and took out her glove and put it on and took it back off again. She had no reason to do this. She did it anyway.\par
\par
Behind her she heard the scrape of a skillet, her mother serving her father his eggs, and then the soft sound of them exchanging some words she couldn't quite make out, and her mother's quiet laugh, and the terrible, leisurely normalcy of it all. It was 6:14.\par
\par
She went out the back door and stood beside the pool. The water was still and dark blue in the early light, and the neighbor's bougainvillea spilled over the fence in a great cascade of orange-pink that was almost violent in its color. She breathed in the morning air, which smelled like canal water and cut grass and the faint diesel memory of some boat that had gone out before dawn. She tried to think about her swing. She'd been working on keeping her right elbow closer to her body on the downswing, something her father had shown her three weeks ago at the range, and she'd had it and then she'd lost it and she wanted to find it again before she was standing over a shot on the first hole.\par
\par
The door opened behind her.\par
\par
"Five minutes," her father said.\par
\par
She turned. He was carrying his coffee cup. Still.\par
\par
"You're bringing that?"\par
\par
"I'm finishing it."\par
\par
"In the truck."\par
\par
"In the truck," he agreed, and something in his tone told her he'd been planning to leave at six-thirty all along and had simply declined to tell her, because he found her impatience amusing and saw no reason to relieve it prematurely. This was, she knew, a form of love. It did not feel like one.\par
\par
She picked up her bag and went through the house to the garage without waiting for him.\par
\par
---\par
\par
They drove north on Federal Highway with the windows down, her father's coffee cup sitting in the holder between them, still half full. The morning was already warm the way South Florida mornings were in late May, the air thick and sweetly humid, and the palm trees along the road were motionless in the stillness before the sea breeze came up. Ella sat with her left knee bouncing and her arm out the window.\par
\par
"You need to stop rushing the range," her father said.\par
\par
"I don't rush the range."\par
\par
"You rush the range. You go too fast and you don't let the feelings settle. You hit twelve balls when you should hit eight."\par
\par
"Bobby hits fifty balls."\par
\par
"Bobby's habits are Bobby's business."\par
\par
She looked out the window. A sprinkler system was running in the parking lot of a strip mall, arching water across the empty asphalt for no apparent reason. "I just want to be ready," she said.\par
\par
"You're already ready. You've been ready since you woke up." He glanced at her. "Probably since last night."\par
\par
She didn't say anything.\par
\par
"How long have we been doing this?" he said.\par
\par
"Since I was six."\par
\par
"And have I ever not gotten you to the course in time for a proper warm-up?"\par
\par
She thought about it longer than he deserved to wait. "No."\par
\par
"Okay then."\par
\par
She let her knee stop bouncing. He reached over without looking and turned on the radio, and they drove the rest of the way with the windows down and the warm air coming in and a country station playing low enough that it was almost just texture rather than sound.\par
\par
---\par
\par
The parking lot at Pompano Beach Golf Course was mostly empty when they pulled in, only a handful of cars clustered near the clubhouse entrance. Ella had her door open before the truck stopped rolling, which earned her a single patient look from her father that she ignored. She shouldered her bag and walked fast toward the entrance, her spikes clicking on the asphalt.\par
\par
Through the glass door she could see Bobby Carpenter already inside, sitting on the bench beside the pro shop counter with his arms folded, his own bag leaning against the wall beside him. He was wearing a Pompano Beach Golf hat and a green shirt, and when he saw her come through the door he made a show of checking his watch.\par
\par
"Six-forty-five," he said. "I've been here since six-forty."\par
\par
"Then you've had five minutes to contemplate your many swing flaws," Ella said, going directly to the counter.\par
\par
"My swing flaws." Bobby unfolded his arms and stood up. "You're the one who started blocking it right under pressure last month. What was that on sixteen at the district qualifier?"\par
\par
"That was the wind." She slid her father's credit card across the counter to the young man working the register. "Two, on the Pines. Hayes."\par
\par
"That was not the wind," Bobby said. "There was no wind."\par
\par
"There was some wind."\par
\par
"There was no wind, Ella."\par
\par
"Good morning to you too, Bobby," her father said, coming through the door behind her, carrying nothing, having left both his golf bag and his apparently now-finished coffee in the truck.\par
\par
Bobby grinned and shook Andy's hand. "Morning, Mr. Hayes. I've been telling Ella I've been here since six-forty."\par
\par
"I know," her father said. "She mentioned it."\par
\par
"I didn't mention it," Ella said, signing the receipt and taking the card back. "I acknowledged it. There's a difference." She picked up her scorecard from the counter and turned toward the door that led to the range. "We have nineteen minutes. I'm going to go use them."\par
\par
Her father looked at Bobby and Bobby looked at her father and some small communication passed between them that she caught only from the corner of her eye and chose to ignore entirely.\par
\par
She pushed through the door into the morning light, already thinking about her elbow.
}

View File

@@ -0,0 +1 @@
Bobby Carpenters father. A very fine golfer who has been Bobbys principal instructor. He is an auto mechanic at a Pompano Beach shop. He met Andy when Ella and Bobby were 13.

View File

@@ -0,0 +1,133 @@
{\rtf1\ansi\deff0{\fonttbl{\f0\fnil Helvetica;}}
\f0\fs24 The kitchen clock read 5:47 when Ella came downstairs, her golf shoes already on her feet, bag propped against the wall by the garage door. She'd been awake since five, lying in bed listening to the mockingbirds outside her window, running through her swing in her mind the way her father had taught her to do. First weekend of summer. Thirty-six holes ahead of her. She could hardly stand it.\par
\par
Her mother was at the stove, sliding eggs onto a plate without being asked, because Elikapeka Hayes always knew what her daughters needed before they knew themselves.\par
\par
"Sit," her mother said.\par
\par
Ella sat, but only on the edge of the chair.\par
\par
She ate quickly, cleaned her plate, drank her orange juice in three swallows, and carried everything to the sink. It was 6:02. Their tee time was 7:24. Pompano Beach was twelve minutes away, maybe fifteen with the light on Sample Road. She wanted forty-five minutes on the range, minimum. That left them needing to leave the house no later than six-thirty, and even that was cutting it closer than she liked.\par
\par
She stood at the bottom of the stairs and listened. Upstairs, her sisters were still asleep. She could hear the particular silence of rooms full of sleeping people. And from the direction of the master bedroom she heard the low murmur of the television her father turned on every morning while he dressed, and she knew from long experience that the television was a bad sign. The television meant he was not rushing.\par
\par
She went back to the kitchen and sat down again, this time not even pretending to be relaxed.\par
\par
Her father came downstairs at 6:09 in his golf shirt and khaki shorts, his hair still damp, and went directly to the coffee maker. He poured a cup and leaned against the counter and looked out the window at the canal, where the first light was going silver and pink across the water. The sailboat in their dock shifted almost imperceptibly against its lines.\par
\par
"Morning," he said.\par
\par
"We need to leave at six-thirty," Ella said.\par
\par
"Morning, Ella."\par
\par
She exhaled through her nose. "Good morning. We need to leave at six-thirty."\par
\par
Her father smiled at his coffee cup, and that smile\u8212?patient, unhurried, the smile of a man who had been doing this for thirty years and believed there was very little in life that required actual rushing\u8212?made her want to tip the cup out of his hand.\par
\par
"Bobby's probably already there," she said.\par
\par
"Bobby can wait."\par
\par
"Bobby doesn't like to wait. Neither do I."\par
\par
"Then Bobby and you are well matched." He sipped his coffee. "Your mother made eggs?"\par
\par
"There's some in the pan. Dad. We need a good warm-up. I need a good warm-up. You can hit six balls and walk to the first tee, but I need time on the range."\par
\par
"You'll have time on the range."\par
\par
"Not if we leave at seven."\par
\par
"I didn't say we were leaving at seven."\par
\par
"You're on your first cup."\par
\par
He looked at her over the rim of the mug. "This is my second cup."\par
\par
She stood up from the table and walked to her golf bag and crouched down and unzipped the front pocket and took out her glove and put it on and took it back off again. She had no reason to do this. She did it anyway.\par
\par
Behind her she heard the scrape of a skillet, her mother serving her father his eggs, and then the soft sound of them exchanging some words she couldn't quite make out, and her mother's quiet laugh, and the terrible, leisurely normalcy of it all. It was 6:14.\par
\par
She went out the back door and stood beside the pool. The water was still and dark blue in the early light, and the neighbor's bougainvillea spilled over the fence in a great cascade of orange-pink that was almost violent in its color. She breathed in the morning air, which smelled like canal water and cut grass and the faint diesel memory of some boat that had gone out before dawn. She tried to think about her swing. She'd been working on keeping her right elbow closer to her body on the downswing, something her father had shown her three weeks ago at the range, and she'd had it and then she'd lost it and she wanted to find it again before she was standing over a shot on the first hole.\par
\par
The door opened behind her.\par
\par
"Five minutes," her father said.\par
\par
She turned. He was carrying his coffee cup. Still.\par
\par
"You're bringing that?"\par
\par
"I'm finishing it."\par
\par
"In the truck."\par
\par
"In the truck," he agreed, and something in his tone told her he'd been planning to leave at six-thirty all along and had simply declined to tell her, because he found her impatience amusing and saw no reason to relieve it prematurely. This was, she knew, a form of love. It did not feel like one.\par
\par
She picked up her bag and went through the house to the garage without waiting for him.\par
\par
---\par
\par
They drove north on Federal Highway with the windows down, her father's coffee cup sitting in the holder between them, still half full. The morning was already warm the way South Florida mornings were in late May, the air thick and sweetly humid, and the palm trees along the road were motionless in the stillness before the sea breeze came up. Ella sat with her left knee bouncing and her arm out the window.\par
\par
"You need to stop rushing the range," her father said.\par
\par
"I don't rush the range."\par
\par
"You rush the range. You go too fast and you don't let the feelings settle. You hit twelve balls when you should hit eight."\par
\par
"Bobby hits fifty balls."\par
\par
"Bobby's habits are Bobby's business."\par
\par
She looked out the window. A sprinkler system was running in the parking lot of a strip mall, arching water across the empty asphalt for no apparent reason. "I just want to be ready," she said.\par
\par
"You're already ready. You've been ready since you woke up." He glanced at her. "Probably since last night."\par
\par
She didn't say anything.\par
\par
"How long have we been doing this?" he said.\par
\par
"Since I was four."\par
\par
"And have I ever not gotten you to the course in time for a proper warm-up?"\par
\par
She thought about it longer than he deserved to wait. "No."\par
\par
"Okay then."\par
\par
She let her knee stop bouncing. He reached over without looking and turned on the radio, and they drove the rest of the way with the windows down and the warm air coming in and a country station playing low enough that it was almost just texture rather than sound.\par
\par
---\par
\par
The parking lot at Pompano Beach Golf Course was mostly empty when they pulled in, only a handful of cars clustered near the clubhouse entrance. Ella had her door open before the truck stopped rolling, which earned her a single patient look from her father that she ignored. She shouldered her bag and walked fast toward the entrance, her spikes clicking on the asphalt.\par
\par
Through the glass door she could see Bobby Carpenter already inside, sitting on the bench beside the pro shop counter with his arms folded, his own bag leaning against the wall beside him. He was wearing a Pompano Beach Golf hat and a green shirt, and when he saw her come through the door he made a show of checking his watch.\par
\par
"Seven-oh-four," he said. "I've been here since six-forty."\par
\par
"Then you've had twenty-four minutes to contemplate your many swing flaws," Ella said, going directly to the counter.\par
\par
"My swing flaws." Bobby unfolded his arms and stood up. "You're the one who started blocking it right under pressure last month. What was that on sixteen at the district qualifier?"\par
\par
"That was the wind." She slid her father's credit card across the counter to the young man working the register. "Two, on the Pines. Hayes."\par
\par
"That was not the wind," Bobby said. "There was no wind."\par
\par
"There was some wind."\par
\par
"There was no wind, Ella."\par
\par
"Good morning to you too, Bobby," her father said, coming through the door behind her, carrying nothing, having left both his golf bag and his apparently now-finished coffee in the truck.\par
\par
Bobby grinned and shook Andy's hand. "Morning, Mr. Hayes. I've been telling Ella I've been here since six-forty."\par
\par
"I know," her father said. "She mentioned it."\par
\par
"I didn't mention it," Ella said, signing the receipt and taking the card back. "I acknowledged it. There's a difference." She picked up her scorecard from the counter and turned toward the door that led to the range. "We have nineteen minutes. I'm going to go use them."\par
\par
Her father looked at Bobby and Bobby looked at her father and some small communication passed between them that she caught only from the corner of her eye and chose to ignore entirely.\par
\par
She pushed through the door into the morning light, already thinking about her elbow.
}

View File

@@ -0,0 +1,49 @@
{\rtf1\ansi\deff0{\fonttbl{\f0\fnil Helvetica;}}
\f0\fs24 Scene: Scene 1\par
Model: anthropic/claude-sonnet-4.6\par
Accepted for editing: 2026-08-23T15:38:56-05:00\par
\par
### STYLE\par
The style of the novel is in the style but not substance of Ken Follett. Each scene is in third person from the perspective of one of the characters.\par
\par
### LEXICON\par
(none)\par
\par
### STORY\par
(none - new storyline)\par
\par
### CHARACTERS\par
Andy Hayes\par
Father and husband. Manages the team at American Airlines out of the Fort Lauderdale Airport that services its jets. Is a union member with nearly 30 years of experience. Scratch golfer. Large extended family, two brothers and a sister live nearby. Tall and handsome and very attractive to women in general. A leader of men.\par
\par
Elikapeka Hayes\par
Wife of Andy Hayes, of Hawaiian origin. Stay at home mom. (eh-lee-la-PEH-ka)\par
\par
Ella Hayes\par
Oldest daughter. To be a high school senior. Highly skilled golfer looking for a college golf scholarship. Tall, haughty, proud, smart. Prefers male friends to female friends. Has never dated and rarely attends parties or after school activities other than golf. Taught golf primarily by her father, a scratch golfer. Daddy\u8217?s girl. Usually impatient with others and likes to play fast.\par
\par
Alex Carpenter\par
\par
### RECALL\par
(none)\par
\par
### PREVIOUS\par
(none)\par
\par
### NOTES\par
Hayes house \u8212? The Hayes family lives in a two story house built in the 1960s on a deep water canal (meaning, the canal can be used for boats going out to the Atlantic ocean). The house has a boat dock, rented out to a friend who has a fifty foot sailboat. The house has a small pool in the backyard which is often used by the family for gatherings.\par
Pompano Beach Golf Course \u8212? A frequently played course with Andy and Ella. Two eighteen hole courses, the shorter and easier Palms course and the longer and harder Pines course.\par
It is late May, 2000. No one has cell phones yet.\par
\par
### BRIEF\par
The first scene of the book is told in third person from the viewpoint of Ella Hayes. It is the first weekend after the end of Ella\u8217?s junior year in high school. She\u8217?s a skilled golfer and has been taught to play from a very young age by her father. It\u8217?s Saturday, and like most Saturdays, she\u8217?s planning to play 36 holes of golf with her father. On this Saturday, they will be joined by a father who teaches his son in the same way that Andy teaches Ella. Ella and the boy, Bobby, are on their high school golf team, both are the best golfers on the team. There is no romantic interest between Ella and the boy; they are friends but their relationship is mostly just a shared interest in golf.\par
It\u8217?s early on Saturday morning, more than an hour before their tee time, and Ella is anxious to get to the course. They have the first tee time at 7:24AM, as both Ella and her friend Bobby like to play fast, and the best way to play fast is to be first on the course, dew sweepers, they are often called. Her father is dawdling over a second cup of coffee. Ella likes a long warmup, whereas her father usually hits a few wedges and a few drives and is good to go. There is always tension between her and her father to get him going.\par
The other daughters aren\u8217?t even up yet and Ella has finished her breakfast that her mother prepared and is ready to go. She dearly loves her father but wants him to get off his butt and go to the course RIGHT NOW!\par
At last they leave the house, their clubs in the back of Andy\u8217?s old pickup truck. They arrive at Pompano Beach Golf club and she finds her friend Bobby already having paid and waiting for her inside. She pays for herself and her father with his credit card. They exchange some snarky comments and then proceed to the range to warm up.\par
\par
### DIRECTIVE\par
Expand this scene to a maximum of 1500 words and don't exceed the BRIEF. Keep the dialog tense until they arrive at the golf course.\par
\par
### SCENE\par
}

View File

@@ -1,11 +1,14 @@
0a7edd9f-9de0-4cc9-9ac1-ee0e3769b6a8/content.rtf=96d19be907958c354e28b23fbd0b3b812c9b543e
65b9d928-3c90-4881-8eb1-4432a9aac239/content.rtf=61d0596ef0d9a9a11bc2d468b5614de9cf98755c
bb58390b-789c-47ee-ac09-76bf4c56bac3/content.rtf=cbaa0f32f56543162e8759c58f766859a8028ad1
f03d5899-c5fb-43bb-90a7-611e9dcdd98c/content.rtf=4c75f04439645b4c5ea1a425b43e43ae97a330fa
be948f87-bda3-4551-8e08-ac248fe89301/content.rtf=4647512ac47b4ac64b4f14b257f28cc32eaf6892
a702733c-4f4d-4473-978e-57b27d437994/content.rtf=d1eb0409d165723160360ccaee4661033e5bf70f
89a17e85-1e81-4fae-b8c8-1a5a02f3ef2c/content.rtf=0562de5151b3bbe9e2107c335cf05fe7f5d72e2f
5d497aff-b4c1-419d-ab82-ddeff79216a4/content.rtf=4d60ae1b2d85a924dffa6e3e0a7c9d8d8e76aa44
6c6d3495-3c6f-48d0-9092-da0760f7b31c/content.rtf=219e981a23e68956ce2002db56c40fd61cfc29f2
48857498-4c8a-4481-bdf8-72a80ef2a7b8/content.rtf=6d78af7acc6e1ac7d387e074e4bbf0bca1bb428d
8a80cb1d-a4bc-4865-8b51-d6efbc6e3936/content.rtf=fd6d330c22c4f78b7456a5492896ffb626feff7f
48857498-4c8a-4481-bdf8-72a80ef2a7b8/content.rtf=3b0f3f35828daa16abdd8530434e95563b008436
816f6b00-8d2a-4022-87a4-d35170d81bea/content.rtf=74c001fb2d64097dcaf2511116a23b55b5d0d767
1b8b3dfd-9cdf-4442-8a72-69e87dd3a8c3/content.rtf=cd84b94da54e7f905282e9dea16a500de1712aaa
bffeeb84-9e04-41ee-b083-5092d160adf3/content.rtf=a44bf7f7d3b9d91eed0dd7a47d742a279838a0b8
@@ -15,12 +18,14 @@ bffeeb84-9e04-41ee-b083-5092d160adf3/content.rtf=a44bf7f7d3b9d91eed0dd7a47d742a2
538fbf3e-89b8-4b08-a141-6d3cfea1a160/content.rtf=4cf333db1ba131a48d5b60f5c44937d2710cc513
852be723-c4d1-48b4-a03b-09803019acaa/content.rtf=f224bc50980ed1c463a7943feafc70548f17dee1
ef0ca641-e954-495f-b7c3-855373c86798/content.rtf=77fc0af3696432772f79bfc242ce33550c2fe144
75f58e24-e4ee-4163-a6b3-7703d8d211bd/synopsis.txt=b39c765ec768ac63cccf49aff4f75e5d33f652c0
87d59b4e-f1d6-4025-9fba-33f60ed8f985/content.rtf=ccaecb8c11002a8d92369c58613c2230e091d889
94746390-723e-4468-886b-19da063eef84/content.rtf=196ea32c5e92bd2052930d5c07315bfd67e145a9
21506607-96ca-4fb1-8b5f-a1859f4dcede/content.rtf=3d21fdd3c1c3d36c750303e6a3c7cf6ebd3ba894
21506607-96ca-4fb1-8b5f-a1859f4dcede/notes.rtf=a0df2292fefaef5f86a41f0d9e56aa388133ec3d
332dad85-2636-46a0-8336-d2aeaedf8241/content.rtf=904eb53143093244a6b9e095e2ce2d38f0f2bd24
332dad85-2636-46a0-8336-d2aeaedf8241/synopsis.txt=eed22cd901f7bee338ebeefe1d267d1a28b3ff42
71bfc455-f771-4342-a500-9c58bc55537b/content.rtf=96d19be907958c354e28b23fbd0b3b812c9b543e
486d874a-7589-4c1e-bece-40b465746ba1/content.rtf=72a8d9064c6a1a57ad5f2de483fc1e0a7c79bfd8
486d874a-7589-4c1e-bece-40b465746ba1/notes.rtf=69140bc222a75ab27bc2929b48378cdb7c57daa0
2d6e4fbe-1689-4aa3-90a2-3ea6acbebf7b/content.rtf=120e81b59b617e38af877d1fa153a67a3e51af82

View File

@@ -0,0 +1,45 @@
65b9d928-3c90-4881-8eb1-4432a9aac239/content.rtf=61d0596ef0d9a9a11bc2d468b5614de9cf98755c
bb58390b-789c-47ee-ac09-76bf4c56bac3/content.rtf=cbaa0f32f56543162e8759c58f766859a8028ad1
f03d5899-c5fb-43bb-90a7-611e9dcdd98c/content.rtf=4c75f04439645b4c5ea1a425b43e43ae97a330fa
be948f87-bda3-4551-8e08-ac248fe89301/content.rtf=4647512ac47b4ac64b4f14b257f28cc32eaf6892
a702733c-4f4d-4473-978e-57b27d437994/content.rtf=d1eb0409d165723160360ccaee4661033e5bf70f
5d497aff-b4c1-419d-ab82-ddeff79216a4/content.rtf=4d60ae1b2d85a924dffa6e3e0a7c9d8d8e76aa44
6c6d3495-3c6f-48d0-9092-da0760f7b31c/content.rtf=219e981a23e68956ce2002db56c40fd61cfc29f2
48857498-4c8a-4481-bdf8-72a80ef2a7b8/content.rtf=3b0f3f35828daa16abdd8530434e95563b008436
816f6b00-8d2a-4022-87a4-d35170d81bea/content.rtf=74c001fb2d64097dcaf2511116a23b55b5d0d767
1b8b3dfd-9cdf-4442-8a72-69e87dd3a8c3/content.rtf=cd84b94da54e7f905282e9dea16a500de1712aaa
bffeeb84-9e04-41ee-b083-5092d160adf3/content.rtf=a44bf7f7d3b9d91eed0dd7a47d742a279838a0b8
98ea5cef-b7b1-468c-83cd-9ab24afafdf3/content.rtf=aee7b2a66a9774ce5af7e8403dc66145fd89839b
98ea5cef-b7b1-468c-83cd-9ab24afafdf3/notes.rtf=4bf82c6fa900431a3f3def289350cfffe98559e9
57ecc98d-8199-4935-b5f1-d1f7a2d60646/notes.rtf=8262727d3d6d4961220d1acc0c2b9ed70dde5365
538fbf3e-89b8-4b08-a141-6d3cfea1a160/content.rtf=4cf333db1ba131a48d5b60f5c44937d2710cc513
852be723-c4d1-48b4-a03b-09803019acaa/content.rtf=f224bc50980ed1c463a7943feafc70548f17dee1
ef0ca641-e954-495f-b7c3-855373c86798/content.rtf=77fc0af3696432772f79bfc242ce33550c2fe144
75f58e24-e4ee-4163-a6b3-7703d8d211bd/synopsis.txt=b39c765ec768ac63cccf49aff4f75e5d33f652c0
87d59b4e-f1d6-4025-9fba-33f60ed8f985/content.rtf=ccaecb8c11002a8d92369c58613c2230e091d889
94746390-723e-4468-886b-19da063eef84/content.rtf=196ea32c5e92bd2052930d5c07315bfd67e145a9
21506607-96ca-4fb1-8b5f-a1859f4dcede/content.rtf=3d21fdd3c1c3d36c750303e6a3c7cf6ebd3ba894
21506607-96ca-4fb1-8b5f-a1859f4dcede/notes.rtf=a0df2292fefaef5f86a41f0d9e56aa388133ec3d
332dad85-2636-46a0-8336-d2aeaedf8241/content.rtf=904eb53143093244a6b9e095e2ce2d38f0f2bd24
332dad85-2636-46a0-8336-d2aeaedf8241/synopsis.txt=eed22cd901f7bee338ebeefe1d267d1a28b3ff42
486d874a-7589-4c1e-bece-40b465746ba1/content.rtf=72a8d9064c6a1a57ad5f2de483fc1e0a7c79bfd8
486d874a-7589-4c1e-bece-40b465746ba1/notes.rtf=69140bc222a75ab27bc2929b48378cdb7c57daa0
2d6e4fbe-1689-4aa3-90a2-3ea6acbebf7b/content.rtf=120e81b59b617e38af877d1fa153a67a3e51af82
eaed9f93-2779-4184-82e8-30d27307c6ac/content.rtf=01ec0ba75ed4dccd305b8ff371ebb1090fbb77f8
eaed9f93-2779-4184-82e8-30d27307c6ac/notes.rtf=97779e74d3c8ec43c1ed427e5e8f070d935f29d2
1f883d3f-67e3-4124-925d-b010fe4743f6/content.rtf=5ae88acdb6dd468894996cc1819a5e3edebebc3a
6981ef8d-41bf-4888-a3a2-b79b0cb8c449/content.rtf=d4a89b087fc35731ceaeaa5b64cd90f5a4086bcf
f0c8e175-ca44-4dd7-abc7-c2c204973a32/content.rtf=99411557101a0afe2c15aa0fb5d5500f7f924fc2
874592f5-2256-46a1-8434-432743846fb8/content.rtf=bff5a2c79311a3ee2f7c2a059973c8e9cbf1517b
874592f5-2256-46a1-8434-432743846fb8/notes.rtf=4bf82c6fa900431a3f3def289350cfffe98559e9
e74f7ccb-e2ba-421b-814d-2ee6da983324/content.rtf=51299f912d73b4266e103643032e7786de630fe4
deb6ae02-b51b-4c55-9e61-d08d32babba1/content.rtf=5c8783930b61307f4f52ffcf12303eed4c1879b2
684ada52-4d45-48d2-b03d-5ecb784963ee/content.rtf=0f22664a222947c168fffbf682f27cdc7b0901b6
684ada52-4d45-48d2-b03d-5ecb784963ee/notes.rtf=64e1f682f4aeeabe21591351ed616cec855b7372
684ada52-4d45-48d2-b03d-5ecb784963ee/synopsis.txt=b10607ccc99f8ddbc1e078e8c4acb271e82625b9
dc6bc0ef-f4ce-4303-99ad-ca12671b9092/content.rtf=7cca5b7cb208e0c10548362f7fd1246d548c9b11
091ee601-91db-497c-a646-b094624414de/content.rtf=edbc63099a3b9a29220a854328b05a29f113733c
8a0e75e6-1b75-42f3-982b-a8b02f762bb4/content.rtf=1b744fa443b9f8e8c2510197d7cb92bf5b65381f
fe16770d-d7b7-48ec-aeff-e1c0787e8d95/content.rtf=6677910b5ba35082801f49a50c163bbf61cc7529
e3cfecab-7099-48b5-b971-1a6b12d220b3/content.rtf=f15ec2e806ae062000cdb208706787340b2b4831
f8f9fdef-fd9f-4a8c-b33d-3434a1220adc/content.rtf=d25c7c8f1a9ab7905c2b3912d9e9fe0f718a3dc3

View File

@@ -0,0 +1,775 @@
<?xml version="1.0" encoding="UTF-8"?>
<ScrivenerProject Identifier="0D5B5BAF-DC5E-4C26-B13C-F74EFAC04B5A" Version="2.0" Creator="SCRMAC-3.5.2-17486" Device="MacBookAirPro" Author="" Modified="2026-08-23 15:27:14 -0500" ModID="C41436AE-93FE-4764-8C18-EC2278638057">
<Binder>
<BinderItem UUID="F8F9FDEF-FD9F-4A8C-B33D-3434A1220ADC" Type="Text" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Novel Format</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
<IconFileName>Information</IconFileName>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="4A1D6B18-0952-42EB-A487-D17915DD3BA1" Type="DraftFolder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Manuscript</Title>
<Children>
<BinderItem UUID="FD75AC3C-F304-4EA6-ADCC-2C32D6589969" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Chapter 1</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<Children>
<BinderItem UUID="0A7EDD9F-9DE0-4CC9-9AC1-EE0E3769B6A8" Type="Text" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Scene 1</Title>
<MetaData>
<StatusID>2</StatusID>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="D902398C-3F4F-45B0-AA3B-A3B52C3068E7" Type="Text" Created="2026-08-23 13:36:27 -0500" Modified="2026-08-23 13:36:31 -0500">
<Title>Scene 2</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="127727FA-D849-4358-9609-796F48452CAD" Type="Text" Created="2026-08-23 13:36:43 -0500" Modified="2026-08-23 13:36:47 -0500">
<Title>Scene 3</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="C130B142-A927-4984-BBC7-8E659C6FEECB" Type="Text" Created="2026-08-23 13:36:52 -0500" Modified="2026-08-23 13:36:56 -0500">
<Title>Scene 4</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
</Children>
</BinderItem>
<BinderItem UUID="95B3F4C0-9670-469A-A840-AE0D1B9B95DA" Type="Folder" Created="2026-08-23 13:37:19 -0500" Modified="2026-08-23 13:37:24 -0500">
<Title>Chapter 2</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<CorkboardAndOutliner>
<SelectedSubdocumentUUIDs>4BABE4D4-4FFA-4EA2-9C68-A7881D22E7C2</SelectedSubdocumentUUIDs>
</CorkboardAndOutliner>
<Children>
<BinderItem UUID="8D7B879B-BE92-4743-9894-586435A29CBD" Type="Text" Created="2026-08-23 13:37:30 -0500" Modified="2026-08-23 13:37:35 -0500">
<Title>Scene 5</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="F6256C83-C65A-4788-B1B5-48B11C08B366" Type="Text" Created="2026-08-23 13:37:45 -0500" Modified="2026-08-23 13:37:50 -0500">
<Title>Scene 6</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="4BABE4D4-4FFA-4EA2-9C68-A7881D22E7C2" Type="Text" Created="2026-08-23 13:37:57 -0500" Modified="2026-08-23 13:38:02 -0500">
<Title>Scene 7</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
</Children>
</BinderItem>
<BinderItem UUID="E6227DA1-9FBA-4C81-A40A-AED871C690B5" Type="Folder" Created="2026-08-23 13:38:11 -0500" Modified="2026-08-23 13:38:16 -0500">
<Title>Chapter 3</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<Children>
<BinderItem UUID="3D39ED0A-BE69-4CD9-BDFE-A38982FE786D" Type="Text" Created="2026-08-23 13:38:22 -0500" Modified="2026-08-23 13:38:28 -0500">
<Title>Scene 8</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="05483EB0-9E5F-4036-800A-CBBF1D864798" Type="Text" Created="2026-08-23 13:38:32 -0500" Modified="2026-08-23 13:38:37 -0500">
<Title>Scene 9</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="B431AF65-6D4F-47FE-B45D-864F595FA847" Type="Text" Created="2026-08-23 13:38:41 -0500" Modified="2026-08-23 13:38:46 -0500">
<Title>Scene 10</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="84D83F82-E587-42CC-8FAE-9778C0321FC6" Type="Text" Created="2026-08-23 13:38:50 -0500" Modified="2026-08-23 13:38:54 -0500">
<Title>Scene 11</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
</Children>
</BinderItem>
</Children>
</BinderItem>
<BinderItem UUID="8BAC4977-6C2A-4279-BF9C-7AC3C44FE081" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Authoring System</Title>
<MetaData>
<IconFileName>Notes (Yellow Notepad)</IconFileName>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<Children>
<BinderItem UUID="5B9C6846-E2EE-4246-9ADE-BB1404D6F92E" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Book Setup</Title>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<Children>
<BinderItem UUID="48857498-4C8A-4481-BDF8-72A80EF2A7B8" Type="Text" Created="2026-04-03 17:59:21 -0500" Modified="2026-08-23 13:49:18 -0500">
<Title>Frontier-Model Instructions</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>398,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="BB58390B-789C-47EE-AC09-76BF4C56BAC3" Type="Text" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 13:34:24 -0500">
<Title>STYLE</Title>
<TextSettings>
<TextSelection>149,0</TextSelection>
</TextSettings>
</BinderItem>
</Children>
</BinderItem>
<BinderItem UUID="85F4A0C5-5AAE-4FA0-A975-F1936BFBFD03" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Scene Briefs</Title>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<CorkboardAndOutliner>
<SelectedSubdocumentUUIDs>1F883D3F-67E3-4124-925D-B010FE4743F6,A702733C-4F4D-4473-978E-57B27D437994,538FBF3E-89B8-4B08-A141-6D3CFEA1A160,E3CFECAB-7099-48B5-B971-1A6B12D220B3,6C6D3495-3C6F-48D0-9092-DA0760F7B31C,1B8B3DFD-9CDF-4442-8A72-69E87DD3A8C3,6981EF8D-41BF-4888-A3A2-B79B0CB8C449,8A0E75E6-1B75-42F3-982B-A8B02F762BB4,65B9D928-3C90-4881-8EB1-4432A9AAC239,EF0CA641-E954-495F-B7C3-855373C86798,E74F7CCB-E2BA-421B-814D-2EE6DA983324</SelectedSubdocumentUUIDs>
</CorkboardAndOutliner>
<Children>
<BinderItem UUID="1F883D3F-67E3-4124-925D-B010FE4743F6" Type="Text" Created="2026-04-03 18:30:49 -0500" Modified="2026-08-23 15:11:48 -0500">
<Title>Scene 1</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>1776,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="A702733C-4F4D-4473-978E-57B27D437994" Type="Text" Created="2026-04-03 19:14:00 -0500" Modified="2026-04-03 19:43:40 -0500">
<Title>Scene 2</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>74,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="538FBF3E-89B8-4B08-A141-6D3CFEA1A160" Type="Text" Created="2026-04-04 11:12:54 -0500" Modified="2026-04-04 11:32:01 -0500">
<Title>Scene 3</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>1291,86</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="E3CFECAB-7099-48B5-B971-1A6B12D220B3" Type="Text" Created="2026-04-04 12:47:19 -0500" Modified="2026-04-04 13:03:01 -0500">
<Title>Scene 4</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>497,27</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="6C6D3495-3C6F-48D0-9092-DA0760F7B31C" Type="Text" Created="2026-04-04 13:32:09 -0500" Modified="2026-04-04 13:48:28 -0500">
<Title>Scene 5</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>1452,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="1B8B3DFD-9CDF-4442-8A72-69E87DD3A8C3" Type="Text" Created="2026-04-04 14:27:37 -0500" Modified="2026-04-04 14:47:59 -0500">
<Title>Scene 6</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>1638,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="6981EF8D-41BF-4888-A3A2-B79B0CB8C449" Type="Text" Created="2026-04-04 15:25:43 -0500" Modified="2026-04-04 15:49:23 -0500">
<Title>Scene 7</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>1215,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="8A0E75E6-1B75-42F3-982B-A8B02F762BB4" Type="Text" Created="2026-04-04 17:29:55 -0500" Modified="2026-04-04 18:26:23 -0500">
<Title>Scene 8</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>486,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="65B9D928-3C90-4881-8EB1-4432A9AAC239" Type="Text" Created="2026-04-04 19:01:56 -0500" Modified="2026-04-04 19:24:21 -0500">
<Title>Scene 9</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>1215,8</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="EF0CA641-E954-495F-B7C3-855373C86798" Type="Text" Created="2026-04-04 20:52:02 -0500" Modified="2026-04-04 21:11:27 -0500">
<Title>Scene 10</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>1767,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="E74F7CCB-E2BA-421B-814D-2EE6DA983324" Type="Text" Created="2026-04-05 09:06:47 -0500" Modified="2026-04-05 09:27:13 -0500">
<Title>Scene 11</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>2042,0</TextSelection>
</TextSettings>
</BinderItem>
</Children>
</BinderItem>
<BinderItem UUID="145B9A0D-08D6-4E0F-89B1-49EAA14B2106" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Continuity</Title>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<Children>
<BinderItem UUID="5D497AFF-B4C1-419D-AB82-DDEFF79216A4" Type="Text" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Master Lexicon</Title>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="704B2523-B066-4E3B-972C-0B81FA07D310" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Scene Summaries</Title>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<Children>
<BinderItem UUID="2D6E4FBE-1689-4AA3-90A2-3EA6ACBEBF7B" Type="Text" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Scene 1</Title>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
</Children>
</BinderItem>
<BinderItem UUID="2D333B25-F936-4AC6-B437-230D6F27887C" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Narrative Threads</Title>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="852BE723-C4D1-48B4-A03B-09803019ACAA" Type="Text" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>World Notes</Title>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
</Children>
</BinderItem>
<BinderItem UUID="CA829068-0EB8-4892-B3BB-2065A359FF97" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Drafting Archive</Title>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<Children>
<BinderItem UUID="D8E0BA08-72CE-48A9-94D9-3C9BDDA05921" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Accepted for Editing</Title>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="797DEF08-26BF-411A-907B-0CF985D5900F" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Package Snapshots</Title>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="8F25EFC9-F067-4749-A5C5-7D4DEE99356D" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Superseded &amp; Branches</Title>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
</Children>
</BinderItem>
</Children>
</BinderItem>
<BinderItem UUID="06C0455C-36DD-4F38-BB7B-F7DD2453A8A5" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Characters</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
<IconFileName>Characters (Photo)</IconFileName>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<CorkboardAndOutliner>
<SelectedSubdocumentUUIDs>75F58E24-E4EE-4163-A6B3-7703D8D211BD</SelectedSubdocumentUUIDs>
</CorkboardAndOutliner>
<DefaultChildTemplateUUID>BE948F87-BDA3-4551-8E08-AC248FE89301</DefaultChildTemplateUUID>
<Children>
<BinderItem UUID="DEB6AE02-B51B-4C55-9E61-D08D32BABBA1" Type="Text" Created="2026-04-02 20:40:55 -0500" Modified="2026-08-23 13:33:04 -0500">
<Title>Andy Hayes</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>324,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="DC6BC0EF-F4CE-4303-99AD-CA12671B9092" Type="Text" Created="2026-04-02 20:42:52 -0500" Modified="2026-04-02 20:50:31 -0500">
<Title>Elikapeka Hayes</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>76,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="BFFEEB84-9E04-41EE-B083-5092D160ADF3" Type="Text" Created="2026-04-02 20:47:39 -0500" Modified="2026-04-04 12:45:43 -0500">
<Title>Ella Hayes</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>191,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="F03D5899-C5FB-43BB-90A7-611E9DCDD98C" Type="Text" Created="2026-04-02 20:48:10 -0500" Modified="2026-08-23 13:30:40 -0500">
<Title>Emma Hayes</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>211,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="091EE601-91DB-497C-A646-B094624414DE" Type="Text" Created="2026-04-02 20:48:30 -0500" Modified="2026-08-23 13:32:09 -0500">
<Title>Elizabeth (Lizzie) Hayes</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>150,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="FE16770D-D7B7-48EC-AEFF-E1C0787E8D95" Type="Text" Created="2026-04-04 17:15:58 -0500" Modified="2026-08-23 13:31:40 -0500">
<Title>Bobby Carpenter</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>92,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="332DAD85-2636-46A0-8336-D2AEAEDF8241" Type="Text" Created="2026-04-04 17:19:59 -0500" Modified="2026-08-23 13:29:06 -0500">
<Title>Mai Lin Wen</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>273,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="75F58E24-E4EE-4163-A6B3-7703D8D211BD" Type="Text" Created="2026-08-23 15:25:27 -0500" Modified="2026-08-23 15:27:13 -0500">
<Title>Alex Carpenter</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
</Children>
</BinderItem>
<BinderItem UUID="6830B6AC-686B-4370-A979-2FD1D7288BDA" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Places</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
<IconFileName>Locations (Map)</IconFileName>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<CorkboardAndOutliner>
<SelectedSubdocumentUUIDs>F0C8E175-CA44-4DD7-ABC7-C2C204973A32,94746390-723E-4468-886B-19DA063EEF84</SelectedSubdocumentUUIDs>
</CorkboardAndOutliner>
<DefaultChildTemplateUUID>87D59B4E-F1D6-4025-9FBA-33F60ED8F985</DefaultChildTemplateUUID>
<Children>
<BinderItem UUID="F0C8E175-CA44-4DD7-ABC7-C2C204973A32" Type="Text" Created="2026-04-03 17:01:07 -0500" Modified="2026-04-03 17:58:12 -0500">
<Title>Hayes house</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>334,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="94746390-723E-4468-886B-19DA063EEF84" Type="Text" Created="2026-04-03 17:39:05 -0500" Modified="2026-04-03 17:58:31 -0500">
<Title>Pompano Beach Golf Course</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>149,0</TextSelection>
</TextSettings>
</BinderItem>
</Children>
</BinderItem>
<BinderItem UUID="57ECC98D-8199-4935-B5F1-D1F7A2D60646" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Front Matter</Title>
<MetaData>
<SectionType ChildDefault="F3D99402-96E3-4558-A2BE-FB83286017C8"></SectionType>
<IncludeInCompile>Yes</IncludeInCompile>
<NotesTextSelection>26,0</NotesTextSelection>
<IconFileName>Front Matter</IconFileName>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<Children>
<BinderItem UUID="3E5B46A7-2D74-46C0-9C84-D3D1B9EB378E" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Manuscript Format</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<Children>
<BinderItem UUID="684ADA52-4D45-48D2-B03D-5ECB784963EE" Type="Text" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Title Page</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>118,0</TextSelection>
</TextSettings>
</BinderItem>
</Children>
</BinderItem>
<BinderItem UUID="4D01D8EC-C1C3-427E-88C0-602D9158FC95" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Paperback</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<Children>
<BinderItem UUID="486D874A-7589-4C1E-BECE-40B465746BA1" Type="Text" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Title Page</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="21506607-96CA-4FB1-8B5F-A1859F4DCEDE" Type="Text" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Copyright</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
<NotesTextSelection>82,0</NotesTextSelection>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="874592F5-2256-46A1-8434-432743846FB8" Type="Text" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Dedication</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
<NotesTextSelection>55,0</NotesTextSelection>
</MetaData>
<TextSettings>
<TextSelection>11,23</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="EAED9F93-2779-4184-82E8-30D27307C6AC" Type="Text" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Blank Page</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
<NotesTextSelection>197,0</NotesTextSelection>
</MetaData>
<TextSettings>
<TextSelection>0,13</TextSelection>
</TextSettings>
</BinderItem>
</Children>
</BinderItem>
<BinderItem UUID="4C4363AD-1F58-4140-A55F-DEE1298CA1C4" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Ebook</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<Children>
<BinderItem UUID="C88ACCC3-4FDB-4952-80E1-177623CDE141" Type="Image" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Cover</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
<FileExtension>png</FileExtension>
<ShowSynopsisImage>Yes</ShowSynopsisImage>
</MetaData>
<MediaSettings>
<ImageScaleFactor>1.0</ImageScaleFactor>
<ImageRotation>None</ImageRotation>
<ImageScalesProportionally>Yes</ImageScalesProportionally>
</MediaSettings>
</BinderItem>
<BinderItem UUID="98EA5CEF-B7B1-468C-83CD-9AB24AFAFDF3" Type="Text" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Dedication</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
<NotesTextSelection>55,0</NotesTextSelection>
</MetaData>
<TextSettings>
<TextSelection>5,21</TextSelection>
</TextSettings>
</BinderItem>
</Children>
</BinderItem>
</Children>
</BinderItem>
<BinderItem UUID="69822417-D015-4BDD-90BD-18AAA6198D15" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Notes</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
<IconFileName>Notes (Yellow Notepad)</IconFileName>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="669D7B65-8096-4EFD-A0E2-6BDE8C1E3585" Type="ResearchFolder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Research</Title>
<Children>
<BinderItem UUID="9A470BDE-CF2B-4872-97C6-74F19BC90197" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Sample Output</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<Children>
<BinderItem UUID="A01D76FD-6D6D-4A05-B3D7-72013BF9A630" Type="PDF" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Standard Manuscript</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
<FileExtension>pdf</FileExtension>
</MetaData>
<MediaSettings>
<CurrentPDFPage>0</CurrentPDFPage>
</MediaSettings>
</BinderItem>
<BinderItem UUID="96044A4A-0A94-45BF-888E-01E9664985FF" Type="PDF" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Paperback Novel</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
<FileExtension>pdf</FileExtension>
</MetaData>
<MediaSettings>
<CurrentPDFPage>0</CurrentPDFPage>
</MediaSettings>
</BinderItem>
</Children>
</BinderItem>
</Children>
</BinderItem>
<BinderItem UUID="5C03DE09-C285-48ED-827F-78E62B7D0F72" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Template Sheets</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<Children>
<BinderItem UUID="BE948F87-BDA3-4551-8E08-AC248FE89301" Type="Text" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Character Sketch</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
<ShowSynopsisImage>Yes</ShowSynopsisImage>
<IconFileName>Characters (Character Sheet)</IconFileName>
</MetaData>
<TextSettings>
<TextSelection>0,14</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="87D59B4E-F1D6-4025-9FBA-33F60ED8F985" Type="Text" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Setting Sketch</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
<IconFileName>Locations (Location Sheet)</IconFileName>
</MetaData>
<TextSettings>
<TextSelection>0,15</TextSelection>
</TextSettings>
</BinderItem>
</Children>
</BinderItem>
<BinderItem UUID="F2DF7FDE-46C4-4962-97F3-128A46433573" Type="TrashFolder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Trash</Title>
<Children>
<BinderItem UUID="816F6B00-8D2A-4022-87A4-D35170D81BEA" Type="Text" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Scene 1</Title>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
</Children>
</BinderItem>
</Binder>
<Collections>
<Collection Type="Binder" ID="48DE1CBF-217F-4B94-944D-6D8C97396DCF" Color="0.974804 0.974804 0.974804">
<Title>Binder</Title>
</Collection>
<Collection Type="RecentSearch" ID="2655DDF6-4AB8-42CB-A433-1CD76FC351D2" Color="0.922173 0.818612 0.999627">
<Title>Search Results</Title>
</Collection>
</Collections>
<SectionTypes>
<TypeDefinitions>
<Type ID="D2E24F2F-E4A2-49D0-BACA-26098774C8F9">Part Heading</Type>
<Type ID="417A6CCE-D4E1-44BA-9A8D-038360B4B905">Chapter Heading</Type>
<Type ID="9AFECE21-8C79-45E0-9B9F-D6D62A9729D3">Scene</Type>
<Type ID="5770D705-B9A4-4798-AAB1-B2C56190B02E">Chapter</Type>
<Type ID="DFBFB5B6-D47F-4913-9E23-FC3950C10171">Heading</Type>
<Type ID="4BA429EF-6143-4FB6-9B43-D4E6E4F0CE1D">Section</Type>
<Type ID="F3D99402-96E3-4558-A2BE-FB83286017C8">Front Matter</Type>
<Type ID="235F7C42-10F1-40AB-9FC5-19AA26EABA47">Table of Contents</Type>
<Type ID="EA9C9DBA-B644-4EBB-BDAD-621E5455275A">N/A</Type>
</TypeDefinitions>
<LevelTypes>
<Folders>
<Type>EA9C9DBA-B644-4EBB-BDAD-621E5455275A</Type>
<Type>417A6CCE-D4E1-44BA-9A8D-038360B4B905</Type>
</Folders>
<Containers>
<Type>4BA429EF-6143-4FB6-9B43-D4E6E4F0CE1D</Type>
</Containers>
<Files>
<Type>4BA429EF-6143-4FB6-9B43-D4E6E4F0CE1D</Type>
<Type>4BA429EF-6143-4FB6-9B43-D4E6E4F0CE1D</Type>
<Type>9AFECE21-8C79-45E0-9B9F-D6D62A9729D3</Type>
</Files>
</LevelTypes>
</SectionTypes>
<LabelSettings>
<Title>Label</Title>
<DefaultLabelID>-1</DefaultLabelID>
<Labels>
<Label ID="-1">No Label</Label>
<Label ID="7" Color="0.993495 0.701207 0.732587">Red</Label>
<Label ID="8" Color="0.995418 0.790946 0.652385">Orange</Label>
<Label ID="9" Color="0.997722 0.89273 0.652569">Yellow</Label>
<Label ID="10" Color="0.715855 0.948712 0.697692">Green</Label>
<Label ID="11" Color="0.702319 0.888276 0.974252">Blue</Label>
<Label ID="12" Color="0.957566 0.766747 0.999616">Purple</Label>
</Labels>
</LabelSettings>
<StatusSettings>
<Title>Status</Title>
<DefaultStatusID>-1</DefaultStatusID>
<StatusItems>
<Status ID="-1">No Status</Status>
<Status ID="1">To Do</Status>
<Status ID="6">In Progress</Status>
<Status ID="2">First Draft</Status>
<Status ID="3">Revised Draft</Status>
<Status ID="4">Final Draft</Status>
<Status ID="5">Done</Status>
</StatusItems>
</StatusSettings>
<ProjectBookmarks>
<Bookmark BinderUUID="06C0455C-36DD-4F38-BB7B-F7DD2453A8A5"/>
<Bookmark BinderUUID="6830B6AC-686B-4370-A979-2FD1D7288BDA"/>
<Bookmark BinderUUID="69822417-D015-4BDD-90BD-18AAA6198D15"/>
</ProjectBookmarks>
<ProjectTargets Notify="No">
<DraftTarget Type="Words" CountIncludedOnly="Yes" CurrentCompileGroupOnly="Yes" Deadline="2011-04-12 07:24:39 -0500" IgnoreDeadline="Yes">0</DraftTarget>
<SessionTarget Type="Words" CountDraftOnly="Yes" AllowNegatives="No" NextResetDate="2026-08-24 01:00:00 -0500" ResetType="Time" ResetTime="00:00" DeterminedFromDeadline="No" WritingDays="" CanWriteOnDeadlineDate="No">0</SessionTarget>
<PreviousSession Words="0" Characters="0" Date="2026-08-23 15:25:06 -0500"/>
</ProjectTargets>
<RecentWritingHistory Date="2026-08-23 11:15:20 -0500">
<DraftWordCount>0</DraftWordCount>
<DraftCharCount>0</DraftCharCount>
<OtherWordCount>115</OtherWordCount>
<OtherCharCount>561</OtherCharCount>
</RecentWritingHistory>
<TemplateFolderUUID>5C03DE09-C285-48ED-827F-78E62B7D0F72</TemplateFolderUUID>
<BookmarksFolderUUID>69822417-D015-4BDD-90BD-18AAA6198D15</BookmarksFolderUUID>
<PrintSettings PaperSize="612.0,792.0" LeftMargin="72.0" RightMargin="72.0" TopMargin="90.0" BottomMargin="90.0" PaperType="na-letter" Orientation="Portrait" HorizontalPagination="Clip" VerticalPagination="Auto" ScaleFactor="1.0" HorizontallyCentered="Yes" VerticallyCentered="Yes" Collates="Yes" PagesAcross="1" PagesDown="1"/>
</ScrivenerProject>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0" encoding="UTF-8"?>
<WritingHistory>
<Day dwc="0" dcc="0" owc="65" occ="288">2026-08-23</Day>
<Day dwc="0" dcc="0" owc="115" occ="561">2026-08-23</Day>
</WritingHistory>

View File

@@ -15,6 +15,8 @@
<ItemID>145B9A0D-08D6-4E0F-89B1-49EAA14B2106</ItemID>
<ItemID>704B2523-B066-4E3B-972C-0B81FA07D310</ItemID>
<ItemID>CA829068-0EB8-4892-B3BB-2065A359FF97</ItemID>
<ItemID>D8E0BA08-72CE-48A9-94D9-3C9BDDA05921</ItemID>
<ItemID>797DEF08-26BF-411A-907B-0CF985D5900F</ItemID>
<ItemID>06C0455C-36DD-4F38-BB7B-F7DD2453A8A5</ItemID>
<ItemID>6830B6AC-686B-4370-A979-2FD1D7288BDA</ItemID>
<ItemID>57ECC98D-8199-4935-B5F1-D1F7A2D60646</ItemID>
@@ -23,7 +25,7 @@
<ItemID>9A470BDE-CF2B-4872-97C6-74F19BC90197</ItemID>
</ExpandedItems>
<Selection>
<ItemID>48857498-4C8A-4481-BDF8-72A80EF2A7B8</ItemID>
<ItemID>8A80CB1D-A4BC-4865-8B51-D6EFBC6E3936</ItemID>
</Selection>
<SearchResultsSort Titles="Ascending" Dates="Ascending">None</SearchResultsSort>
</Binder>
@@ -77,9 +79,9 @@
<CurrentViewMode>Single</CurrentViewMode>
<SelectionAffects>None</SelectionAffects>
<Content>
<ItemID>48857498-4C8A-4481-BDF8-72A80EF2A7B8</ItemID>
<ItemID>8A80CB1D-A4BC-4865-8B51-D6EFBC6E3936</ItemID>
</Content>
<NavigationHistory CurrentIndex="39">
<NavigationHistory CurrentIndex="52">
<HistoryItem Type="BinderItems" ViewMode="Single">BB58390B-789C-47EE-AC09-76BF4C56BAC3</HistoryItem>
<HistoryItem Type="BinderItems" ViewMode="Single">816F6B00-8D2A-4022-87A4-D35170D81BEA</HistoryItem>
<HistoryItem Type="BinderItems" ViewMode="Single">5D497AFF-B4C1-419D-AB82-DDEFF79216A4</HistoryItem>
@@ -120,6 +122,19 @@
<HistoryItem Type="BinderItems" ViewMode="Corkboard">4A1D6B18-0952-42EB-A487-D17915DD3BA1</HistoryItem>
<HistoryItem Type="BinderItems" ViewMode="Corkboard">E6227DA1-9FBA-4C81-A40A-AED871C690B5</HistoryItem>
<HistoryItem Type="BinderItems" ViewMode="Single">48857498-4C8A-4481-BDF8-72A80EF2A7B8</HistoryItem>
<HistoryItem Type="BinderItems" ViewMode="Single">BB58390B-789C-47EE-AC09-76BF4C56BAC3</HistoryItem>
<HistoryItem Type="BinderItems" ViewMode="Single">1F883D3F-67E3-4124-925D-B010FE4743F6</HistoryItem>
<HistoryItem Type="BinderItems" ViewMode="Corkboard">06C0455C-36DD-4F38-BB7B-F7DD2453A8A5</HistoryItem>
<HistoryItem Type="BinderItems" ViewMode="Single">1F883D3F-67E3-4124-925D-B010FE4743F6</HistoryItem>
<HistoryItem Type="BinderItems" ViewMode="Single">0A7EDD9F-9DE0-4CC9-9AC1-EE0E3769B6A8</HistoryItem>
<HistoryItem Type="BinderItems" ViewMode="Single">2D6E4FBE-1689-4AA3-90A2-3EA6ACBEBF7B</HistoryItem>
<HistoryItem Type="BinderItems" ViewMode="Single">89A17E85-1E81-4FAE-B8C8-1A5A02F3EF2C</HistoryItem>
<HistoryItem Type="BinderItems" ViewMode="Single">71BFC455-F771-4342-A500-9C58BC55537B</HistoryItem>
<HistoryItem Type="BinderItems" ViewMode="Single">89A17E85-1E81-4FAE-B8C8-1A5A02F3EF2C</HistoryItem>
<HistoryItem Type="BinderItems" ViewMode="Single">71BFC455-F771-4342-A500-9C58BC55537B</HistoryItem>
<HistoryItem Type="BinderItems" ViewMode="Single">89A17E85-1E81-4FAE-B8C8-1A5A02F3EF2C</HistoryItem>
<HistoryItem Type="BinderItems" ViewMode="Single">71BFC455-F771-4342-A500-9C58BC55537B</HistoryItem>
<HistoryItem Type="BinderItems" ViewMode="Single">8A80CB1D-A4BC-4865-8B51-D6EFBC6E3936</HistoryItem>
</NavigationHistory>
</View>
<Text>
@@ -127,7 +142,7 @@
<PageLayout Facing="No">No</PageLayout>
<TypewriterScrolling>No</TypewriterScrolling>
<LineNumbers Interval="1">No</LineNumbers>
<Selection>398,0</Selection>
<Selection>0,0</Selection>
</Text>
<Outliner>
<Columns>

View File

@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<ScrivenerProject Identifier="0D5B5BAF-DC5E-4C26-B13C-F74EFAC04B5A" Version="2.0" Creator="SCRMAC-3.5.2-17486" Device="MacBookAirPro" Author="" Modified="2026-08-23 13:49:20 -0500" ModID="A0F613C3-B591-460D-A2C7-53DE5F4E1036">
<ScrivenerProject Identifier="0D5B5BAF-DC5E-4C26-B13C-F74EFAC04B5A" Version="2.0" Creator="SCRMAC-3.5.2-17486" Device="MacBookAirPro" Author="" Modified="2026-08-23 15:45:07 -0500" ModID="557BC772-DC27-427B-9915-4F3D3350DAFB">
<Binder>
<BinderItem UUID="F8F9FDEF-FD9F-4A8C-B33D-3434A1220ADC" Type="Text" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Novel Format</Title>
@@ -193,13 +193,13 @@
<SelectedSubdocumentUUIDs>1F883D3F-67E3-4124-925D-B010FE4743F6,A702733C-4F4D-4473-978E-57B27D437994,538FBF3E-89B8-4B08-A141-6D3CFEA1A160,E3CFECAB-7099-48B5-B971-1A6B12D220B3,6C6D3495-3C6F-48D0-9092-DA0760F7B31C,1B8B3DFD-9CDF-4442-8A72-69E87DD3A8C3,6981EF8D-41BF-4888-A3A2-B79B0CB8C449,8A0E75E6-1B75-42F3-982B-A8B02F762BB4,65B9D928-3C90-4881-8EB1-4432A9AAC239,EF0CA641-E954-495F-B7C3-855373C86798,E74F7CCB-E2BA-421B-814D-2EE6DA983324</SelectedSubdocumentUUIDs>
</CorkboardAndOutliner>
<Children>
<BinderItem UUID="1F883D3F-67E3-4124-925D-B010FE4743F6" Type="Text" Created="2026-04-03 18:30:49 -0500" Modified="2026-04-11 21:14:56 -0500">
<BinderItem UUID="1F883D3F-67E3-4124-925D-B010FE4743F6" Type="Text" Created="2026-04-03 18:30:49 -0500" Modified="2026-08-23 15:11:48 -0500">
<Title>Scene 1</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>1503,0</TextSelection>
<TextSelection>1776,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="A702733C-4F4D-4473-978E-57B27D437994" Type="Text" Created="2026-04-03 19:14:00 -0500" Modified="2026-04-03 19:43:40 -0500">
@@ -345,12 +345,34 @@
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<Children>
<BinderItem UUID="89A17E85-1E81-4FAE-B8C8-1A5A02F3EF2C" Type="Text" Created="2026-08-23 15:45:03 -0500" Modified="2026-08-23 15:45:03 -0500">
<Title>Scene 1 — initial draft — 2026-08-23 1538</Title>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="71BFC455-F771-4342-A500-9C58BC55537B" Type="Text" Created="2026-08-23 15:45:03 -0500" Modified="2026-08-23 15:45:03 -0500">
<Title>Scene 1 — working copy — 2026-08-23 1538</Title>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
</Children>
</BinderItem>
<BinderItem UUID="797DEF08-26BF-411A-907B-0CF985D5900F" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Package Snapshots</Title>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<Children>
<BinderItem UUID="8A80CB1D-A4BC-4865-8B51-D6EFBC6E3936" Type="Text" Created="2026-08-23 15:45:03 -0500" Modified="2026-08-23 15:45:03 -0500">
<Title>Scene 1 — package — 2026-08-23 1538</Title>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
</Children>
</BinderItem>
<BinderItem UUID="8F25EFC9-F067-4749-A5C5-7D4DEE99356D" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
<Title>Superseded &amp; Branches</Title>
@@ -371,6 +393,9 @@
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
<CorkboardAndOutliner>
<SelectedSubdocumentUUIDs>75F58E24-E4EE-4163-A6B3-7703D8D211BD</SelectedSubdocumentUUIDs>
</CorkboardAndOutliner>
<DefaultChildTemplateUUID>BE948F87-BDA3-4551-8E08-AC248FE89301</DefaultChildTemplateUUID>
<Children>
<BinderItem UUID="DEB6AE02-B51B-4C55-9E61-D08D32BABBA1" Type="Text" Created="2026-04-02 20:40:55 -0500" Modified="2026-08-23 13:33:04 -0500">
@@ -436,6 +461,15 @@
<TextSelection>273,0</TextSelection>
</TextSettings>
</BinderItem>
<BinderItem UUID="75F58E24-E4EE-4163-A6B3-7703D8D211BD" Type="Text" Created="2026-08-23 15:25:27 -0500" Modified="2026-08-23 15:27:13 -0500">
<Title>Alex Carpenter</Title>
<MetaData>
<IncludeInCompile>Yes</IncludeInCompile>
</MetaData>
<TextSettings>
<TextSelection>0,0</TextSelection>
</TextSettings>
</BinderItem>
</Children>
</BinderItem>
<BinderItem UUID="6830B6AC-686B-4370-A979-2FD1D7288BDA" Type="Folder" Created="2026-08-23 11:15:20 -0500" Modified="2026-08-23 11:15:20 -0500">
@@ -749,13 +783,13 @@
<ProjectTargets Notify="No">
<DraftTarget Type="Words" CountIncludedOnly="Yes" CurrentCompileGroupOnly="Yes" Deadline="2011-04-12 07:24:39 -0500" IgnoreDeadline="Yes">0</DraftTarget>
<SessionTarget Type="Words" CountDraftOnly="Yes" AllowNegatives="No" NextResetDate="2026-08-24 01:00:00 -0500" ResetType="Time" ResetTime="00:00" DeterminedFromDeadline="No" WritingDays="" CanWriteOnDeadlineDate="No">0</SessionTarget>
<PreviousSession Words="0" Characters="0" Date="2026-08-23 13:48:16 -0500"/>
<PreviousSession Words="0" Characters="0" Date="2026-08-23 15:45:03 -0500"/>
</ProjectTargets>
<RecentWritingHistory Date="2026-08-23 11:15:20 -0500">
<DraftWordCount>0</DraftWordCount>
<DraftCharCount>0</DraftCharCount>
<OtherWordCount>65</OtherWordCount>
<OtherCharCount>288</OtherCharCount>
<OtherWordCount>115</OtherWordCount>
<OtherCharCount>561</OtherCharCount>
</RecentWritingHistory>
<TemplateFolderUUID>5C03DE09-C285-48ED-827F-78E62B7D0F72</TemplateFolderUUID>
<BookmarksFolderUUID>69822417-D015-4BDD-90BD-18AAA6198D15</BookmarksFolderUUID>

View File

@@ -1,6 +1,14 @@
# Read-only Package Preview Prototype
# Local Authoring-System Prototype
This is the first authoring-system vertical slice. It reads a Scrivener project, checks the project structure, and builds an on-screen package preview. It does **not** call a model and it does **not** write to Scrivener.
This prototype reads a Scrivener project, checks the project structure, builds an exact package preview, and can send a confirmed package to the temporary OpenRouter drafting model.
When Scrivener is closed, accepting a generated draft for editing creates three records in the project:
- an immutable initial draft in `Authoring System → Drafting Archive → Accepted for Editing`;
- an editable working copy in the same folder; and
- the exact package snapshot in `Authoring System → Drafting Archive → Package Snapshots`.
An outright rejected draft writes nothing. A separate, explicit final-accept action copies the saved working copy into its paired Manuscript scene. Every write checks `Files/user.lock`; close the project in Scrivener first. Before a structural archive write, the prototype places a recoverable binder/checksum backup in `Files/authoring-backups`.
Run from `Authoring_System`:
@@ -16,4 +24,4 @@ To point it at another project:
python3 prototype/app.py --project /absolute/path/to/Book.scriv
```
The app binds scene/brief pairs by the visible `Scene X` labels for this read-only prototype. The next phase will persist UUID bindings in a sidecar, so later renaming does not break relationships.
The app currently binds scene/brief pairs by their visible `Scene X` labels. A later phase will persist UUID bindings in a sidecar, so later renaming does not break relationships.

View File

@@ -1,18 +1,23 @@
#!/usr/bin/env python3
"""Read-only local package-preview prototype for a Scrivener project.
"""Local authoring-system prototype for a Scrivener project.
This deliberately has no model call and no Scrivener write path. It is a
small standard-library server so the first workflow test has no dependency
installation step.
It previews and sends packages, and makes carefully scoped, lock-guarded
writes for accepted drafts. It remains a standard-library server.
"""
from __future__ import annotations
import argparse
import datetime as dt
import hashlib
import json
import os
import re
import shutil
import subprocess
import urllib.error
import urllib.request
import uuid
import xml.etree.ElementTree as ET
from dataclasses import dataclass, field
from http import HTTPStatus
@@ -22,6 +27,7 @@ from urllib.parse import urlparse
APP_DIR = Path(__file__).resolve().parent
DEFAULT_PROJECT = APP_DIR.parent / "hapagirlsauthoringsystemv1.scriv"
OPENROUTER_MODEL = "anthropic/claude-sonnet-4.6"
@dataclass
@@ -54,6 +60,24 @@ def rtf_to_text(path: Path) -> str:
return re.sub(r"\n{3,}", "\n\n", raw).strip()
def text_to_rtf(value: str) -> str:
"""Create deliberately simple RTF suitable for Scrivener text documents."""
escaped = []
for character in value.replace("\r\n", "\n").replace("\r", "\n"):
if character == "\n":
escaped.append("\\par\n")
elif character in "\\{}":
escaped.append("\\" + character)
elif ord(character) > 127:
codepoint = ord(character)
if codepoint > 32767:
codepoint -= 65536
escaped.append(f"\\u{codepoint}?")
else:
escaped.append(character)
return "{\\rtf1\\ansi\\deff0{\\fonttbl{\\f0\\fnil Helvetica;}}\n\\f0\\fs24 " + "".join(escaped) + "\n}"
class ScrivenerReader:
def __init__(self, project: Path):
self.project = project
@@ -175,11 +199,163 @@ class ScrivenerReader:
}
class ScrivenerWriter:
"""The small, guarded subset of Scrivener writes needed by this prototype."""
def __init__(self, project: Path):
self.project = project
self.reader = ScrivenerReader(project)
def _assert_unlocked(self) -> None:
if (self.project / "Files" / "user.lock").exists():
raise ValueError("Scrivener is open (Files/user.lock exists). Close the project before writing.")
def _tree_and_binder(self) -> tuple[ET.ElementTree, ET.Element]:
tree = ET.parse(self.reader.project_file)
binder = tree.getroot().find("Binder")
if binder is None:
raise ValueError("Scrivener project has no Binder.")
return tree, binder
@staticmethod
def _find_child(element: ET.Element, title: str) -> ET.Element | None:
children = element.find("Children")
if children is None:
return None
return next((item for item in children.findall("BinderItem") if (item.findtext("Title") or "").strip() == title), None)
def _folder(self, binder: ET.Element, path: list[str]) -> ET.Element:
parent: ET.Element | None = None
children = binder
for title in path:
parent = next((item for item in children.findall("BinderItem") if (item.findtext("Title") or "").strip() == title), None)
if parent is None:
raise ValueError("Required Scrivener folder is missing: " + "".join(path))
children = parent.find("Children")
if children is None and title != path[-1]:
raise ValueError("Required Scrivener folder has no children: " + title)
assert parent is not None
return parent
def _backup_binder(self) -> None:
backup_dir = self.project / "Files" / "authoring-backups"
backup_dir.mkdir(parents=True, exist_ok=True)
stamp = dt.datetime.now().strftime("%Y%m%d-%H%M%S")
shutil.copy2(self.reader.project_file, backup_dir / f"{stamp}.scrivx")
checksum = self.project / "Files" / "Data" / "docs.checksum"
if checksum.exists():
shutil.copy2(checksum, backup_dir / f"{stamp}.docs.checksum")
def _update_checksum(self, uuid: str, content: bytes) -> None:
checksum_path = self.project / "Files" / "Data" / "docs.checksum"
digest = hashlib.sha1(content).hexdigest()
key = f"{uuid.lower()}/content.rtf"
lines = checksum_path.read_text(encoding="utf-8", errors="replace").splitlines() if checksum_path.exists() else []
updated = False
output = []
for line in lines:
if line.startswith(key + "="):
output.append(f"{key}={digest}")
updated = True
else:
output.append(line)
if not updated:
output.append(f"{key}={digest}")
checksum_path.write_text("\n".join(output) + "\n", encoding="utf-8")
def _write_rtf(self, uuid: str, text: str) -> None:
content = text_to_rtf(text).encode("utf-8")
data_dir = self.project / "Files" / "Data" / uuid
data_dir.mkdir(parents=True, exist_ok=False)
(data_dir / "content.rtf").write_bytes(content)
self._update_checksum(uuid, content)
def _add_text(self, folder: ET.Element, title: str, text: str) -> str:
children = folder.find("Children")
if children is None:
children = ET.SubElement(folder, "Children")
doc_uuid = str(uuid.uuid4()).upper()
stamp = dt.datetime.now().astimezone().isoformat(timespec="seconds")
item = ET.SubElement(children, "BinderItem", {"UUID": doc_uuid, "Type": "Text", "Created": stamp, "Modified": stamp})
ET.SubElement(item, "Title").text = title
metadata = ET.SubElement(item, "MetaData")
ET.SubElement(metadata, "IncludeInCompile").text = "No"
settings = ET.SubElement(item, "TextSettings")
ET.SubElement(settings, "TextSelection").text = "0,0"
self._write_rtf(doc_uuid, text)
return doc_uuid
def _save_tree(self, tree: ET.ElementTree) -> None:
tree.write(self.reader.project_file, encoding="UTF-8", xml_declaration=True)
def accept_for_editing(self, scene_uuid: str, draft_text: str, package: str, model: str) -> dict:
self._assert_unlocked()
if not draft_text.strip() or not package.strip():
raise ValueError("A non-empty draft and package are required for acceptance.")
scene = self.reader.by_uuid.get(scene_uuid)
if scene is None:
raise ValueError("The selected scene no longer exists.")
self._backup_binder()
tree, binder = self._tree_and_binder()
accepted = self._folder(binder, ["Authoring System", "Drafting Archive", "Accepted for Editing"])
snapshots = self._folder(binder, ["Authoring System", "Drafting Archive", "Package Snapshots"])
stamp = dt.datetime.now().strftime("%Y-%m-%d %H%M")
initial_uuid = self._add_text(accepted, f"{scene.title} — initial draft — {stamp}", draft_text)
working_uuid = self._add_text(accepted, f"{scene.title} — working copy — {stamp}", draft_text)
package_header = f"Scene: {scene.title}\nModel: {model}\nAccepted for editing: {dt.datetime.now().astimezone().isoformat(timespec='seconds')}\n\n"
package_uuid = self._add_text(snapshots, f"{scene.title} — package — {stamp}", package_header + package)
self._save_tree(tree)
self.reader = ScrivenerReader(self.project)
return {"initial_uuid": initial_uuid, "working_uuid": working_uuid, "package_uuid": package_uuid}
def save_working_copy(self, working_uuid: str, text: str) -> None:
self._assert_unlocked()
item = self.reader.by_uuid.get(working_uuid)
if item is None or item.item_type != "Text":
raise ValueError("The working-copy archive record no longer exists.")
path = self.project / "Files" / "Data" / working_uuid / "content.rtf"
if not path.exists():
raise ValueError("The working-copy archive record has no text file.")
content = text_to_rtf(text).encode("utf-8")
path.write_bytes(content)
self._update_checksum(working_uuid, content)
def accept_into_book(self, scene_uuid: str, text: str) -> None:
self._assert_unlocked()
item = self.reader.by_uuid.get(scene_uuid)
if item is None or item.item_type != "Text":
raise ValueError("The selected Manuscript scene no longer exists.")
manuscript = self.reader.top_level("Manuscript")
if manuscript is None or not any(candidate.uuid == scene_uuid for candidate in self.reader.walk(manuscript.children)):
raise ValueError("The selected item is not a Manuscript scene.")
path = self.project / "Files" / "Data" / scene_uuid / "content.rtf"
content = text_to_rtf(text).encode("utf-8")
path.parent.mkdir(parents=True, exist_ok=True)
path.write_bytes(content)
self._update_checksum(scene_uuid, content)
def section(name: str, value: str) -> str:
return f"### {name}\n{value.strip() or '(none)'}"
def preflight(project: ScrivenerReader, payload: dict) -> list[str]:
data = project.summary()
scene = next((item for item in data["scenes"] if item["uuid"] == payload.get("scene_uuid")), None)
if scene is None or not scene["brief"].strip():
raise ValueError("Choose a scene with a paired BRIEF.")
if not data["style"].strip():
raise ValueError("STYLE is empty.")
directive = payload.get("directive", "").strip()
if not directive:
raise ValueError("DIRECTIVE is required.")
if not re.search(r"\b(maximum|max|not exceed)\b", directive, re.IGNORECASE):
raise ValueError("DIRECTIVE needs a word maximum.")
return ["No scene-specific NOTES or Place records selected; verify that no physical or time continuity constraint is needed."] if not payload.get("notes", "").strip() and not payload.get("place_uuids", []) else []
def build_package(project: ScrivenerReader, payload: dict) -> str:
preflight(project, payload)
data = project.summary()
scene = next((scene for scene in data["scenes"] if scene["uuid"] == payload.get("scene_uuid")), None)
if scene is None:
@@ -220,6 +396,27 @@ def build_package(project: ScrivenerReader, payload: dict) -> str:
) + "\n"
def draft(project: ScrivenerReader, payload: dict) -> dict:
key = os.environ.get("OPENROUTER_API_KEY")
if not key:
raise ValueError("OPENROUTER_API_KEY is not set in this server's Terminal session.")
if not payload.get("send_confirmation"):
raise ValueError("Confirm the OpenRouter send before generating.")
system = project.summary()["frontier_instructions"].strip()
package = build_package(project, payload)
body = json.dumps({"model": OPENROUTER_MODEL, "messages": [{"role": "system", "content": system}, {"role": "user", "content": package}], "max_tokens": int(payload.get("max_tokens", 3000))}).encode()
request = urllib.request.Request("https://openrouter.ai/api/v1/chat/completions", data=body, headers={"Authorization": f"Bearer {key}", "Content-Type": "application/json"}, method="POST")
try:
with urllib.request.urlopen(request, timeout=300) as response:
result = json.loads(response.read().decode())
except urllib.error.HTTPError as error:
raise ValueError(f"OpenRouter returned HTTP {error.code}: {error.read().decode(errors='replace')}") from error
text = result.get("choices", [{}])[0].get("message", {}).get("content")
if not isinstance(text, str):
raise ValueError("OpenRouter response did not contain draft text.")
return {"draft": text, "usage": result.get("usage", {}), "model": result.get("model", OPENROUTER_MODEL)}
class AppHandler(SimpleHTTPRequestHandler):
reader: ScrivenerReader
@@ -240,7 +437,7 @@ class AppHandler(SimpleHTTPRequestHandler):
self.send_json(self.reader.summary())
return
if path == "/api/health":
self.send_json({"status": "ok", "mode": "read-only prototype"})
self.send_json({"status": "ok", "mode": "local prototype"})
return
if path == "/":
self.path = "/static/index.html"
@@ -252,13 +449,36 @@ class AppHandler(SimpleHTTPRequestHandler):
super().do_GET()
def do_POST(self) -> None:
if urlparse(self.path).path != "/api/package-preview":
path = urlparse(self.path).path
if path not in {"/api/package-preview", "/api/draft", "/api/accept-for-editing", "/api/save-working-copy", "/api/accept-into-book"}:
self.send_error(HTTPStatus.NOT_FOUND)
return
try:
length = int(self.headers.get("Content-Length", "0"))
payload = json.loads(self.rfile.read(length).decode("utf-8"))
self.send_json({"package": build_package(self.reader, payload)})
if path == "/api/draft":
self.send_json(draft(self.reader, payload))
elif path == "/api/accept-for-editing":
if not payload.get("accept_confirmation"):
raise ValueError("Confirm acceptance before creating archive records.")
package = build_package(self.reader, payload)
writer = ScrivenerWriter(self.reader.project)
result = writer.accept_for_editing(payload.get("scene_uuid", ""), payload.get("draft", ""), package, payload.get("model", OPENROUTER_MODEL))
AppHandler.reader = writer.reader
self.send_json(result)
elif path == "/api/save-working-copy":
writer = ScrivenerWriter(self.reader.project)
writer.save_working_copy(payload.get("working_uuid", ""), payload.get("text", ""))
self.send_json({"saved": True})
elif path == "/api/accept-into-book":
if not payload.get("final_confirmation"):
raise ValueError("Confirm final acceptance before writing canonical Manuscript text.")
writer = ScrivenerWriter(self.reader.project)
writer.accept_into_book(payload.get("scene_uuid", ""), payload.get("text", ""))
AppHandler.reader = ScrivenerReader(self.reader.project)
self.send_json({"accepted": True})
else:
self.send_json({"package": build_package(self.reader, payload), "warnings": preflight(self.reader, payload)})
except (ValueError, json.JSONDecodeError) as error:
self.send_json({"error": str(error)}, HTTPStatus.BAD_REQUEST)
@@ -267,7 +487,7 @@ class AppHandler(SimpleHTTPRequestHandler):
def main() -> None:
parser = argparse.ArgumentParser(description="Run the read-only authoring-system prototype.")
parser = argparse.ArgumentParser(description="Run the local authoring-system prototype.")
parser.add_argument("--project", type=Path, default=DEFAULT_PROJECT)
parser.add_argument("--port", type=int, default=8765)
args = parser.parse_args()
@@ -276,7 +496,7 @@ def main() -> None:
parser.error(f"Project not found: {project}")
AppHandler.reader = ScrivenerReader(project)
server = ThreadingHTTPServer(("127.0.0.1", args.port), AppHandler)
print(f"Read-only authoring prototype: http://127.0.0.1:{args.port}")
print(f"Local authoring prototype: http://127.0.0.1:{args.port}")
print(f"Project: {project}")
server.serve_forever()

View File

@@ -1,4 +1,9 @@
let project;
let initialDraft = '';
let generatedPackage = '';
let generatedModel = '';
let workingUuid = '';
let acceptedSceneUuid = '';
const byId = (id) => document.getElementById(id);
const selected = (container) => [...container.querySelectorAll('input:checked')].map((input) => input.value);
@@ -21,18 +26,18 @@ function updateSceneState() {
function render(data) {
project = data;
byId('status').textContent = data.locked ? 'Scrivener lock detected — read-only' : 'Project not locked — app remains read-only';
const priorSceneUuid = acceptedSceneUuid || byId('scene').value;
byId('status').textContent = data.locked ? 'Scrivener lock detected — archive and manuscript writes are disabled' : 'Project closed — accepted-draft writes are available';
byId('status').className = `status ${data.locked ? 'warning' : 'ok'}`;
byId('project-check').innerHTML = [
['Scenes', data.scenes.length],
['Briefs without scene', data.unmatched_briefs.length],
['Scenes without brief', data.unmatched_scenes.length],
['Characters', data.characters.length],
['Places', data.places.length],
['Scenes', data.scenes.length], ['Briefs without scene', data.unmatched_briefs.length],
['Scenes without brief', data.unmatched_scenes.length], ['Characters', data.characters.length], ['Places', data.places.length],
].map(([label, value]) => `<dt>${label}</dt><dd>${value}</dd>`).join('');
byId('scene').innerHTML = data.scenes.map((scene) => `<option value="${scene.uuid}">${escapeHtml(scene.title)}${escapeHtml(scene.chapter)}</option>`).join('');
if ([...byId('scene').options].some((option) => option.value === priorSceneUuid)) byId('scene').value = priorSceneUuid;
checks(byId('characters'), data.characters);
checks(byId('places'), data.places);
byId('world-notes').textContent = data.world_notes || 'No project-level World Notes recorded.';
updateSceneState();
}
@@ -42,31 +47,87 @@ async function load() {
render(await response.json());
}
async function build() {
byId('error').textContent = '';
const payload = {
scene_uuid: byId('scene').value,
character_uuids: selected(byId('characters')),
place_uuids: selected(byId('places')),
lexicon: byId('lexicon').value,
story: byId('story').value,
recall: byId('recall').value,
previous: byId('previous').value,
notes: byId('notes').value,
directive: byId('directive').value,
new_thread: byId('new-thread').checked,
};
const response = await fetch('/api/package-preview', {
method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(payload),
});
function payload() {
return { scene_uuid: byId('scene').value, character_uuids: selected(byId('characters')), place_uuids: selected(byId('places')), lexicon: byId('lexicon').value, story: byId('story').value, recall: byId('recall').value, previous: byId('previous').value, notes: byId('notes').value, directive: byId('directive').value, new_thread: byId('new-thread').checked };
}
async function request(path, body) {
const response = await fetch(path, { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(body) });
const data = await response.json();
if (!response.ok) {
byId('error').textContent = data.error || 'Could not build package.';
return;
}
byId('package').textContent = data.package;
if (!response.ok) throw new Error(data.error || 'The request could not be completed.');
return data;
}
async function build() {
byId('error').textContent = ''; byId('warnings').textContent = '';
try {
const data = await request('/api/package-preview', payload());
generatedPackage = data.package;
byId('package').textContent = data.package;
byId('warnings').textContent = (data.warnings || []).join(' ');
} catch (error) { byId('error').textContent = error.message; }
}
function resetDraftState(message = 'An outright rejection writes nothing to Scrivener.') {
initialDraft = ''; generatedPackage = ''; generatedModel = ''; workingUuid = ''; acceptedSceneUuid = '';
byId('working-draft').value = ''; byId('working-draft').disabled = true;
byId('accept-confirmation').checked = false; byId('final-confirmation').checked = false;
['accept-editing', 'reject-draft', 'save-working', 'accept-book'].forEach((id) => { byId(id).disabled = true; });
byId('archive-status').textContent = message;
}
async function generateDraft() {
byId('error').textContent = '';
try {
const data = await request('/api/draft', { ...payload(), send_confirmation: byId('send-confirmation').checked, max_tokens: 3000 });
initialDraft = data.draft; generatedModel = data.model;
const preview = await request('/api/package-preview', payload());
generatedPackage = preview.package;
byId('working-draft').value = data.draft;
byId('working-draft').disabled = true;
byId('accept-editing').disabled = false; byId('reject-draft').disabled = false;
byId('archive-status').textContent = 'This generated text is not yet saved in Scrivener.';
} catch (error) { byId('error').textContent = error.message; }
}
async function acceptForEditing() {
byId('error').textContent = '';
try {
const data = await request('/api/accept-for-editing', { ...payload(), draft: initialDraft, model: generatedModel, accept_confirmation: byId('accept-confirmation').checked });
workingUuid = data.working_uuid;
acceptedSceneUuid = byId('scene').value;
byId('working-draft').value = initialDraft;
byId('working-draft').disabled = false;
byId('accept-editing').disabled = true; byId('reject-draft').disabled = true;
byId('save-working').disabled = false; byId('accept-book').disabled = false;
byId('archive-status').textContent = 'Initial draft and exact package saved. You may now edit the working copy.';
await load();
} catch (error) { byId('error').textContent = error.message; }
}
async function saveWorkingCopy() {
byId('error').textContent = '';
try {
await request('/api/save-working-copy', { working_uuid: workingUuid, text: byId('working-draft').value });
byId('archive-status').textContent = 'Working copy saved in Scrivener.';
} catch (error) { byId('error').textContent = error.message; }
}
async function acceptIntoBook() {
byId('error').textContent = '';
try {
await request('/api/save-working-copy', { working_uuid: workingUuid, text: byId('working-draft').value });
await request('/api/accept-into-book', { scene_uuid: acceptedSceneUuid, text: byId('working-draft').value, final_confirmation: byId('final-confirmation').checked });
byId('archive-status').textContent = 'Working copy saved and canonical prose written into Manuscript.';
await load();
} catch (error) { byId('error').textContent = error.message; }
}
byId('scene').addEventListener('change', updateSceneState);
byId('build').addEventListener('click', build);
byId('draft').addEventListener('click', generateDraft);
byId('accept-editing').addEventListener('click', acceptForEditing);
byId('reject-draft').addEventListener('click', () => resetDraftState('Draft rejected and discarded. Nothing was written to Scrivener.'));
byId('save-working').addEventListener('click', saveWorkingCopy);
byId('accept-book').addEventListener('click', acceptIntoBook);
load().catch((error) => { byId('status').textContent = error.message; byId('status').className = 'status warning'; });

View File

@@ -9,7 +9,7 @@
<body>
<header>
<div>
<p class="eyebrow">READ-ONLY PROTOTYPE</p>
<p class="eyebrow">LOCAL PROTOTYPE</p>
<h1>Package Preview</h1>
</div>
<div id="status" class="status">Loading project…</div>
@@ -32,6 +32,10 @@
<h2>Author BRIEF <span class="read-only">read-only</span></h2>
<pre id="brief">Select a scene to view its paired BRIEF.</pre>
</section>
<section class="brief-panel">
<h2>World Notes <span class="read-only">read-only reference</span></h2>
<pre id="world-notes">Loading World Notes…</pre>
</section>
<div class="grid">
<label>LEXICON (manual subset)
<textarea id="lexicon" rows="4" placeholder="Term — usage note"></textarea>
@@ -54,9 +58,25 @@
</div>
<label class="checkbox"><input id="new-thread" type="checkbox" checked> Treat empty STORY/PREVIOUS as a new narrative thread</label>
<button id="build">Build package preview</button>
<label class="checkbox"><input id="send-confirmation" type="checkbox"> I understand this sends the package to OpenRouter.</label>
<button id="draft">Generate temporary draft — no Scrivener write</button>
<p id="error" class="error"></p>
<p id="warnings" class="warnings"></p>
<h2>Exact package</h2>
<pre id="package">Select a scene, choose context, then build a preview.</pre>
<h2>Temporary draft</h2>
<textarea id="working-draft" rows="20" disabled placeholder="A generated draft will appear here."></textarea>
<div class="draft-actions">
<label class="checkbox"><input id="accept-confirmation" type="checkbox"> I accept this initial draft for editing and archival.</label>
<button id="accept-editing" disabled>Accept draft for editing</button>
<button id="reject-draft" disabled>Reject draft — discard it</button>
<button id="save-working" disabled>Save working copy</button>
</div>
<p id="archive-status" class="muted">An outright rejection writes nothing to Scrivener.</p>
<div class="final-actions">
<label class="checkbox"><input id="final-confirmation" type="checkbox"> I confirm the edited working copy is the canonical scene.</label>
<button id="accept-book" disabled>Accept working copy into Manuscript</button>
</div>
</section>
</main>
<script src="/static/app.js"></script>

View File

@@ -8,7 +8,10 @@ aside { padding: 1.2rem 1.5rem; border-right: 1px solid #d8d2c5; background: #fc
label { display: block; font-size: .85rem; font-weight: 650; } select, textarea { width: 100%; margin-top: .35rem; border: 1px solid #bab2a5; border-radius: 4px; background: #fffefb; padding: .55rem; font: .9rem ui-monospace, SFMono-Regular, Menlo, monospace; }
select { font-family: inherit; } .grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; } .checks label { padding: .2rem 0; font-weight: 400; } .checks input { margin-right: .35rem; }
button { margin: 1rem 0; border: 0; border-radius: 4px; padding: .65rem 1rem; background: #b54c2d; color: white; font-weight: 700; cursor: pointer; } button:hover { background: #923b22; }
button:disabled { cursor: not-allowed; opacity: .5; } .draft-actions, .final-actions { margin-top: .5rem; padding: .75rem 1rem; border: 1px solid #d8d2c5; background: #fcfaf5; } .draft-actions button, .final-actions button { margin: .6rem .5rem 0 0; }
#working-draft { min-height: 28rem; max-height: 65vh; resize: vertical; background: #fffefb; color: #17212b; font: .9rem/1.5 ui-monospace, SFMono-Regular, Menlo, monospace; }
pre { min-height: 28rem; max-height: 65vh; overflow: auto; margin: 0; padding: 1rem; border: 1px solid #d8d2c5; background: #202525; color: #e5f3ed; white-space: pre-wrap; font: .82rem/1.45 ui-monospace, SFMono-Regular, Menlo, monospace; }
.brief-panel { margin-bottom: 1.25rem; padding: 0 1rem 1rem; border: 1px solid #d8d2c5; background: #fcfaf5; } .brief-panel h2 { margin-top: 1rem; } .brief-panel pre { min-height: 0; max-height: 16rem; background: #fffefb; color: #17212b; font-family: inherit; font-size: .95rem; } .read-only { font-size: .68rem; font-weight: 600; color: #665f54; text-transform: uppercase; letter-spacing: .08em; }
dl { display: grid; grid-template-columns: 1fr auto; margin: 0; font-size: .9rem; } dt, dd { margin: 0; padding: .25rem 0; border-bottom: 1px solid #ece6da; } dd { font-weight: 700; } .status { border-radius: 999px; padding: .45rem .75rem; font-size: .78rem; } .ok { background: #d9eee4; color: #164d38; } .warning { background: #ffe2d6; color: #7f2c19; } .muted { color: #665f54; font-size: .8rem; } .error { color: #aa2717; font-weight: 700; } .checkbox { margin-top: 1rem; font-weight: 400; }
.warnings { color: #805215; font-weight: 650; }
@media (max-width: 800px) { main { grid-template-columns: 1fr; } aside { border-right: 0; border-bottom: 1px solid #d8d2c5; } .grid { grid-template-columns: 1fr; } }