flowmark 0.2.7

A Markdown auto-formatter for clean diffs and semantic line breaks
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
---
title: Test Document
author: Test Author
date: 2023-01-01
tags:
  - markdown
  - formatting
  - test
---
## Test document

This is a simple test document to verify Flowmark usage.
It’s sort of a “transparent box” test of the Flowmark auto-formatter.
Re-run Flowmark and compare output.

*[Everything is Free](https://open.spotify.com/track/0H8ukN2MIW2iNvqJP1kb4O?si=PWBwK6QgS8Siksuwbt4K0A)
by Gillian Welch*

The dangers of ‘culture fit’.

> The dangers of ‘culture fit’.

The [ways equity can be granted](#how-equity-is-granted) as compensation—including
restricted stock, stock options, and restricted stock units—are **notoriously complex**.
Equity compensation involves confounding terminology, legal obscurities, and many
high-stakes decisions for those who give and *receive it*. Blah blah blah and blah.

- **[Signing bonus]https://www.investopedia.com/terms/s/signing-bonus.asp.** Cash you
  get just for signing.
  (Signing bonuses usually have some strings attached—for example, you could have to pay
  back the bonus if you leave the company within 12 or 24 months.)

- **Cashless exercise**: In the event of an IPO, a broker can allow you to exercise all
  of your vested options and immediately sell a portion of them into the public market,
  removing the need for cash up front to exercise and pay taxes.

- Filenames and packages: `some-package`, `some-file.js` (to fit standard Node/npm
  conventions)

### A subsection with some citations

- Mark P. Cussen, Investopedia,
  [*Introduction To Incentive Stock Options*]http://www.investopedia.com/articles/stocks/12/introduction-incentive-stock-options.asp,
  updated 2017.
- Alex MacCaw,
  [*An Engineer’s Guide to Stock Options*]http://blog.alexmaccaw.com/an-engineers-guide-to-stock-options,
  2013\.
- Andy Rachleff, Wealthfront,
  [*The 14 Crucial Questions about Stock Options*]https://blog.wealthfront.com/stock-options-14-crucial-questions,
  2014\.

### Command Execution

- `command` - Name of kash command or action to execute

- `args` - Arguments as comma-separated string or individual `arg_0`, `arg_1`, etc.

- Additional parameters become options (e.g., `model=gpt-4o`, `language=en`)

[^uptimenote]: In engineering, “counting nines” traditionally refers to *service
    availability* (uptime)—99.99% uptime means ≤ 52 minutes of downtime per year.

## Some apostrophes and quotes--and dashes, too

“Hello,” he said! “What’s … your specialty?”
he enquired (in an idle tone).

He read the multiline quote: “This is line one and this is line two and finally line
three.” It was beautiful.

She whispered ‘Remember this important message’ softly.

The stated reason—“I’m working on myself”—may be sincere on one level.

* **From his Autobiography (1967-69):**

  + **On His Life’s Vision ("Reflections on My Eightieth Birthday"):** “I have lived in
    the pursuit of a vision, both personal and social.
    Personal: to care for what is noble, for what is beautiful, for what is gentle; to
    allow moments of insight to give wisdom at more mundane times.
    Social: to see in imagination the society that is to be created, where individuals
    grow freely, and where hate and greed and envy die because there is nothing to
    nourish them. These things I believe, and the world, for all its horrors, has left me
    unshaken”.

Cas’ surprise at John’s question hung over them both for a brief moment, like a thinly
disguised sack of potatoes.
“From 2002-2004 I specialized in the Sarbanes-Oxley Act (Pub.L. 107–204, 116 Stat.
745, enacted July 30, 2002), which was known (in the House) as the ‘Corporate and
Auditing Accountability, Responsibility, and Transparency Act’ and--” But here he cut
her off! And who could blame him?
He had spoken with the FBI. There was no time to lose.

These companies add (or “issue”) stock.

Dash--dash. Dash -- dash.
Dash -- dash.

10-20 10–20 10—20.

10 - 20 10 – 20 10 — 20.

a-b a–b a—b.

a - b a – b a — b.

## Math

This is a display formula:

$$ L = \frac{1}{2} \rho v^2 S C_L $$

And here is a formula in inline form as $L = \frac{1}{2} \rho v^2 S C_L$ with more text
following. If the noteholders had converted their $420K at the 20% discount, they would
be paying $\$0.55116 \times \$0.80$ per share, or $0.44093 per share.
And $\$420K \div 0.44093$ is $952{,}532$ shares.

## Legalese

> ⚖️
> 
> ↔️ CONVERTIBLE PROMISSORY NOTE
> 
> Note Series: `___________________________`
> 
> e. **Amendment and Waiver.** Any term of this Note may be amended or waived with the
> written consent of Company and the Majority Holders.
> 
> f. **Governing Law; Venue.** This Note shall be governed by and construed under the
> laws of the State of `________`, as applied to agreements among `_______` residents,
> made and to be performed entirely within the State of `______`, without giving effect
> to conflicts of laws principles.
> The venue for any dispute arising out of or related to this Note will lie exclusively
> in the state or federal courts located in King County, Washington, and the parties to
> this Note irrevocably waive any right to raise forum non conveniens or any other
> argument that King County, Washington is not the proper venue.
> The parties to this Note irrevocably consent to personal jurisdiction in the state and
> federal courts of the state of Washington.

> iv. **Further Limitations on Disposition.** Without in any way limiting the
> representations set forth above, the Holder further agrees not to make any disposition
> of all or any portion of the Securities unless and until:
> 
> 1\. There is then in effect a registration statement under the Act covering such
> proposed disposition and such disposition is made in accordance with such registration
> statement; or

## Typical ChatGPT Output

| **Feature** | **OpenAPI 3.1** | **OpenAI tool schema** | **Anthropic tool schema** | **Model Context Protocol (MCP) 2025-06-18** | **Pydantic v2 generated schema** |
| --- | --- | --- | --- | --- | --- |
| **Primary scope** | Full REST contract: paths, verbs, auth, servers **plus** data shapes | *Input-only* definition of a function’s parameters for `/chat/completions` `tools=[…]` | Same for `/v1/messages` `tools=[…]`; also used in Claude server-tools | Tool discovery & invocation over JSON-RPC / SSE; adds output contract & rich result types | In-process data validation; can emit JSON-Schema or OpenAPI components |
| **Where it lives / transport** | `.yaml`/`.json` served over HTTPS or bundled with code | Embedded inside a chat request | Embedded inside a chat request | Separate MCP server; clients list and call tools via `tools/*` RPC methods | Python code emits schema at runtime (`model_json_schema()` or `.schema_json()`) |
| **JSON-Schema dialect** | Official OAS dialect, built on **draft 2020-12**([spec.openapis.org][1]) | Fixed **draft 07 subset** (no `$ref` across docs, no `oneOf` of heterogeneous types)([community.openai.com][2], [community.openai.com][3]) | **draft 2020-12** (full vocabulary)([docs.anthropic.com][4]) | **draft 2020-12** for both `inputSchema` & `outputSchema`([modelcontextprotocol.io][5]) | **draft 2020-12** (and emits OpenAPI 3.1 when asked)([docs.pydantic.dev][6]) |
| **Advanced keywords allowed** (`$ref`, `oneOf`, `allOf`, `format`, …) | All JSON-Schema 2020-12, plus OAS extensions | **Limited** – many validators ignored, `$ref` must stay within the same object | **Allowed**`$ref`, `enum`, `oneOf`, formats, examples | Fully allowed; additionally supports `annotations` object for T\&S metadata | Whatever the target dialect allows; user may disable/enable `$ref` flattening |
| **Output schema support** | Yes (`components.schemas`, responses) | **No** – output is free-form chat or follow-up `tool` message | **No** (planned) | **Yes**`outputSchema` field; clients are encouraged to validate results([modelcontextprotocol.io][5]) | Yes – any Pydantic model’s JSON-Schema can describe outputs |
| **Streaming / partial results** | Via HTTP chunked or SSE, not part of schema | Supported in chat streaming but schema is unaffected | `stream:"auto"` yields incremental `tool_use` blocks | Built-in: server can stream intermediate `notifications/tools/*` & progress events | Not applicable (library) |
| **Runtime validation guarantee** | External validators or server framework (e.g., FastAPI) | **Caller must validate**; model may hallucinate | **Caller must validate** | MCP server **must** validate both inputs & outputs | Core-runtime C/Rust validation; raises `ValidationError` on failure |
| **Versioning cadence** | IETF-style spec; v3.1 is current | Implicit in OpenAI API releases | Versioned via `anthropic-version` header; schema fields stable | dated revisions (e.g., 2025-06-18) with change log | Semantic-versioned PyPI releases |
| **Typical Python authoring flow** | FastAPI/Django-Ninja introspect **Pydantic** models and function signatures to emit spec | Dicts or libraries like **Instructor**, LangChain, your `FunctionDescription` helper | `anthropic.tools` helper (wraps Pydantic/TypedDict) | `@mcp.tool` decorator in the reference SDK auto-derives schema from type hints | `class Model(BaseModel)…` or `@validate_call` on a function |
| **Notable limitations / gotchas** | Large; learning curve, must keep paths & refs consistent | *Must* root at `{type:"object"}`; no circular `$ref`; 64-char `name`; rejects empty `properties` | 16-KB per-tool limit; still beta; server-tool names are versioned (`web_search_20250305`) | Requires running MCP server; JSON-RPC adds another hop; security model still maturing | Performance slower than **msgspec**; still Python focused (no on-wire format) |

#### Key points

* **OpenAPI 3.1** is the most *expressive* and HTTP-oriented.
* **OpenAI’s schema** is the *smallest*, locked to draft-07, input-only.
* **Anthropic’s schema** lets you use *full* 2020-12, so the same Pydantic model works
  unchanged.
* **MCP** generalises tooling across vendors, adds output validation, discovery, and
  progress streams.
* **Pydantic v2** remains the Python “source-of-truth” generator: you can compile the
  **same** model into OpenAPI, plain JSON-Schema, OpenAI-tools, Anthropic-tools, or MCP
  definitions with one line of code.

[1]: https://spec.openapis.org/oas/3.1/dialect/2024-11-10.html "JSON Schema dialect for OpenAPI | OpenAPI Initiative Publications"
[2]: https://community.openai.com/t/the-assistant-will-never-recognize-a-required-parameter-that-is-of-object-type-in-function-tools/614154?utm_source=chatgpt.com "The Assistant will never recognize a required parameter that is of ..."
[3]: https://community.openai.com/t/extended-or-minimal-schemas-for-tool-parameters/578636?utm_source=chatgpt.com "Extended or minimal Schemas for tool parameters? - API"
[4]: https://docs.anthropic.com/en/docs/agents-and-tools/tool-use/overview "Tool use with Claude - Anthropic"
[5]: https://modelcontextprotocol.io/specification/2025-06-18/server/tools "Tools - Model Context Protocol"
[6]: https://docs.pydantic.dev/latest/concepts/json_schema/ "JSON Schema - Pydantic"

## Wrapping tests

### Some wrapping

William F. Buckley Jr.
was coming to breakfast.
Buckley was born November 24, 1925, in
[New York City](https://en.wikipedia.org/wiki/New_York_City), the son of Aloise
Josephine Antonia (Steiner) and William Frank Buckley Sr., a
[Texas](https://en.wikipedia.org/wiki/Texas)-born lawyer and oil developer.
His mother, from New Orleans, was of Swiss-German, German, and Irish descent, while his
paternal grandparents, from Hamilton, Ontario, Canada, were of Irish ancestry.
The sixth of ten children, Buckley moved as a boy with his family to Mexico, and then to
Sharon, Connecticut, before beginning his formal schooling in Paris, where he attended
first grade. By age seven, he received his first formal training in English at a day
school in London; his first and second languages were Spanish and French.
As a boy, Buckley developed a love for music, sailing, horses, hunting, and skiing.
All of these interests would be reflected in his later writings.
Just before World War II, at age 12–13, he attended the Catholic preparatory school [St.
John’s Beaumont School](https://en.wikipedia.org/wiki/St_John%27s_Beaumont_School) in
England.

The U.S. holds 50% of the global startup investment pool, down from 95% in the 1990s.
(This data is
[summarized](https://www.inc.com/leigh-buchanan/american-businesses-no-longer-dominate-venture-capital.html)
in *Inc.*; the [full report](http://startupsusa.org/global-startup-cities/) was
conducted by the Center for American Entrepreneurship.)

“You start getting entrepreneur of the year awards from Harvard Business School.
Investment bankers are staking out your house.
You could eat free for a year at Buck’s.” —Marc Andreessen[^a16zcom201.ufg7ag]

### A few paragraphs and bullets

A good heuristic is to assume your readers will be **100% intelligent and 100%
ignorant**. Of course, in reality, varied experience exists within an individual reader.
Most people may already know *something*, and some people are quicker learners than
others. Even world class experts most likely only really know parts of a subject, and
contributors may have practical experience in one role--perhaps they have been an
entrepreneur, for example, but not an investor.
So writing with the assumption that each reader could be both has a variety of
advantages:

- Assuming 100% ignorance will help people who think they know a lot about a subject
  understand **what they didn’t know they didn’t know**, and fill in the gaps in their
  knowledge. It encourages contribution from experts and people with practical
  experience.
- Assuming 100% intelligence makes readers feel respected, and feel proud to be
  associated with the material.
  It will incline beginners to contribute their feedback.
- Ensures that each reader feels capable of tackling a problem, specific or general.
- Ensures that each reader can embody a new way of thinking about a topic.
- **Encourages communication between beginners and experts**, which can be highly
  instructive for both sides.
- Emphasize confusions, overlooked suggestions, pitfalls, and misunderstandings that are
  common.

* ☁️ SaaS / paid services
* 🚪 Alternatives to the option being discussed
* 💸 Cost or expense issues, discussion, and gotchas
* 🕍 A mild warning attached to “full solution” or opinionated frameworks (the cathedral
  is a nod to
  [Raymond’s metaphor]https://en.wikipedia.org/wiki/The_Cathedral_and_the_Bazaar)
* 🍺 Open source / free software

- For well-known people, places, things, and events, prefer linking to the **Wikipedia
  page**.
  - If there is a good quality Wikipedia page, prefer it to company or organization home
    pages, home pages of cities or states or agencies, and other things notable enough
    to be covered well.
  - Why? It usually gives a lot more context to the reader, and saves them having to
    Google to find it. It will also help with our search and web page snippet features,
    since the mouseovers on the links will be better quality than for those on marketing
    pages or poorly organized or out-of-date official websites.
    - Example: “The [Bay Area]https://en.wikipedia.org/wiki/San_Francisco_Bay_Area in
      [California]https://en.wikipedia.org/wiki/California is home to both
      [Apple]https://en.wikipedia.org/wiki/Apple_Inc. and
      [Google]https://en.wikipedia.org/wiki/Google.”

A lot has changed in the last decade.
We’re currently in a
[seller’s market](https://www.washingtonpost.com/news/where-we-live/wp/2018/01/10/what-home-sellers-can-expect-in-2018-the-market-is-still-in-your-favor-if-the-price-is-right/)
nationwide, meaning buyers are not favored in most markets.
Home prices last peaked in 2006, and are
[up 6.7 percent](http://money.cnn.com/2018/04/24/real_estate/home-prices-rise-case-shiller/index.html)
this year (they’ve risen [about](https://fred.stlouisfed.org/series/CSUSHPISA)
[6% every year](http://www.chicagotribune.com/business/ct-biz-tax-law-home-values-20180102-story.html)
for the last six) and rising—particularly in hot markets like San Francisco, where the
average home sells in 21 days.
Mortgage rates are rising, too, and fast.
From September 2017 to March 2018,
[mortgage rates rose from 3.78% to 4.45%](https://www.nytimes.com/2018/03/28/upshot/housing-sales-mortgage-rates-tax-law.html).
Ouch. Neil Irwin, economist and New York Times correspondent,
[explains](https://www.nytimes.com/2018/03/28/upshot/housing-sales-mortgage-rates-tax-law.html)
that demand for housing is going up as millennials age into their 30s, but the cost of
building new homes to accommodate buyers is rising as well.
The
[tax law](https://turbotax.intuit.com/tax-tips/irs-tax-return/2017-tax-reform-legislation-what-you-should-know/L96aFuPhc)
passed in February 2017 is expected to
[slow rising housing costs](http://www.chicagotribune.com/business/ct-biz-tax-law-home-values-20180102-story.html)
for the upper middle class and the very wealthy.
The tax law’s impact on everyone else is mostly centered on the doubling of the standard
deduction for married couples (still 58% of
[first-time buyers](https://www.nytimes.com/2017/04/21/realestate/first-time-home-buyers-statistics.html))
to $24,000, which means the tax benefit of buying is
[no longer relevant](https://fred.stlouisfed.org/series/CSUSHPISA) for most people.

* When an investor is trying to get you to agree to a term you think is unfair, you need
  to protect your interests without sounding accusatory toward the investor: *“Sorry,
  I’m just inexperienced, I read/was told that it’s not wise to
  [term they want you to agree to].”*
  [[Paul Graham, Y Combinator]http://paulgraham.com/fr.html]
* When you want to test a VC’s interest to determine where to put your energy, you don’t
  want to sound desperate or pushy: *“I know that you’re not likely to give me a strong
  indication at this meeting, but I’d love to know if this is the* sort *of opportunity
  you could imagine taking.
  I’ll happily put in the work to persuade you over time!
  But would I be better off focusing my attention on other VCs?”*
  [[Mark Suster, Upfront Ventures]https://bothsidesofthetable.com/how-to-develop-your-fundraising-strategy-58c2f0b22d6d]

🔹 **Automated and emerging legal services**: Many services like
[**Stripe Atlas**](https://stripe.com/atlas), **[Atrium](https://www.atrium.co/)**,
[**Clerky**](https://www.clerky.com/), [*LegalZoom*](https://www.legalzoom.com/), and
*[UpCounsel](https://www.upcounsel.com/)* automate or simplify tasks and processes
provided by lawyers.
[**Atrium**](https://www.atrium.co/) is a new legal services company worth keeping an
eye on.

- [Alternative Minimum Tax (AMT)]http://fairmark.com/general-taxation/alternative-minimum-tax/alternative-minimum-tax-101/
  is a [complex part]https://www.irs.gov/taxtopics/tc556.html of the federal tax code
  many taxpayers never worry about.
  Generally, you do not pay
  [unless you have high income (>$250K) or high deductions]http://www.marketwatch.com/story/congratulations-you-owe-the-alternative-minimum-tax-2014-01-14.
  It also depends on the state you’re in, since your state taxes can significantly
  affect your deductions.
  Confusingly, if you are affected, AMT tax rates are usually at **26%** or **28%**
  marginal tax rate, but effectively is **35%** for some ranges, meaning it is
  [higher than ordinary income tax for some incomes and lower for others]http://www.forbes.com/sites/feeonlyplanner/2011/12/16/the-alternative-minimum-tax-sweet-spot/.
  AMT rules are so complicated you often need professional tax help if they might apply
  to you. The IRS’s
  [AMT Assistant]https://www.irs.gov/Businesses/Small-Businesses-&-Self-Employed/Alternative-Minimum-Tax-(AMT-Assistant-for-Individuals)
  might also help.

- ❗ If you do get an offer, you need to understand the value of the equity component.
  You need quite a bit of information to figure this out, and should just ask.
  If the company trusts you enough to be giving you an offer, and still doesn’t want to
  answer these questions about your offer, it’s **a warning sign**. (There are many
  [resources]https://blog.wealthfront.com/stock-options-14-crucial-questions/ out
  there with more details about
  [questions]http://www.inc.com/atish-davda/5-questions-you-should-ask-before-taking-a-start-up-job-offer.html
  like this.) Information that will help you weigh the offer might be: *What percentage
  of the company do the shares represent?* *What set of shares was used to compute that
  percentage (is this really the percentage of all shares, or some subset)?* *What did
  the last round value the company at?
  (I.e. the preferred share price times the total outstanding shares)?* *What is the
  most recent 409A valuation?
  When was it done, and will it be done again soon?* *Do you allow early exercise of my
  options?* *Are all employees on the same vesting schedule?* *Is there any acceleration
  of my vesting if the company is acquired?* *Do you have a policy regarding follow-on
  stock grants?* *Does the company have any repurchase right to vested shares?*

- Finally, consider the [common scenarios]#common-scenarios for exercising options,
  discussed below.

- ❗ It may not be common, but some companies retain a right to repurchase (buy back)
  vested shares. It’s simple enough to ask, "Does the company have any repurchase right
  to *vested* shares?”
  (Note repurchasing *unvested* shares that were purchased via early exercise is
  different, and helps you.)
  If you don’t want to ask, the fair market value repurchase right should be included in
  the documents you are being asked to sign or acknowledge that you have read and
  understood. (Skype had a
  [complex]https://www.quora.com/Which-valley-startups-have-a-Skype-like-repurchase-right
  [controversy]http://www.wac6.com/wac6/2011/07/skypes-employee-stock-option-plan-worthless-only-if-you-quit-before-2014.html
  related to repurchasing.)
  You might find a repurchase right for vested shares in the Stock Plan itself, the
  Stock Option Agreement, the Exercise Agreement, the bylaws, the certificate of
  incorporation, or any other stockholder agreement.

Venture capital firms fund companies-commonly referred to as startups-that have
ambitious goals of being dominant high-value businesses in their target market
([market caps](https://www.investopedia.com/terms/m/marketcapitalization.asp) of >$1B
and margins of >50%). These firms seek to make investments early in a company’s life
when stock is cheap, in hopes of holding through periods of hyper-growth in order to
realize abnormally large returns (200%+).

- Preferred stock usually has a
  [**liquidation preference**]http://www.investopedia.com/terms/l/liquidation-preference.asp,
  meaning the preferred stock owner will be paid before the common stock owners upon
  liquidation.
  - [**Liquidation overhang**]https://equityzen.com/blog/startup-valuations-and-liquidation-preference-overhang/
    can occur when the value of a company just doesn’t reach the number of dollars
    investors put into it.
    Because of liquidation preference, those holding preferred stock (investors) will
    have to be paid before those holding common stock (employees).
    If investors invested a hundred million dollars in your company, your equity as an
    employee won’t be worth anything if the company is sold when it’s in liquidation
    overhang and the sale doesn’t
    [exceed that amount]https://avc.com/2010/10/employee-equity-the-liquidation-overhang/.
  - ☝️ Preferences are
    [notoriously]https://venturebeat.com/2010/08/16/beware-the-trappings-of-liquidation-preference/
    [complex]https://medium.com/@CharlesYu/the-ultimate-guide-to-liquidation-preferences-478dda9f9332.
    Investors and entrepreneurs negotiate a lot of these details, including:
    - The **multiple**, a number designating how many times the investor must be paid
      back before common shareholders receive proceeds (often the multiple is 1X, but it
      can be 2X or higher).
    - Whether preferred stock is
      [**participating**]https://en.wikipedia.org/wiki/Participating_preferred_stock,
      meaning investors get their money back and also participate in proceeds from
      common stock.
    - Whether there is a **cap**, which limits the payout if it is participating.

- **Secondary buyers**: Thinking on all this
  [has evolved]http://www.industryventures.com/2014/12/02/employee-liquidity-good-for-private-companies/
  [in recent years]https://techcrunch.com/2015/10/14/selling-private-company-shares-2-0/.
  Some companies do see value in offering (mostly limited) opportunities for sale.
  - [SharesPost]http://sharespost.com/, [Equidate]https://www.equidateinc.com/, and
    [EquityZen]https://equityzen.com/ have sought to establish a market around
    secondary sales, particularly for well-known pre-IPO companies.

- **NSOs**: You pay full taxes at exercise, and the sale is like any investment gain:
  - At grant and vesting:
    - No tax if granted at FMV
  - At exercise:
    - Ordinary tax on the bargain element
    - Income and employment tax withholding on paycheck
  - At sale:
    - Long-term capital gains tax on gain if held for *1 year past exercise*
    - Ordinary tax otherwise (including immediate sale)

- **ISOs**: You might pay less tax at exercise, but it’s complicated:
  - At grant and vesting:
    - No tax if granted at FMV
  - At exercise:
    - AMT tax event on the bargain element; no ordinary or capital gains tax
    - No income or employment tax withholding on paycheck
  - At sale:
    - Long-term capital gains if held for *1 year past exercise and 2 years past grant
      date*
    - Ordinary tax otherwise (including immediate sale)

ElastiCache Basics:

- 📒 [Homepage]https://aws.amazon.com/elasticache/  [User guide]http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide  [FAQ]https://aws.amazon.com/elasticache/faqs/  [Pricing]https://aws.amazon.com/elasticache/pricing/
- **ElastiCache** is a managed in-memory cache service, that can be used to store
  temporary data in a fast in-memory cache, typically in order to avoid repeating the
  same computation multiple times when it could be reused.
- It supports both the [Memcached]https://memcached.org and [Redis]https://redis.io
  open source in-memory cache software and exposes them both using their native access
  APIs.
- The main benefit is that AWS takes care of running, patching and optimizing the cache
  nodes for you, so you just need to launch a cluster and configure its endpoint in your
  application, while AWS will take of most of the operational work of running the cache
  nodes.

DynamoDB Basics:

- 📒 [Homepage]https://aws.amazon.com/dynamodb/  [Developer guide]http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/  [FAQ]https://aws.amazon.com/dynamodb/faqs/  [Pricing]https://aws.amazon.com/dynamodb/pricing/
- **DynamoDB** is a [NoSQL]https://en.wikipedia.org/wiki/NoSQL database with focuses
  on speed, flexibility, and scalability.
  DynamoDB is priced on a combination of throughput and storage.

ElastiCache Tips:

- Choose the
  [engine]http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/SelectEngine.html,
  clustering configuration and
  [instance type]http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/CacheNodes.SelectSize.html
  carefully based on your application needs.
  The documentation explains in detail the pros, cons and limitations of each engine in
  order to help you choose the best fit for your application.
  In a nutshell, Redis is preferable for storing more complex data structures, while
  Memcached is just a plain key/value store.
  The simplicity of Memcached allows it to be slightly faster and allows it to scale out
  if needed, but Redis has more features which you may use in your application.
- For Memcached AWS provides enhanced SDKs for certain programming languages which
  implement
  [auto-discovery]http://docs.aws.amazon.com/AmazonElastiCache/latest/UserGuide/AutoDiscovery.html,
  a feature not available in the normal memcached client libraries.

**CEOs** and **COOs** who run a company or team of significant size should be sure to
talk to an equity compensation consultant or specialist at a law firm.
**Founders** looking for an introduction to legalities of running a company may wish to
check out Clerky’s [*Legal Concepts for Founders*](https://handbook.clerky.com/).

This number has steadily declined since 2002 levels of 12.3% and 23.2% respectively
([NCEO analysis](https://www.nceo.org/assets/pdf/articles/GSS-2014-data.pdf) of General
Social Survey data).

- **Visionary projects.** Projects that were in a completely brand-new space without a
  precedent, going from 0 to 1.

More line spacing challenges with multi-paragraph items:

- Use `z` (zoxide) instead of `cd`.

  ```shell
  # Use z in place of cd: switch directories (first time):
  z ~/some/long/path/to/foo

  # Thereafter it's faster:
  z foo
  ```

- Use `eza` instead of `ls`. It has color support, support for Nerd Font icons, and
  other improvements.

And enumerations:

4. **Format a doc:** You can convert a doc to nicely formatted HTML with

   ```shell
   tp format '~/Downloads/Airspeed Velocity of Unladen Birds.docx' --show
   ```

   Replace with the path above to a .docx or .md file.
   (The `--show` is optional)

   You can try other format docs.
   Currently DOCX, HTML, and Markdown foramt work.
   (PDF coming soon!)

5. **View locally:** You’ll see from the above output both an `.md` and an `.html` file.
   You can look at these locally and do what you want with them.

6. **Publish:** Publish the file with:

### 3.6 Comparative Features Matrix

This line has a two-space line break.\
And this is a regular line.

The following table summarizes the native capabilities of the primary platforms
evaluated against the core requirements:

| **Feature** | **Vercel** | **Netlify** | **Cloudflare Pages** | **AWS (S3/CloudFront)** |
| --- | --- | --- | --- | --- |
| **CLI Tool Availability** | Yes (vercel) 1 | Yes (netlify) 2 | Yes (wrangler) 3 | Yes (aws) 4 |
| **Primary CLI Auth Method** | User Access Token 9 | Personal Access Token (PAT) 2 | API Token 10 | IAM Credentials / STS Token 11 |
| **Native Token/Key Scoping** | User/Team Level 24 | User/Site Level 30 | Account Level (for Pages Edit) 3 | Path/Prefix Level (via IAM) 4 |
| **Path-Based Deploy Permissions** | No Native Support 14 | No Native Support 2 | No Native Support 3 | Yes (IAM Policies) 4 |
| **Primary Native Isolation Method** | Project | Site | Project (but weak permissions) | Path Prefix (with IAM) 4 |
| **Programmatic File Delete/Update** | Deployment API 14 | Deployment API 28 | Deployment API (via Wrangler) | Direct S3 Object API 12-55 |
| **Programmatic Invalidation API** | Automatic / Limited | Automatic / Limited | Yes (Cloudflare API) | Yes (CloudFront API) 15-16 |
| **Basic Cost Model** | Per User / Usage 5 | Per User / Usage 5 | Generous Free Tier / Usage | Usage-Based Components 20-64 |

## 3. Platform\-Specific Mechanisms

Each major operating system provides its own set of system calls, APIs, and conventions
for managing temporary files and directories.

### 3.1. Linux

Linux offers a rich set of POSIX\-compliant and Linux\-specific mechanisms.

* **APIs:**
  + mkstemp(3\): Generates a unique filename based on a template (prefixXXXXXX), creates
    the file with 0600 permissions, opens it, and returns a file descriptor.
    It uses O\_EXCL for atomic creation, preventing race conditions.<sup>19</sup> The
    caller is responsible for unlinking the file.
  + mkdtemp(3\): Similar to mkstemp but creates a unique directory with 0700 permissions
    based on a template (prefixXXXXXX), returning the path.<sup>19</sup> The caller must
    remove the directory.
  + tmpfile(3\): Creates an unnamed temporary file opened in wb\+ mode (binary
    read/write), automatically deleted when closed or on process
    termination.<sup>19</sup> While convenient, POSIX notes potential permission issues
    and recommends mkstemp followed by fdopen for multithreaded apps to avoid leaking
    file descriptors.<sup>59</sup>

* **Recommended Python Approach for Atomic Writes:**
  1. **Use a Library:** Employing a dedicated library like atomicwriter or atomicfile is
     generally the most robust approach, as they handle temporary file creation in the
     correct location, atomic renaming (os.replace), and error cleanup across platforms.
  2. **Manual Implementation (if necessary):**
     + Determine the destination directory: dest\_dir = os.path.dirname(dest\_path)
     + Create the temporary file in the destination directory: temp\_file =
       tempfile.NamedTemporaryFile(mode='w', dir=dest\_dir, delete=False) (use
       appropriate mode, e.g., wb for binary).
     + Use a try … finally block to ensure cleanup:\
       Python\
       temp\_file = None\
       try:\
       temp\_file = tempfile.NamedTemporaryFile(mode='w', dir=dest\_dir, delete=False,
       prefix='tmp', suffix='.tmp')\
       # Write data to temp\_file.file (or temp\_file directly in older Pythons)\
       temp\_file.write(...)\
       # Ensure data is on disk before renaming\
       temp\_file.flush()\
       os.fsync(temp\_file.fileno())\
       # Close the file handle before renaming\
       temp\_file.close()\
       # Atomic rename/replace\
       os.replace(temp\_file.name, dest\_path)\
       temp\_file = None # Prevent cleanup in finally block if successful\
       finally:\
       if temp\_file is not None and os.path.exists(temp\_file.name):\
       try:\
       os.unlink(temp\_file.name)\
       except OSError:\
       # Log error, but continue\
       pass\

### Boldface, italics, and links

X [New York City](https://en.wikipedia.org/wiki/New_York_City). XX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City). XXXXXXXXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City).
XXXXXXXXXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City).
XXXXXXXXXXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City).
XXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City).
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City).
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City).
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City).
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City).
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City).
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City).
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City).
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City).
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City).
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
[New York City](https://en.wikipedia.org/wiki/New_York_City).

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New York City**.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New York City**.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New York City**.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New York City**.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New York City**.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New York City**.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New York City**.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New York City**.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New York City**.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New York City**.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New York City**.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New York City**.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New York City**.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New York
City**. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New
York City**. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
**New York City**.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New York
City**. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New
York City**. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
**New York City**.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New York
City**. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
**New York City**.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New
York City**.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **New
York City**.

**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City** xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City**
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City**
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City**
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City**
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City**
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City**
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City**
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City**
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City**
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.
**New York City**
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.

XXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or bold**face** or em*phases*.
And more words. XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or
bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or bold**face** or
em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or bold**face** or
em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or bold**face** or
em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or bold**face** or
em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or bold**face** or
em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or bold**face** or
em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or bold**face** or
em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or bold**face** or
em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or bold**face** or
em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or bold**face** or
em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or bold**face** or
em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or bold**face**
or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or bold**face**
or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or bold**face**
or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or
bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or
bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or
bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or
bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or
bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or
bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or
bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or
bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or
bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or
bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or
bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or
bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases or
bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases
or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases
or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or *em*phases
or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or
*em*phases or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or
*em*phases or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or
*em*phases or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or
*em*phases or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or
*em*phases or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or
*em*phases or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or
*em*phases or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or
*em*phases or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or
*em*phases or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or
*em*phases or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face or
*em*phases or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face
or *em*phases or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face
or *em*phases or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX **bold**face
or *em*phases or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
**bold**face or *em*phases or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
**bold**face or *em*phases or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
**bold**face or *em*phases or bold**face** or em*phases*. And more words.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
**bold**face or *em*phases or bold**face** or em*phases*. And more words.

In some cases, **bold**face or *em*phases or bold**face** or em*phases* can occur
without intervening whitespace.
In fact, **bold**face or *em*phases or bold**face** or em*phases* or **bold**face or
*em*phases or bold**face** or em*phases* or **bold**face or *em*phases or bold**face**
or em*phases* or **bold**face or *em*phases or bold**face** or em*phases* or
**bold**face or *em*phases or bold**face** or em*phases* or **bold**face or *em*phases
or bold**face** or em*phases* or **bold**face or *em*phases or bold**face** or
em*phases* or **bold**face or *em*phases or bold**face** or em*phases* can flow on and
on …

*blah blah* *blah blah* *blah blah* *blah blah* *blah blah* *blah blah* *blah blah*
*blah blah* *blah blah* *blah blah* *blah blah* *blah blah* *blah blah* *blah blah*
*blah blah* *blah blah* *blah blah* *blah blah* *blah blah* *blah blah* *blah blah*
*blah blah*

The same is true for links.
“The [Bay Area](https://en.wikipedia.org/wiki/San_Francisco_Bay_Area) in
[California](https://en.wikipedia.org/wiki/California) is home to both
[Apple](https://en.wikipedia.org/wiki/Apple_Inc.) and
[Google](https://en.wikipedia.org/wiki/Google).” “The
[Bay Area](https://en.wikipedia.org/wiki/San_Francisco_Bay_Area) in
[California](https://en.wikipedia.org/wiki/California) is home to both
[Apple](https://en.wikipedia.org/wiki/Apple_Inc.) and
[Google](https://en.wikipedia.org/wiki/Google).” (The
[Bay Area](https://en.wikipedia.org/wiki/San_Francisco_Bay_Area) in
[California](https://en.wikipedia.org/wiki/California) is home to both
[Apple](https://en.wikipedia.org/wiki/Apple_Inc.) and
[Google](https://en.wikipedia.org/wiki/Google).) The
[Bay Area](https://en.wikipedia.org/wiki/San_Francisco_Bay_Area) in
[California](https://en.wikipedia.org/wiki/California) is home to both
[Apple](https://en.wikipedia.org/wiki/Apple_Inc.) and
[Google](https://en.wikipedia.org/wiki/Google).
*The [Bay Area](https://en.wikipedia.org/wiki/San_Francisco_Bay_Area) in
[California](https://en.wikipedia.org/wiki/California) is home to both
[Apple](https://en.wikipedia.org/wiki/Apple_Inc.) and
[Google](https://en.wikipedia.org/wiki/Google).* **The
[Bay Area](https://en.wikipedia.org/wiki/San_Francisco_Bay_Area) in
[California](https://en.wikipedia.org/wiki/California) is home to both
[Apple](https://en.wikipedia.org/wiki/Apple_Inc.) and
[Google](https://en.wikipedia.org/wiki/Google).** The
[Bay Area](https://en.wikipedia.org/wiki/San_Francisco_Bay_Area) in
[California](https://en.wikipedia.org/wiki/California) is home to both
[Apple](https://en.wikipedia.org/wiki/Apple_Inc.) and
[Google](https://en.wikipedia.org/wiki/Google).

[Apple](https://en.wikipedia.org/wiki/Apple_Inc.)/[Google](https://en.wikipedia.org/wiki/Google),
[Apple](https://en.wikipedia.org/wiki/Apple_Inc.)/[Google](https://en.wikipedia.org/wiki/Google),
[Apple](https://en.wikipedia.org/wiki/Apple_Inc.)/[Google](https://en.wikipedia.org/wiki/Google),
[Apple](https://en.wikipedia.org/wiki/Apple_Inc.)/[Google](https://en.wikipedia.org/wiki/Google),
[Apple](https://en.wikipedia.org/wiki/Apple_Inc.)/[Google](https://en.wikipedia.org/wiki/Google).

### More URLs

* 📈 adpushup
  ([2017, Seed]https://www.slideshare.net/AlexanderJarvis/adpushup-seed-pitch-deck)
* 📈 AirBnB ([2009, Seed]http://www.slideshare.net/ryangum/airbnb-pitch-deck-from-2008)
* 📈 AppNexus
  ([2007, Seed]http://www.slideshare.net/CamilleRicketts2/appnexus-first-pitch-deck)
* 📈 Bliss ([2017, Seed]https://www.slideshare.net/AlexanderJarvis/blissai-pitch-deck)
* 📈 Boomtrain ([2014, ?]https://boomtrain.docsend.com/view/3giicsi)
* 📈 Buffer ([2011, Seed]http://www.slideshare.net/Bufferapp/buffer-seedrounddeck)
* 📈 BuzzFeed
  ([2008, Series A]https://qz.com/389752/here-is-buzzfeeds-first-pitch-deck-to-investors-in-2008/)
* 📈 Castle
  ([2017, Seed]https://www.slideshare.net/AlexanderJarvis/castle-pitch-deck-75070238)
* 📈 Coinbase
  ([2012, Seed]https://www.slideshare.net/BrianArmstrong29/coinbase-seed-round-pitch-deck);
  [Commentary]https://medium.com/@barmstrong/the-coinbase-seed-round-pitch-deck-50c8ec91d40b
  on the round by Brian Armstrong, CEO of Coinbase.
* 📈 Contently
  ([2014, Series B]https://www.slideshare.net/GoCanvas/the-10-most-interesting-slides-that-helped-our-saas-company-raise-9-million-42566344)
* 📈 Cubeit ([2017, Seed]https://www.slideshare.net/AlexanderJarvis/cubeit-pitch-deck)
* 📈 Crew
  ([2015, Series A]https://www.slideshare.net/AlexanderJarvis/crew-pitch-deck-seriesa)
* 📈 DocSend ([2013, Seed]https://docsend.com/view/n43v89r)
* 📈 Dwolla
  ([2013, Series C]http://www.businessinsider.com/18-slide-pitch-deck-lands-payment-startup-dwolla-165-million-2013-4?op=1)
* 📈 eShares
  ([2014, Series A]https://esharesinc.app.box.com/s/fjixdt78tl9henx2c75etkx1sootwo9p);
  [Commentary]https://medium.com/eshares-blog/eshares-series-a-c6bad9ad3721#.alf0y6i99
  on the round by [Henry Ward]https://twitter.com/henrysward, CEO of eShares
* 📈 Foursquare ([2009, Seed]http://www.slideshare.net/alkarmi/foursquare-1stpitch2009)
* 📈 Front
  ([2016, Series A]http://www.slideshare.net/MathildeCollin/front-series-a-deck-64596550?ref=https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.slideshare.net%2Fslideshow%2Fembed_code%2Fkey%2FFXlrFkbldHJoki&url=http%3A%2F%2Fwww.slideshare.net%2FMathildeCollin%2Ffront-series-a-deck-64596550&image=http%3A%2F%2Fcdn.slidesharecdn.com%2Fss_thumbnails%2Fdecktopublish-1-160801215931-thumbnail-4.jpg%3Fcb%3D1470090544&key=d04bfffea46d4aeda930ec88cc64b87c&type=text%2Fhtml&schema=slideshare);
  [Commentary]https://medium.com/@collinmathilde/front-series-a-deck-f2e2775a419b#.7xlz4lwxz
  on the round by [Mathilde Collin]https://twitter.com/collinmathilde, CEO of Front
* 📈 Gaia Design
  ([2015, ?]https://www.slideshare.net/valentinelanger/presentation-gaia-design-furniture)
* 📈 Intercom
  ([2011, Seed]http://www.slideshare.net/eoghanmccabe/intercoms-first-pitch-deck)

And some dashes:

- 🔥[The Culture Cliché]https://m.signalvnoise.com/the-culture-cliche/ – Claire Lew
- 🔥[Most Company Culture Posts are Fluffy Bullshit — Here is what you actually need to know]https://medium.com/evergreen-business-weekly/most-company-culture-posts-are-fluffy-bullshit-here-is-what-you-actually-need-to-know-1cf8597a5c2c
  — Eric Jorgenson – summarizing the many dimensions of culture
- 💳[The Culture Factor]https://hbr.org/2018/01/the-culture-factor – Boris Groysberg,
  Jeremiah Lee, Jesse Price, J. Yo-Jud Cheng
- [Programming Your Culture]https://a16z.com/2012/12/18/programming-your-culture/  Ben Horowitz (note this line has nonbreaking spaces)

## Footnotes and bare links

🔸 If you do send a pitch deck via email, expect materials you share with investors to
get leaked to other investors, your competitors, and the press.[^191] That doesn’t mean
you shouldn’t tell investors what they need to know, but it does mean you want to be
careful with how you share that information.
You might, for example, send investors a less sensitive version of your pitch deck via
email, but include additional slides when you actually present to them at their firm.

To create an effective story, you have to consider what motivates the recipient of your
story. Take Henry Ford, “If there is any one secret of success it lies in the ability to
get the other person’s point of view and see things from their angle as well as your
own.” [^177]

Spacing around footnotes can be confusing.[^a] Like this.[^a][^b] Or.
[^a] [^b] This. [^a][^b][^c]

And people often put them before punctuation like this[^a], or this[^a]. Or even
this[^a][^b]? Perhaps by **15% to 25%**[^freeincome.2b5cob], pretty quickly (but we’re
not complaining)[^urbanthowt.wy49lp].

❗️️️ Having multiple automatic conversion thresholds can give the investor with a higher
threshold leverage to block an IPO.[^210]

1. **Initial Scan with -X importtime:** Run the application with python -X importtime …
   \> import.log. Visualize the output using tuna import.log.<sup>42</sup> Look for
   modules with large *cumulative* times at the top level or deep in the call stack.
   These are the primary candidates for further investigation.<sup>1</sup>

[^2]: Aulet, Bill. *Disciplined Entrepreneurship*: 24 Steps to a Successful Startup (Kindle
    Location 1220). Wiley, 2013. Kindle Edition.

[^191]: http://paulgraham.com/fr.html

[^177]: Carnegie, Dale. *How To Win Friends and Influence People* (p. 35). Simon & Schuster.
    Kindle Edition.

[^207]: [https://bostonvcblog.typepad.com/vc/2009/07/in-vc-deals-price-doesnt-matter-but-the-promote-does.html]https://bostonvcblog.typepad.com/vc/2009/07/in-vc-deals-price-doesnt-matter-but-the-promote-does.html

[^210]: FM16, p. 80

Links like these underline ones come up from some exports.
And let’s try some links with angle brackets.

[^52]: [[https://www.vox.com/2014/3/5/11624228/how-a-startup-created-the-no-1-rated-mattress-on-amazon-com]{.underline}]https://www.vox.com/2014/3/5/11624228/how-a-startup-created-the-no-1-rated-mattress-on-amazon-com

[^53]: <https://www.fastcompany.com/90216464/the-29-billion-battle-to-own-how-america-sleeps>

[^axioscomth.1lioru]: <https://www.axios.com/the-rise-of-pre-seed-venture-capital-1513305959-13da61c8-15f8-441e-b016-d29902bff8bf.html>

[^carnegieda.327r3k]: Carnegie, Dale. *How To Win Friends and Influence People* (p. 35). Simon & Schuster.
    Kindle Edition.

[^53]: <https://www.fastcompany.com/90216464/the-29-billion-battle-to-own-how-america-sleeps>

[^217]: Testing - : Is Ketamine Contraindicated in Patients with Psychiatric Disorders?
    - REBEL EM - more words - accessed April 24, 2025,
      <https://rebelem.com/is-ketamine-contraindicated-in-patients-with-psychiatric-disorders/>

[^multiline]: The distinction between “hiring” and “recruiting” isn’t universally agreed
    upon. Some people think of hiring as a superset of recruiting, some consider it to be
    the other way around.
    However you think of it, both recruiting and hiring involve selling candidates on
    the value proposition of a company and ensuring the alignment of interests between
    the two parties.

[^multiparagraph]: This is an even longer footnote …

    Paragraph 1.

    > And even a block quote.

    Paragraph 3.

And by contrast here a bare link is like this https://www.google.com/

## Some other stuff

```javascript
// This is a code block
var x = 5;
```

```
This is
another.
```

<div align="center"> <img src="images/rounds.png" alt="awesome"> <br> Example of company
valuation, shares, fundraising, and dilution
(<a href="http://ownyourventure.com/equitySim.html">source</a>) <br> </div>

| Specific AWS Services | Basics | Tips | Gotchas |
| --- | --- | --- | --- |
| [Security and IAM]#security-and-iam | [📗]#security-and-iam-basics | [📘]#security-and-iam-tips | [📙]#security-and-iam-gotchas-and-limitations |
| [S3]#s3 | [📗]#s3-basics | [📘]#s3-tips | [📙]#s3-gotchas-and-limitations |
| [EC2]#ec2 | [📗]#ec2-basics | [📘]#ec2-tips | [📙]#ec2-gotchas-and-limitations |
| [CloudWatch]#cloudwatch | [📗]#cloudwatch-basics | [📘]#cloudwatch-tips | [📙]#cloudwatch-gotchas-and-limitations |
| [AMIs]#amis | [📗]#ami-basics | [📘]#ami-tips | [📙]#ami-gotchas-and-limitations |
| [Auto Scaling]#auto-scaling | [📗]#auto-scaling-basics | [📘]#auto-scaling-tips | [📙]#auto-scaling-gotchas-and-limitations |

- 📒 [FAQ]https://aws.amazon.com/cloudwatch/faqs/  [Pricing]https://aws.amazon.com/cloudwatch/pricing/ - 🔹Blahxxx - ❗Blahxxx

**Related Architecture**:
- [arch-execution.md]../architecture/arch-execution.md - Execution model context

## Corner Cases

# Markdown Corner Cases Test Suite

This document tests all discovered edge cases and formatting quirks.

* * *

## 1. Thematic Break Normalization

Thematic breaks should be preserved as `* * *` not normalized to dashes.

Test: Three asterisks with spaces should stay as `* * *` not become `-----`.

* * *

## 2. Numbered Heading Escaping

Numbered headings like “## 1. Introduction” should not have the period escaped.

### 1. First Section

Content here.

### 2. Second Section

More content.

## 3. Underscore Escaping

Technical terms with underscores should not be escaped in normal text:

- x86_64 architecture

- ARM64 (aarch64) platforms

- Linux x86_64 (glibc and musl/static)

- macOS Intel (x86_64)

- Windows x86_64

## 4. Less-Than Escaping

Comparison operators should not be escaped:

- Startup time: < 10ms

- Binary size < 10MB

- Processing speed < 50ms

## 5. Hash Escaping

Hash symbols in inline strings should not be escaped:

> The string `##` should not become `\#\#` in quotes.

## 6. Code Fence with Indented Lists

YAML code blocks with indented lists should be preserved correctly:

```yaml
jobs:
  fmt:
    name: Format Check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install Rust toolchain
        uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt

      - name: Check formatting
        run: cargo fmt --all -- --check
```

## 7. Quote Block Formatting

Quote blocks should have correct blank line spacing:

> **Completion Gate:** Acceptance requires exact 100% passing of every test, exact 100%
> parity with every original Python test, and exact byte-for-byte matching on all
> comparisons (zero diffs).
> This includes:
> 
> - Test output and processing results
>
> - CLI command output (help, errors, warnings, status messages)
>
> - Cross-validation across all fixtures
>
> - File outputs (no whitespace or encoding differences unless documented)

## 8. Badge Link Wrapping

Badge links should each be on separate lines:

[![CI](https://github.com/jlevy/flowmark-rs/workflows/CI/badge.svg)](https://github.com/jlevy/flowmark-rs/actions)
[![Release](https://github.com/jlevy/flowmark-rs/workflows/Release/badge.svg)](https://github.com/jlevy/flowmark-rs/actions)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)

## 9. Paragraph Wrapping

Regular paragraphs should join lines and wrap at the configured width:

First line of text. Second line of text.
Third line of text that continues here.

## 10. Quote Block Line Joining

Quote blocks should join lines within paragraphs:

> First line in quote.
> Second line in quote.
> Third line in quote.

## 11. Link Wrapping

Regular links should be joined on the same line if they fit:

[Link one](https://example.com/first) [Link two](https://example.com/second)

## 12. Inline Image Wrapping

Inline images should be joined on the same line if they fit:

![Image one](image1.png) ![Image two](image2.png)

## 13. Heading Spacing

Headings should have consistent blank line spacing.

### Subheading Test

Paragraph after heading.

### Another Subheading

> Quote after heading.

### A Third Subheading

```markdown
A fenced block.
```

### List After Heading

- List item one
- List item two

## 14. Nested Fenced Code Blocks

Fenced code blocks that contain other fenced code blocks need extra backticks.

### Markdoc Style (4 backticks)

````value {% process=false %}
Use {% callout %} for emphasis.
````

### Nested Markdown Code (4 backticks)

````markdown
This is a code block with nested markdown:

```python
print('hello')
```
````

### Deeply Nested (5 backticks)

`````markdown
Here's an example with 4-backtick code block:

````python
print('hello')
````
`````

### Tilde Fences Preserved

~~~markdown
Here's some code:

```python
print('hello')
```
~~~

## 15. GitHub Alerts/Callouts

GitHub-flavored Markdown supports alert blocks (callouts) for highlighting important
information.

### Basic Alerts

> [!NOTE]
> This is a note alert for highlighting information.

> [!TIP]
> This is a tip alert for helpful suggestions.

> [!IMPORTANT]
> This is an important alert for crucial information.

> [!WARNING]
> This is a warning alert for potential issues.

> [!CAUTION]
> This is a caution alert for dangerous actions.

### Multi-line Alert Content

> [!NOTE]
> This is a note with multiple lines of content.
> The content continues on the next line.
> And keeps going on this third line.

### Alert with Multiple Paragraphs

> [!TIP]
> First paragraph of the tip.
> 
> Second paragraph with more details.

### Alert with Code Block

> [!WARNING]
> Be careful with this code:
> 
> ```python
> dangerous_operation()
> ```

### Alert with List

> [!IMPORTANT]
> Remember these items:
> 
> - First item
> - Second item
> - Third item

### Lowercase Alert Type (normalized to uppercase)

> [!NOTE]
> This lowercase alert should be normalized to uppercase.

### Non-standard Alert Types (preserved as regular quotes)

Non-standard alert types like `[!FOO]` are not recognized by GitHub but should be
preserved as regular block quotes without losing any content.

> [!FOO] This uses a non-standard alert type.
> It should be preserved as a regular quote.

> [!CUSTOM] Another non-standard type that should be preserved.

> [!INFO] Info is not a standard GitHub alert type.

### Misspelled Alert Types (preserved as regular quotes)

Misspelled standard types should also be preserved as regular quotes.

> [!NOOT] This misspelled NOTE should be a regular quote.

> [!WARNNG] This misspelled WARNING should be a regular quote.

### Malformed Alert Syntax (preserved as regular quotes)

Various malformed alert syntaxes should be preserved as regular quotes.

> [NOTE] Missing exclamation mark - regular quote.

> [!] Empty alert type - regular quote.

## 16. Template Tags (Markdoc/Jinja/Nunjucks)

Template-style tags should be kept as atomic units during line wrapping.

### Inline Template Tags

This paragraph contains {% if $condition %} inline template tags {% endif %} that should
stay intact and not be split across lines even when wrapping occurs in a long paragraph
like this one.

A Jinja comment {# this is a comment #} should not be split across lines.

Variable interpolation like {{ user.name }} should stay together as one unit.

### Block Template Tags

{% callout type="warning" %}
This is a callout block.
The content inside should wrap normally, but the opening and closing tags should remain
on their own lines and not be joined with surrounding text.
{% /callout %}

{% if $showAdvanced %}

This conditional content is between block tags.
It should be wrapped but the tags themselves should stay on their own lines.

{% /if %}

### Self-Closing and Complex Tags

Some text with {% partial file="snippet.md" /%} self-closing tags inline in a longer
paragraph that will wrap.

Complex attributes {% city name="San Francisco" coordinates=[37.7749, -122.4194] %}
should stay atomic even with arrays and objects.

### Edge Cases

Long tag:
{% very_long_tag_name with="many" attributes="here" and="more" values="too" /%}

Jinja blocks: {% block content %}This is the content{% endblock %}

Nunjucks raw block: {% raw %}This {{ won't }} be {% processed %}{% endraw %}

## 17. HTML Comments and Inline Code Preservation

HTML comments and inline code should be preserved correctly without being forced to
separate lines.

### Inline HTML Comments

This is text with <!-- a comment --> inline that should stay on the same line.

A paragraph with <!-- an inline comment --> should keep the comment together with
surrounding text during wrapping.

### Block HTML Comments

Block comments on their own line stay separate:

<!-- This is a block comment -->

### Inline Code with Special Syntax

Inline code with template-like syntax must be preserved exactly:

| Markdoc Form | Comment Form |
| --- | --- |
| `{% tag attr="val" %}` | `<!--% tag attr="val" -->` |
| `{% /tag %}` | `<!--% /tag -->` |
| `{% tag /%}` | `<!--% tag /-->` |

**Recommended approach: Preprocessor (Approach 1) with Option A syntax
(`<!--% ... -->`)**

Consider if editor support for `<!--{% %}-->` wrapper syntax is valuable.

### Edge Cases for Code Spans

Simple code: `some-code` stays together.

Code with spaces: `code with spaces inside` stays together.

Code with HTML-like content: `<div class="foo">bar</div>` stays together.

Code with comment-like content: `<!-- not a real comment -->` stays together.

### Single-Word Code Spans (Regression Test)

Single-word inline code should NOT be incorrectly coalesced with following text:

- Convex actions access env vars via `getRequiredEnv()` and must live in files with
  `"use node"`.

The word before inline code (like “via”) should not wrap to a new line leaving the code
on the next line. Single-word inline code like `foo()` and `bar` should stay atomic but
not consume following words.

## 18. Markdoc/Markform Tag Newline Preservation

These tests verify that newlines around Jinja/Markdoc tags and HTML comment tags are
preserved, which is critical for Markform and similar systems.

### Issue 1: Content After Opening Tags

Opening tags should preserve the newline after them:

{% description ref="example" %}
This is a multi-line description.
It should remain on separate lines after the tag.
{% /description %}

<!-- f:description ref="example" -->
HTML comment opening tag should also preserve newlines.
Content should start on a new line.
<!-- /f:description -->

### Issue 2: Closing Tags After Lists

Closing tags should NOT be merged onto list item lines:

{% field kind="single_select" id="choice" label="Choice" %}

- [ ] Option A {% #option_a %}
- [ ] Option B {% #option_b %}
- [ ] Option C {% #option_c %}

{% /field %}

<!-- f:field kind="select" id="choice" -->

- Option 1 <!-- #opt1 -->
- Option 2 <!-- #opt2 -->
- Option 3 <!-- #opt3 -->

<!-- /f:field -->

### Issue 3: Same-Line Tag Pairs

Empty fields with paired tags on the same line should stay together:

{% field kind="string" id="email" label="Email" required=true placeholder="email@example.com" %}{% /field %}

<!-- f:field kind="string" id="name" --><!-- /f:field -->

A longer example:
{% field kind="text" id="description" label="Description" maxlength=500 %}{% /field %}
with text after.

### Issue 3a: Backslash in Attributes

Backslashes that are NOT CommonMark escape sequences are preserved.
Note: `\.` is a valid CommonMark escape (escaped period), so use `\\.` in source.
Characters like `\+`, `\-`, `\s` are NOT CommonMark escapes and are preserved.

{% field kind="string" id="phone" pattern="^\+?[0-9\-\s]+$" %}{% /field %}

### Issue 5: Nested Tags

Nested tag structures should preserve newlines between each tag:

{% form id="contact" %}
{% group id="personal" title="Personal Information" %}
{% field kind="string" id="name" label="Name" required=true %}{% /field %}
{% field kind="string" id="email" label="Email" %}{% /field %}
{% /group %}
{% group id="message" title="Your Message" %}
{% field kind="text" id="body" label="Message" %}{% /field %}
{% /group %}
{% /form %}

### Issue 6: Tables Inside Tags

Tables within tags should have their structure preserved (blank lines around block
content required):

{% field kind="table" id="data" label="Data Table" %}

| Name | Value |
| --- | --- |
| A | 1 |
| B | 2 |

{% /field %}

### Issue 6a: Tables with Various Tag Types

Tables inside Jinja-style tags without blank lines (should be normalized to have blank
lines):

{% table_container id="pricing" %}

| Plan | Price | Features |
| --- | --- | --- |
| Free | $0 | Basic |
| Pro | $10 | Advanced |

{% /table_container %}

Tables inside HTML comment tags without blank lines:

<!-- f:table id="comparison" -->

| Feature | Product A | Product B |
| --- | --- | --- |
| Speed | Fast | Faster |
| Cost | Low | Medium |

<!-- /f:table -->

Tables inside Jinja variable tags (edge case):

{{ table_header }}

| Column 1 | Column 2 |
| --- | --- |
| Data 1 | Data 2 |

{{ table_footer }}

Tables with proper blank lines already (should be unchanged):

{% data_grid id="users" %}

| User | Role |
| --- | --- |
| Alice | Admin |
| Bob | Editor |

{% /data_grid %}

<!-- f:spreadsheet id="data" -->

| Item | Count |
| --- | --- |
| Apples | 5 |
| Oranges | 3 |

<!-- /f:spreadsheet -->

### Issue 6b: Paragraph Text with Tags (No Extra Blank Lines)

Regular paragraph text between tags should NOT get extra blank lines:

{% note %}
This is a simple note with no lists or tables.
Just plain paragraph text that wraps normally.
{% /note %}

<!-- f:warning -->
This warning contains only paragraph text.
No block elements here, so no extra blank lines needed.
<!-- /f:warning -->

{% tip title="Helpful Tip" %}
Here is some helpful advice in paragraph form.
It spans multiple sentences but is still just a paragraph.
{% /tip %}

### Issue 6c: Self-Closing Tags

Self-closing Jinja tags (tags without a separate closing tag):

{% break %}

{% set user_count = 42 %}

{% include "header.html" %}

Self-closing HTML comment tags:

<!-- note: This is a standalone annotation -->

<!-- TODO: Refactor this section -->

<!-- @deprecated Use new_function instead -->

Self-closing tags with tables:

{% divider style="double" /%}

| Before Divider | After Divider |
| --- | --- |
| A | B |

{% spacer height="20" /%}

<!-- separator -->

| Item | Value |
| --- | --- |
| X | 1 |

<!-- end-section -->

### Issue 7: Multi-Line Opening Tags (GitHub Issue #17)

When an opening tag is long enough to wrap across multiple lines, the closing tag should
be placed on its own line to avoid triggering a Markdoc parser bug.

This tag is long enough to wrap and should have its closing tag on a separate line:

{% field kind="number" id="age" label="Your Age" role="user" required=true min=0 max=150 integer=true placeholder="Enter your age" %}{% /field %}

HTML comment version:

<!-- f:field kind="number" id="score" label="Score" role="user" required=true min=0 max=100 integer=true placeholder="Enter score" --><!-- /f:field -->

Short tags that fit on one line should remain together:

{% field kind="string" id="name" %}{% /field %}

<!-- f:field id="email" --><!-- /f:field -->

### Issue 8: Continuation Lines with Tags

List items with tags on continuation lines should NOT have extra blank lines inserted.
The indented tag is part of the list item content, not a separate tag block.

**Phase 0 - Repository Setup:**

- [ ] 0.1-0.2: Verify reference repos and initialize Bun monorepo with workspaces
  <!-- #kg-11h2 -->

- [ ] 0.3: Configure TypeScript with strict settings (tsconfig.base.json)
  <!-- #kg-32zz -->

- [ ] 0.4: Configure Biome for formatting and linting <!-- #kg-ibof -->

### Mixed Content Test

A form with various content types:

{% form id="survey" title="Customer Survey" %}

{% description %}
Please complete this survey to help us improve our service.
Your feedback is valuable to us.
{% /description %}

{% field kind="single_select" id="rating" label="Overall Rating" required=true %}

- [ ] Excellent {% #excellent %}
- [ ] Good {% #good %}
- [ ] Fair {% #fair %}
- [ ] Poor {% #poor %}

{% /field %}

{% field kind="text" id="comments" label="Additional Comments" placeholder="Enter your comments here..." %}{% /field %}

{% /form %}

## Strikethrough and Tildes

Standard double-tilde ~~strikethrough~~ is the most common form and should always be
preserved. Single-tilde ~~strikethrough~~ is also valid GFM and should be normalized to
double tildes.

Here are some ~~deleted words~~ in a sentence.
And ~~more deleted words~~ in another sentence.

Multiple ~~first~~ and ~~second~~ strikethroughs on one line work fine.

### Tildes as “approximately” (not strikethrough)

Tildes before numbers are commonly used to mean “approximately” and must not be treated
as strikethrough:

Target: ~60 seconds, ~130 words total

The meeting lasted ~45 minutes.
We had ~20 attendees.
The cost was ~$500.

Performance improved from ~200ms to ~50ms, a ~4x improvement.

There were ~1,000 users and ~500 active sessions.

### Escaped tildes

Escaped tildes should be preserved: \~not strikethrough\~

### Edge cases

A lone tilde ~ in text is fine.

Tildes at the end: the value is ~~100~~.

A ~~long strikethrough that spans many words in a single paragraph and may get wrapped
across lines during formatting~~ should be handled.

## Smart Quoting in Containers

This section tests smart quoting in various container types.

### Table Cells with Quotes

| Description | Command |
| --- | --- |
| “There’s a bug where …” | `tbd create "..." --type=bug` |
| “Create a task” | `tbd create "..." --type=task` or `--type=feature` |

### Blockquote with Quotes Spanning Code Spans

> **Tell the user:** “First, I’ll make sure the `markform` command is installed.”

### Strikethrough with Quotes

Here is ~~“deleted” and don’t~~ some text.

### Quotes Spanning Emphasis and Links

He said “this is *really* important.”
She read “the [documentation](https://example.com) first.”

## Summary

All these corner cases should format consistently and predictably.