►
From YouTube: Preserve unchanged Markdown technical exploration
Description
On this call, the Editor team explores the problem of preserving unchanged Markdown in the Content Editor and a potential solution for it.
A
Hello,
everyone,
so
I'm
africa
from
the
ather
team
and
today
we're
gonna,
be
exploring
the
preserve
and
change
markdown
problem
that
we
are
solving
in
the
continuator.
So
the
idea
is
that
we
are
going
to
spend
some
time
in
this
meeting,
understanding
the
problem
and
talking
about
a
solution
that
I
propose
and
pretty
much
like
working
with
the
with
the
team
to
evolve
this
proposal
and
collaborate
on
requirements.
A
This
is
the
first
call
of
a
series
of
weekly
calls
where
we
are
gonna
be
work
where
we
are
gonna
be
working
on
this
program.
So
this
one
is
pretty
much
like
a
high
level
overview
of
the
problem
and
probably
in
next
week
we
are
gonna,
be
doing
some
curing
sessions
or
we
can
just
like
continue
talking
about
this
and
I'm
providing
updates.
A
So
I
will
share
my
screen
immediately
because
I
created
yesterday
a
technical
design
document
where
I
described
the
problem
and
what
I
want
to
to
do
is
go
through
the
document
and
then
we
can
stop
discuss
any
section
that
is
of
interest.
A
So
I
think
that
yeah,
I'm
sharing
my
screen
now.
Can
you
see
my
screen.
A
Yeah
looks
like
a
like-
I
guess
so
yeah
so
before
we
jump
into
the
into
the
problem
and
into
a
prone
definition.
I
want
to
provide
some
background
about
why
this
problem
is
happening.
A
To
a
piece
of
text
with
two
or
more
different
syntax,
I
am
giving
a
an
example
of
this
here
with
with
creating
document
headings.
A
In
this
case,
you
can
see
that
you
can
use
the
atx
hidden
syntax
to
create
a
heading,
but
you
can
also
like
use
a
set
text
that
is
pretty
much
adding
a
horizontal
line
below
below
a
line
of
text.
A
A
The
second
important
piece
of
of
background
knowledge
is
that
is
a
way
that
the
content
editor
saves
changes
when
a
user
is
editing
markdown,
the
web
browser
doesn't
support
markdown
directly.
It
supports
html
right.
So
when
the
contentor
loads
a
markdown
document
into
a
con
loads,
a
marketing
document,
it
has
to
convert
this
markdown
into
another
format
to
display
in
the
web
browser.
In
the
case
of
the
continator.
It's
a
pros
mirror
document.
A
There
is
an
intermediate
format
between
them
and
the
content.
The
idea
is
that
the
transmitter
document
is
a
more
efficient
data
structure
to
interact
with
in
this
programming
of
doing,
we
see
we
caters,
so
the
continator
is
not
transforming
up
like
only
a
part
of
the
document
is
creating
is
converting
the
entire
markdown
file
into
this
format
and
when
the
user
saves
changes,
it's
transforming
this
object
back
to
the
back
to
markdown
and
it's
creating
the
markdown
from
scratch.
We
are.
A
We
call
this
this
process
serialization,
so
we
deserialize
the
mark
now
when
we
load
the
document
into
the
container
and
we
serialize
it
back
when
we
save
changes.
B
Cool
which
way
is
the
serialization
html,
the
markdown.
A
A
Down
as
a
it
is
a
string
right,
it's
it's
not
a
an
object
in
memory,
so
we
see
that
as
transforming
a
row
text
into
a
complex
data
structure
in
memory.
A
So
what
is
the
problem
when
we
are
saving
changes
in
the
content
network?
And
we
are
transforming
this
entire
document?
This
entire
cross
meter
object.
We
are
serializing
it
to
mark
down.
We
are
not
reusing
the
parts
of
the
original
document
that
didn't
change.
A
A
This,
where
the
list
marker
you
just
like
repeat
one
one,
one
one
and
then
the
markdown
printer
will
create
the
right
numbers
when
when
is
generating
html,
but
then
the
continuator
doesn't
know
that
it
doesn't
remember
that
and
it
has
its
own
formatting
preferences.
So
it
is
not
following
this:
it's
not
using
this
format
of
list
of
order
disks.
A
What
is
doing
is
just
like
inserting
the
sequential
numbers,
so
that's
a
problem,
because
the
container,
then
is
removing
a
lot
of
formatting
preferences
that
the
user
has
and
at
the
same
time,
when,
in
a
common
situation
at
gitlab,
where
you
are
modifying
a
file,
you
want,
you
create
a
merch
request
or
you
create.
You
create
just
like
some
sort
of
file
of
change
that
should
be
published
and
reviewed.
A
A
D
A
D
A
But
if,
if
it
is
about
the
problem,
perhaps
we
can
talk
about
those
questions
now
and
then
we
can.
You
know
like
just
to
make
the
the
problem
completely
clear.
D
Okay,
so,
okay,
fair
enough,
you
say
that
the
the
main
problem
is
that
content
editor
sort
of
has
so
to
speak,
has
its
own
opinion
on
the
preferences
of
how
to
format
the
document
and
that's
where
the
the
main
problem
lies
is
it
is
it?
Is
it
technically
possible
to
somehow
synchronize
the
settings
in
the
in
the
content,
editor
and
user
settings
slash
source
editor?
If
we're
talking
about
switching
from
stores
to
content.
A
Yes,
it
is
possible
and
we
could
just
like
configure
the
markdown
serializer
to
understand
those
preferences,
but
there
is
a.
There
is
a
problem
that
I
was
talking,
as
is
a
user
has
intentional
formatting
preferences,
but
that's
not
usually
the
case.
The
case
is
that
there
are,
there
could
be
a
markdown
file
where
there
are
five
users
working
on
it
and
there
is
a
user
that
has
a
formatting
preference
for
headings.
A
Another
one
is
input,
is
writing
headings
in
another
way,
so
that
would
be
helpful
if,
if
every
markdown
file
is
only
implemented
by
it's
only
edited
by
a
single
person,
that's
not
usually
the
case,
and
even
when
it
is
a
single
person
like
even
I
I
should
say
like.
I
am
that
kind
of
person
that
doesn't
have
like
maybe
one
day,
I'm
writing,
at
least
in
one
way
and
then
another
day,
I'm
switching
a
formatting
preference,
a
formatting
preferences.
B
B
A
That
that's
one
of
the
examples
in
this
screenshot
right
this.
This
is
a
single
paragraph
according
to
markdown,
because
they
they
live
in
there.
There
isn't
a
blank
line
between
these
two
pieces
of
text.
The
container
is
just
like
doing
the
right
thing.
That
is
like
compressing
it
and
putting
it
one
sentence
after
the
other,
and
we
don't
want
that.
We
want
to
preserve
why
the
user,
like
decided
to
put
it
in
that
in
that
way,.
E
I
have
a
question
for
you:
how
does
the
content
editor
today
treat
html
comments?
So
if
I
have
an
html
comment
and
then
I
open
up
the
content
editor,
does
that
get
completely
removed
or
is
that
preserved
somehow
or.
E
C
Yeah,
it's
it
destroys
them.
It
removes
everything
in
the
comments
because
html
nodes,
sorry
comments,
are
not
something
we
recognize
as
a
valid
node.
C
Yeah
and
we
actually
use
html
comments
to
so
use,
do
source
mapping
so
yeah.
C
So
it's
hard
to
keep
question
comments
because
it's
they
don't
have
a
selector
or
something
that
you
can
refer
to
them.
So,
like
the
passing
process
of
of
tape,
tab
or
or
closed
mirror
like
it
does
it's
not
going
to
work
with
the
html
conference?
That's
a
little
bit
tricky.
A
Got
it?
Hopefully,
I
think
that
in
the
case
of
if,
if
we
like,
when
we
talk
about
the
solution,
we
are
adopting
a
client
side,
martial
parser,
and
in
that
case
it
wouldn't
be
like
browsers
that
ignore
comments,
it
could
be
more
like.
Oh
did,
he
have
an
html
note
and
we
can
preserve
it
if
we
want
yeah,
let's
go
to
the
to
the
solution.
A
So
what?
What
is
our
goal?
Our
high
level,
our
high
level
functional
goal,
is
that
we
want
to
preserve
the
parts
of
the
markdown
of
the
markdown
file
that
the
user
didn't
change.
It's
like
nitpicking.
A
If
the
user
is
working
on
a
part
of
the
document,
we
want
to
focus
on
that
and
everything
else
we
are.
We
are
recovering
that
content
from
the
original
markdown
file.
Don't
change
one!
What
does
that?
Look
like
well,
the
process
of
preserving
change.
Markdown
has
two
phases.
We
have
to
detect
changes,
detect
changes
and
then
we
need
to
to
use
source
maps
to
to
retrieve
the
unchanged
market.
A
So
what
is
change
detection?
The
idea
is
like
with
change
detection.
We
want
to
say:
hey
the
user,
only
modified
this
paragraph,
so,
let's
find
within
the
pros,
mirror
document
the
paragraph
that
was
changed
and
let's
generate
markdown
for
that.
For
all
of
the
other
notes
within
the
document,
we
want
to
identify
them
and
use
the
source
mapping
to
retrieve
the
original
file.
So
why?
And
how
can
we
do
that?
A
We
can
do
that
because
frost
mirror
documents
are
in
persistent
data
structures
and
what
that
means
is
that
when
you
apply
an
operation
to
a
to
a
document,
we
get
another
document
we
need,
we
get
a
new
version
of
it
and
if
we
want
to-
and
that
has
a
big
benefit-
that
we
can
compare
two
versions
of
the
document
and
detect
with
each
of
the
nodes
change.
A
We
can
leave
like
the
solution,
questions
for
the
end
or,
if
you
want,
if
you
have
any
questions
now,
it's
also
okay
to
to
ask
them.
A
So
we
detected
and
identified
what
changed
in
the
document.
Now
we
need
to
find
a
way
of
saying:
hey.
You
see
this
node.
A
This
node
is
related
to
this
part
of
the
of
the
source
of
the
of
the
source
of
the
modern
file
of
the
original
marathon
file
that
source
and
we
converted
into
a
prosecutor
document
and
the
best
way
that
we
found
to
do
this
is
using
source
source
mapping
and
for
doing
that
we
need
a
very
sophisticated
way,
a
very
sophisticated
version
of
of
source
location,
one
where
we
can
really
map
every
type
of
node
in
a
marital
document
to
a
renal
source
and
the
best
way
that
we've
found
to
do
this
is
using
a
client-side,
markdown
parser,
the
one
that
we
prefer
so
far
is
remark.
A
It
has
really
sophisticated
source
location
metadata
and
I'm
gonna
show
you
here.
I
have
a
screenshot
in
there,
but,
let's
just
like
go
to
asd
explorer,
these
are
a
very
cool
tool
where
we
can
just
like
parse
the
markdown
file.
A
We
can
just
like
play
with
the
with
the
document
and
see
the
the
source,
the
source
map,
and
all
of
that,
like
you,
see
that
you
know,
an
ast
obviously
has
tokens
to
represent
every
element
within
the
between
the
american
language
and
the
grammar
to
organize
all
of
those
elements
in
a
way
that
makes
sense
right
according
to
the
semantics,
so
you
see
the
the
the
ast
by
the
way,
this
ast
also
has
a
name
that
is
mdas.
A
A
A
So
it's
like
it's
very
accurate
and
we
can
like
retrieve
all
of
that
information
from
from
the
source
map
to
sorry
from
the
ast
so
yeah,
it's
like
how
now
that,
given
that
we
have
an
ast
and
given
that
we
have
a
client,
a
client-side,
markdown
parser,
what
do
we
do
currently
the
way
that
the
continuator
works
is
that
we
send
mark
down
to
the
back-end
and
we
produce
html
and
h
that
html
is
prospero.
A
Provide,
builds,
build
built-in
support
for
it,
so
we
just
passed
that
html
transmitter
has
a
dom
parser
that
converts
it
that
converts
that
html
into
a
prosperous
document,
and
we
populate
the
continent
with
that
prosperous
document.
What
this
solution
proposes
is
that
we
remove
the
backend
api
completely
and
we
remove
the
html
completely
as
well.
A
We've
removed
all
the
html
steps
and
we
use
remark
to
parse
the
markdown
and
produce
an
ast,
and
then
we
implement
a
custom
solution
that
doesn't
exist
yet
that
converts
this
ast
directly
into
a
pro
speaker
document,
and
then
we
again
populate
that
that
ast
that
prosperous
document
to
the
content
editor
does
it
make
sense.
B
A
Well,
tip
top
is
a
hug
wrapper
around
crossmaker
and
tiptop
consumes
and
generates
prosperous
documents.
So,
when
we
create
like
a
prosperous
document,
has
a
schema
that
defines
the
structure
of
the
document
and
what
is
allowed
in
what
is
and
what
is
denied
by
the
way
should
probably
be
paying
attention
to
the
race
hunt
picture
right.
It's
like
my
first
time.
Oh.
A
Worries
so
the
way
that
we
that
we
create
and
generate
that
schema
is
through
tip,
tap.
Tita
is
consuming
a
pros,
mirror
document.
Does
it
make
sense?
It's
like
tiptop
is
just
a
way
of
of
using
prospect
or
in
an
easier
way.
B
B
A
D
Dennis
yeah,
I'm
I
think
this
like
going
this
through
the
ast
is
a
really
smart
thing.
A
Those,
let's
see,
let's
reverse
the
problem
that
that
I
showed
in
there
that
I
show
up
showed
in
the
in
the
previous
in
the
screenshot
that
I
put
in
the
document
that
it
was
like.
Oh,
this
probably
is
a
a
single
paragraph,
so
this
shouldn't
be
like
the
touchscreen.
Sorry
pros,
mirror
shouldn't
be
doing
that
this,
like
transforming
it
into
something
like
this,
but
the
one
is
like
when
we
restore
this
document.
If
I
didn't
change
this
paragraph
this
paragraph,
I
want
to
keep
this
a
line
break
here.
A
D
It's
it's
preserving
and
it's
visually
it's
it's
noticeable
in
the
value
that
we
just
insert
the
new
line
character
there,
but
the
the
value
still
shows
it
as
one
single
paragraph.
Okay,
that's
cool!
A
I.E
obviously
like
this
is
a
very
complex
problem
and
I
I
couldn't
be
100
confident
of
how
much
we
can
preserve,
but
I've
been
like
especially
focused
on
on
two
type
of
problems
that
we
couldn't
solve
with
the
backhand
that
is
first,
preserving
inline
elements
that
if
we
are
changing
a
part
of
the
paragraph
that
we
can
preserve
the
rest
of
the
paragraph-
and
we
can
just
like
generally
mark
down
for
that
part
of
the
paragraph
that
we
change
and
that
is
possible
here-
preserving
white
spaces
that
that
is
possible
as
well.
A
D
That
would
be,
but
still
it
would
would
mean
that
people
get
commits
with
the
changes
that
they
didn't
intend
to
make
right.
So
in
this
particular
case,
I'm
not
sure
whether
we
will
be
satisfied
with
95
or
even
98
of
the
result,
but
that's
that's
something
that
we
have
to
give
it
give
a
go.
I
I
still
believe
or
like
not
believe
I
don't
have
enough
experience
with
ast
to
to
to
believe
in
it,
but
I
still
think
that
ast
will
produce
accurate
enough
model
for
us
to
to
to
work
with.
A
Let's
see,
oh
basically,
this
has
a
meaning
in
in
markdown.
A
A
Okay,
so
let's
move
on
so
let's
talk
about
the
the
other
part
of
the
cycle
that
is
from
concentrator
to
markdown.
B
The
one
point
I
was
gonna
make
is
even
that
98
it'll
at
least
be
in
the
same
area
of
the
document.
They
were
editing,
it'll,
never
be
like
in
a
completely
you
know,
different
line
or.
A
A
Can
be
100
confident
that
in
the
notes,
the
block
notes
and
what
what
I
mean
by
block
node
is
paragraph
list
item
block
quote
like
all
of
that
headings
as
well
will
be
completely
restored
because
it's
a
like
we
are.
If,
if
there
are
inline
elements,
that's
a
bit
more
difficult,
but
when
it
is
a
block
element,
we
just
like
completely
retrieve
it
from
the
original
source.
A
Okay,
so
from
continuator
to
markdown,
I
this
part
is
simple
right
like
we
know,
with
no
changes
with
no
change
and
if
it
change,
we
just
go
and
generate
new
markdown.
If
it
didn't
change,
we
reuse
existing
markdown
from
the
removal
file.
A
So,
let's
jump
into
the
technical
challenges,
there
are
two
technical
challenges
influence.
This
is
implementing
this
solution.
The
first
one
is
parsing
gitlab
flavor
markdown.
A
There
aren't
any
third
party
library
that
supports
git,
that
flavor
markdown
extensions.
A
We
will
have
to
implement
it
on
our
own
and
we
are
going
to
have
to
implement
it
for
every
feature
that
that
is
creating
new
syntax.
In
the
document
I
listed
here
all
of
these
pictures
here
they
are
introducing
new
syntax.
A
We
need
to
implement
new
tokens
in
the
parser
and
yeah,
like
there
is
augmentation
available
for
this
remark
uses
an
underlying
engine
that
is
called
micromark,
which
is
very
small
and
fast,
but
usually
implementing
tokens
is
a
it's
sort
of
a
a
messy
problem.
There
are
many
exceptions
in
the
syntax.
A
We
don't
have
and
expect
a
proper
respect
of
these
features.
We
only
have
six
samples
we
and
we
have
the
documentation,
so
that
makes
it
more
difficult,
because
if
we
had
unexpected,
we
would
have
under
that
respect
all
of
the
edge
cases,
and
it
would
be
just
like
implementing
this,
but
we
don't
have
that
that
kind
of
resource
right
now.
B
So
one
of
the
things
that
I'm
planning
to
do-
and
I've
already
talked
with
david
and
eric
about
this-
is
the
the
current
golden
master
respect
that
we
have
to
do.
What
brett
walker
asked
us
to
do
and
try
to
make
it
everything
that
is
in
common
mark
or
in
github
flavored
markdown
make
it
match
exactly
the
names
of
the
marks.
B
The
structure,
every
example
that
they
have
will
be
represented
one
to
one
in
our
golden
master,
and
then
we
can
be
sure
that
at
least
that's
ensuring
we,
we
never
deviate
from
common
mark
or
github
flavored
markdown
and
then
just
add
only
the
superset
of
what
is
in
get
lab.
Flavor
markdown
that
you
list
here.
So
it's
it's.
Will
that
help
with
the
problem
you
just
said
of,
like
possibly
regressing
of
breaking
other
marks.
If
we
extend
the
ast
for
a
new
one,
you
know
inadvertently.
A
It
helps
the
golden
master.
Specs
now
have
two
parts:
a
markdown
example
an
html
example.
We
are
skipping
the
html
part
completely
in
the
solution,
but
we
have
a
lot
of.
We
will
have
a
lot
of
work
done
examples
that
we
can
use
as
a
foundation
to
test
the
parser
for
each
of
these
features.
A
B
A
C
B
A
That's
another
way
of
putting
it
yeah
like
we
could
do
that
that,
like
we
could
say,
hey,
let's
pass
the
mark
down
to
the
mark.
The
markdown
example
to
the
marathon
parser,
the
markdown
parser
generates
approach,
mirror
document,
and
then
we
can
generate
the
html
with
the
prosimular
and
ensure
that
it's
the
same
as
a
golden
master.
E
That's
right,
it
seems
like
the
the
gold
master
is
going
to
be
really
helpful
at
testing
that
our
remark,
plus
plugins
and
configurations,
is
the
same
as
the
back
end,
and
I
think
that's
so
really
really.
B
Yeah,
that's
part
of
part
of
the
coverage
and
ensuring
that
the
front
end
stays
consistent
with
the
vacuum,
but
we'll
have
to
have,
like
I
said,
another
set
of
tests
that
are
like
marked
down
to
ast
and
those
will
be
probably
unit
tests.
A
D
I'm
wondering
how
this
will
work
in
the
in
case
of
of
the
code
snippets
in
the
in
the
document
so
code.
Snippets,
mermaid,
charts
well,
though,
survive
this
transformation,
because
those
those
are
technically
like
I
from
what
I
understand.
Those
are
gitlab,
specific
sugars
as
well,
so
probably
those
those
have
to
be
treated
somehow
special
as
well.
No.
A
Okay,
so
when
we
pass
the
markdown
file,
let's
say
that
we
have
a
mermaid
diagram.
We
have
a
code
snippet,
we
are
passing
well.
This
is
a
way
of
declaring
code
snippets,
so
we
will
have.
We
will
be
passing
something
like
like
this,
that
contains,
let's
say
that
we
have
a
mermaid
diagram.
A
What
we
are
passing
to
the
client
to
a
clean
side.
Parser
is
just
a
the
code
block,
but
this
is
a
code
blocked
code,
simple,
just
like
any
other
code
snippet.
We
are
not
dealing
with
the
special
treatment
that
gitlab
is
providing
right.
Okay,.
A
E
Much
yeah,
oh
for
the
sake,
for
the
sake
of
the
time,
I've
got
a
couple
of
questions
on
the
agenda.
Should
I
ask
them
now
or
do
you
do
you
want
to
if
you
want
to
move
forward
or.
E
Okay,
one
question
was
about
referring
to
the
detecting
changes
so
because
this
is
a
tree,
let's
say
the
user
takes
one
node
cuts
it
and
moves
it
to
the
bottom
of
the
document
or
something.
E
How
can
we
detect
that?
Well,
all
the
inner
contents
of
that
note
didn't
necessarily
change.
E
And
it
was
just
moved,
would
we
be
able
to
do
that?
Are
we
able?
Is
there
some
trace
stability
between
here's?
The
original
note
of
this
and
the
new
note
of
it
does
that
make
question
make
sense.
It
makes
a
lot
of
sense.
A
In
postmeter,
the
notes
are
value
objects,
so
they
don't
have
identity.
They
don't
have
reference,
it
could
be,
it
would
work
like
a
new
copy
of
the
object.
A
So
from
that
point
of
view,
given
that
the
source
location
is
pointing
to
the
previous
part
of
the
document
like
to
apply
to
a
place
where
it
was
before,
I
think
that
what
will
happen
is
that,
if
prosperity
received
values
that
are
identical
in
terms
of
the
data
that
they
contain,
they
will
be
the
same.
A
Know
yeah,
that's
a
key
part.
If
you
cut
content
in
prospector,
it
will
just
like
put
it
as
html
on
the
clipboard
and
then
when
you
paste
it
again,
it
will
be
just
like
parsing
that
html
from
scratch
and
creating
new
notes.
So
it
will
lose
that
information.
B
D
The
point
of
the
point
paul
made
was
that
like,
if
you,
if
the,
if
the
tax
part
that
you
cut,
contains
all
those
like
extra
spaces
and
things
like
this,
those
won't
be
preserved
when
you
place
them
to
the
new
place.
So
that's
that's
the
main
issue.
I'm
I'm
not
sure
whether
it's
an
issue
or
not,
but
that's
that's
just
something
that
that
will
happen.
We
will
lose
the
formatting
in
this
case.
E
Okay,
one
more
question:
sorry
chad,
were
you
gonna,
say
something.
B
E
The
other
question
I
had
was
about
so
like
the
ast
is
a
tree,
so
I
change
some.
You
know
span
within
a
paragraph
or
whatever
I
change
something
small.
E
Are
we
starting
at
the
root
and
like
parsing
through,
like
the
whole
tree
or
is,
are
we
keeping
track
of
changes
like
I
like?
I
know
just
this
little
bit
was
changed
and
so
does
that
question
make
sense.
I'm
I'm
trying
to
understand
the
detecting
changes
bit
and
especially
with
the
fact
that
nodes
can
contain
nodes.
E
A
B
D
A
D
E
B
E
Maybe
maybe
this
is
this
something
that
we
anticipate
on
detecting
as
changes
are
being
made,
or
is
this
something
that,
like
given
two
brand
new
pros
mirrored
documents
were
able
to
determine
what
was
type
story
like.
A
Exactly
like
we,
we
start
with
document
d1.
That
is
the
one
that
generated
the
the
parsing
process
and
the
loading
the
document
process,
and
then
we
end
up
with
this
document.
There
is
no
b2,
it's
probably
b
100
or
v1,
and
we,
the
algorithm,
the
one
that
we
implemented
in
in
in
a
an
attempt
that
we
had
at
solving
this
problem
last
year,
was
that
we
we
were
comparing
both
traces
and
detecting,
which
of
the
nodes,
change.
Well,
you've
reviewed
that
that
nurse
request.
E
Okay,
so
this
this
is,
this
is
given
two
brand
new
documents
that
were
able
to
determine
what
leaves
of
the
tree
have
changed.
E
E
A
Think
that
what
matters
here
is
that
a
node
that
contain
that
contains,
like
other
nodes,
child
node
leaves,
doesn't
have
content
on
itself
to
indicate
that
they
know
change.
E
A
new
child
treated
as
it's
changed
like
I
don't
know.
Maybe
we
don't-
maybe
maybe
I
am
over
complicating
it,
so
I'm
coming
from
keeping
track
of
changes
in
file
systems
and
so
file
systems
is
a
tree
as
well
and
those
changes
propagate
up
where
like.
If
I
make
a
change
on
a
nested
file,
it
treats
it
as
that
folder
has
changed
and
that
parent
folder
has
changed,
and
so
I
see
that
as
from
files,
this
is
a
really
great
way
to
track,
not
track
changes
but
quickly
calculate
changes.
E
E
Right
it
bubbles
up
right,
and
so
I
see
this
is
a
tree
structure
too.
How
is
this
I'm
really
curious
like
how
is
this
algorithm,
maybe
similar
or
not
similar
and
like
and
maybe-
and
I
think
I
need
to-
I
need
to
hear
more
about
what
you're
thinking
and
I
know
we're
at
times,
so
I'm
just
throwing
these
out
there
for
my
own
learning
of
what
you're,
anticipating
from
this
this
process,
because.
A
I
think
I
think
that
what
I
could
do,
because
I
also
have-
I
feel,
uncertain
about
it
now
that
you
are
asking
it
so
I
think
that
something
that
we
could
do
is
write
some
unit
tests
with
all
of
those
cases
and
just
start
like
putting
some
examples
in
there
yeah
wow.
E
Yeah,
it's
a
freaking
good
idea
and
I
have
crazy
ideas
of
if
we
even
wanted
to
do.
That
kind
of.
Like
oh
and
nodes
move.
E
I
don't
know
if
it's
a
good
idea
or
not,
but
like
a
lot
of
the
the
git
algorithm
is
very
related
to
this,
which
is
I
find
just
interesting,
and
I
don't
know
if
it's
going
to
be
helpful
or
not,
but
that's
just
interesting
yeah
doing
some
unit
tests
to
for
some
of
those
edge
cases.
That
would
be
amazing.
A
B
A
I
don't
think
that
it's
like
they
decouple
position
from
the
tree
itself
and
it's
calculated
it's
computed.
So
probably
that's
something
that
that
allows
the
document
to
be
to
be
pristine,
even
when
you
know
like
the
position
changes.
E
A
Thanks
for
for
the
awesome
questions
paul,
I
think
that
we're
gonna
refine
this
this
solution.
So
we
can,
you
know,
definitely
a
little
bit
more
into
that.
E
A
Well
shot,
it
seems
like
it's
a
two
of
us
now.
A
Cool,
so
I
think
that
this
is
very
cool,
because
we
talked
about
this.
This
other
challenge
before
and
he
said
one
about
resolving
references
in
in
the
documents.
A
So
there
is
a
gitlab
flavor
markdown
allows
like
you,
can
use
custom
characters
to
reference
issues
and
merge
requests
and
milestones
and
in
the
backend
the
way
that
they,
the
vacuum
parser
resolve.
Those
references
is
by
creating
the
database,
and
if
the
user
has
permissions
to
see
those
objects,
then
it
will
transform
those
characters
into
links,
but
obviously
we
cannot
do
that
in
the
in
the
client.
A
As
far
as
I
know,
so
what
this
solution
proposes
is
that
we
can.
A
We
can
just
defer
reference
resolution
to
another
stage.
For
example,
let's
say
that
we
display
all
of
those
references
in
the
continator
and
then
when
the
user
tries
to
interact
with
one
of
those
references,
we
can
query
the
backend
through
an
api
and
to
see
if
they
I
know
to
resolve
the
reference,
and
if
the
user
doesn't
have
permissions,
it
stays
like
that.
Otherwise
we
display
something
about
the
reference.
A
Another
option
is
just
like
from
the
beginning.
After
the
document
is
parsed.
We
can
send
a
graphical
graphical
query
and
that's
something
that
you
an
idea
that
you
share
with
me
before
and
is
that
well
rough
here
we
can
build
complex
queries
that
are
querying
like
completely
different
resources
in
a
single
call.
B
A
Yeah,
so
we
could
do
that
and
just
like
after
we
have
the
pros,
mirror
document,
we
we
populate
those
nodes
with
the
data
coming
from
the
backend.
B
So
I
have
one
question
like
for
a
given
reference:
could
the
way
it
is
rendered
changed
over
time
like
if
they
change
the
url
structure
or
the
route?
You
know
they
change
the
the
layout
of
the
route.
It
could
change
over
time
right.
B
Right
so
theoretically,
it
could
change
like,
while
the
document
is
being
rendered
like
they
roll
out
a
a
new
version
of
the
back-end
that
renders
this
particular
route
differently.
A
B
A
B
A
So
yeah,
that
is
the
second
challenge.
Well,
if
you
don't
have
any
other
questions,
the
last
section
is
about
norms,
and
this
is
about
performance.
We
probably
need
to
measure
performance
for
rendering
large
markdown
files.
This
is
something
that
can
take
even
a
minute
in
the
back
end,
probably
because
of
all
of
the
reference
and
resolutions
all
of
the
reference
resolution
that
is
happening
in
the
back
end
in
the
client.
It
could
take
a
lot
of
time
as
well.
A
A
B
Yeah
always
never
solve
a
problem
performance
problem
unless
you
have
completely
put
metrics
around
it
and
you
have
a
goal
of
what
metric
you're
trying
to
improve
but
yeah.
If
it
is
the
references
and
if
we
take
the
second
approach,
where
it's
just
a
refql
query
yeah
that
can
be
done
as
synchronously
and
can
hydrate
in
the
document
later.
B
And
then
you
know
all
of
the
links
are
normal
and
they're,
not
hydrated.
Yet
we
do
the
background
process.
The
graphql
query:
that's
gonna
go
get
the
reference
data,
but
then
they
go
and
change.
One
of
those
references
before
that
promise
resolves
from
the
background
is:
it
is
gonna,
break
everything
or.
A
No,
it
shouldn't.
We
have
two
ways
of
solving
that
we
can
make
those
references
read
only
not
as
plain
text,
so
they
become
tokens
that
are
immutable
and
they're
still
independent
notes.
A
B
B
A
That's
right,
I,
the
one
that
I
that
I
played
with
was
metallify
and
they
missed
the
mark
down
as
well.
A
So
yeah,
that's
that's!
That's
it
for
for
this
technical
exploration.
So
that's
the
only
part
chad
thanks
for
coming
and
thanks
for
your
questions
so
yeah
we
stay
in
touch
about
this
and
I'm
gonna
try
to
provide
some
updates
next
week.
This
same
time,.