►
Description
In this session we dive into reimplementing BrowserFS's OverlayFS for the Web IDE Remake.
A
Okay,
here
thanks
for
joining
us,
as
we
pair
on
some
things,
I'm
bringing
my
most
recent
work
to
you
all
which
I'm
excited
to
pair-
hopefully,
hopefully
it's
fun,
and
hopefully
it's
is
making
sense
because
it's
dealing
with
our
re-implementation
of
the
web,
not
re-implementation,
but
it's
just
yeah
I
guess
it
is
re-implantation
of.
A
Is
it
a
remaster?
Is
that
what
they
would
call
it
in
video
games
land?
It's
not
a
remaster,
because
it's
more
than
that,
it's
a
remake!
It's
a
remake
of
the
web
ID
using
vs
code
as
the
main
engine,
and
so
that's
really
exciting,
but
there's
parts
that
we
get
to
touch,
namely
creating
an
in-memory
file
system,
creating
in-memory,
Source
control
and
so
I
have
gone
down
this
route
and
discovered
an
issue
with
our
existing
file
system
implementation.
A
So,
thankfully,
the
third
party
module
that
we
were
using
isn't
doing
a
whole
lot
and
so
we're
just
gonna
copy
over
that
module
and
implement
it
ourselves,
potentially
in
a
in
a
nicer
way,
because
there
were
some
the
code
that
that
third
party
was
using
was
a
little
dated.
I
had
callbacks
everywhere,
so
we
could
make
I
know
my
internet's
a
little
laggy.
We
can
make
things
nicer
by
using
promises
and
hopefully
not
run
into
issues.
So
let
me
share
my
screen.
Hopefully
the
internet
stops
being
a
little
wonky.
A
When
I
mean
tell
me
if
you're
still
experiencing
lag
issues.
Are
we
good
right
now.
B
Every
so
often
asked
to
play
catch
up,
but
I
I
can
understand
what
you're
saying.
So.
That's
good.
Okay,.
A
All
right,
let's
try
it
out
so
there's
an
interesting
situation
here
with
the
BS
code
web
ID
and
this
path
that
we've
gone
down
to
implement
both
in-memory
file
system
and
keeping
track
of
changes.
It's
not
just
keeping
track
of
changes.
We
want
to
be
able
to
calculate
changes
at
any
time.
We
want
to
get
a
correct
calculation
of
what
has
actually
changed
since
when
you
first
opened
this
up
and
we
came
across
this
really
neat.
A
A
They
have
a
lot
of
different,
though
like
file
systems
like
they,
they
provide
an
in-memory
file
system.
They
provide
a
file
system
that
can
communicate
over
different
protocols
or
whatever,
but
they
also
provide
this
one
file
system
called
overlay,
FS
or
overlay
file
system
and
I
hadn't
heard
of
this
before.
A
B
In
just
about
it
sounds
quite
low
level,
if
that
makes
sense
like
one
of
those
things
where
I
guess
I
was
maybe
hoping
or
expecting
that
you
had
a
nice
abstraction
or
whatever
it's
called,
and
someone
had
done
the
hard
work
for
you.
A
So
yeah
so
overlay
FS,
we
did
have
an
abstraction
like
this
was
implemented
by
the
third
party
Library,
but
there's
bugs
with
it,
and
unfortunately,
this
this
Library
also
is
not
the
most
maintained.
B
I
did
my
duty
have
we
have
we
reached
out
to
say
if
it's
something
that
we
can
sort
of
Step
Up
and
not
exactly
take
ownership
of,
but.
A
That
would
be
cool,
I
I
don't
know.
So
it
is
interesting
to
see
like
how
this
is.
This
is
referenced.
A
lot
in
the
wild
I
think
part
of
it
foreign
part
of
the
reason
why
this
gets
referenced.
A
lot
is
because
it's
a
pretty
mature
and
sophisticated
implementation
of
nodes
file
system
API,
which
is
nice.
A
The
things
that
it's
not
nice
is
that
no
there's
not
a
lot
of
activity.
You
can
see
the
last
commit
was
a
while
ago,
so,
but
but
then
like
one,
could
one
could
question
of
well?
Is
there
not
a
lot
of
activity,
because
is
there
not
a
lot
of
activity
because
hey
we
implemented
the
API,
we're
done
or
is
there
normal
activity
because
I
don't
know-
or
maybe
there
is
more
stuff
to
do?
I
clearly
ran
into
some
bugs
we're
only
using
like
a
subset
of
this.
A
This
Library
so
like
maybe
down
the
road.
We
don't
even
need
it
right
now
we're
not
we're
trying
to
push
out
our
first
iteration.
We
have
a
timeline
that
we're
trying
to
push
this
first
iteration
forward.
So
we're
not
super
eager
on
changing
a
lot
of
things.
So
definitely
someone
eventually
maybe
will
move
away
from
browser.
A
Fs
is
is
a
question
that
we'll
be
considering
right
now,
we're
not
we're
not
considering
it,
because
we
want
to
get
the
first
iteration
out,
but
I
did
we
have
been
left
with
the
option
of
rather
than
building
on
top
of.
A
So
really,
the
situation
is,
there's
a
whole
bunch
of
there's
a
whole
bunch
of
methods
like
rename
and
reader
and
maker
that
we
just
have
to
implement
using
this
algorithm.
That's
the
situation.
A
Does
that
sound
fun
I've
already
done
a
number
of
these.
We
also
already
have
some
tests
for
this,
so
we
have
like
some
integration
tests
for
all
of
this,
too,
of
like
hey,
interacting
with
the
main
file
system,
we're
using
I
would
expect
you
know
these
things
to
change,
so
we
don't
have
unit
tests
for
this
new
unit
that
I'm
introducing,
but
we
do
have
some
like
unit
some
tests
for
some
of
these
things
in
integration,
which
is
nice
as
well.
A
That's
that's
good,
so
yeah
a
lot
of
this,
though
too.
So
you
see
a
lot
of
these
functions.
I'm
I've
added
a
comment
pointing
back
to
the
original
implementation.
A
And
so
a
lot
of
these
functions
kind
of
looking
at
what
was
the
business
Logic,
the
previous
the
third
party
library,
was
trying
to
do
here,
and
how
can
we
recreate
that?
But
with
rename
specifically,
that
was
one
of
the
buggy
scenarios
that
I
think
we
have
to
do
with
something
somewhat
different
and
I've
already
started
on
it.
A
I
do
want
to
ask
your
all
opinion
on
one
other
thing,
so
this
is
all
very
much
inspired
from
the
original
implementation
of
this
thing,
so
this
module
is
very
similar,
we're
exporting
a
class
which
extends
their
locked
file
system
thing.
This
is
all
browser
at
best
stuff
which
turns
on
locks
when
you're
making
operations
or
whatever.
A
But
then
they
have
this
like
internal
class,
which
is
actually
doing
the
main
implementation.
But
this
is
the
old
school
node
file
system
API,
so
everything
works
off
of
callbacks
and
it's
just
man,
it's
so
gnarly
I,
don't
want
to
work
with
bottlebacks,
so
I
took
this
pattern
and
this
pattern
feels
somewhat
somewhat
natural
to
me.
Dealing
with
you
know,
having
some
experience
with
like
languages
like
C,
plus,
where
often
like
implementation
and
headers
are
like
separated,
so
I
put
in
a
totally
separate
class.
A
C
Because
if
this
gets
us
away
from
the
callbacks,
this
sounds
and
it's
a
it's
a
pretty
clean
approach
in
my
opinion,
so
love
it.
A
I,
don't
think
this
is
the
first.
This
is
not
the
first
time
we
use
typescript,
but
the
other
one
of
the
other
more
prominent
places
we're
using
typescript
is
in
the
vs
code
extension,
our
official
gitlab
vs
code
extension
vs
code
typescript
and
we're
interfacing
with
all
these
we're
interfacing
with
deeply
with
the
vs
code
Library.
A
It
just
gets
so
much
benefit
using
typescript,
because
these
are
all
typed,
and
so
that's
that's
been
for
this
specific
problem,
especially
because
we're
not
a
lot
of
this
is
that
I
hate
this
term.
But
back
of
the
front
end
thing,
typescript
has
been
really
appropriate
and
helpful,
so
yeah
yeah
we're
in
typescript
land.
So
it's
kind
of
fun.
Have
you
have
you
done
typescript
before.
B
A
Okay,
yeah
well,
yeah,
that's
where
all
these
red
lines
are
coming
from
too
all
besides
also
just
having
errors
is
sometimes
these
aren't
I'm
not
adhering
to
the
types
which
is
great,
so
I
can
just
get
to
resolve
these
errors.
So,
let's
see,
let's
see
what
it's
like
thanks
for
thanks
for
helping
me
with
my
work.
A
I
know
that
Yonex,
probably
like
man
CSS,
looks
way
more
interesting.
Now,
I
wish
we
were
just
doing
CSS
animations,
that's
good,
okay,
so
right
now,
I'm
implementing
the
rename
method
that
before
I
do
that
I
would
like
to
maybe
I
can
get
a
feedback
loop
by
running
our
test
for
this
thing.
A
So
let
me
open
up
our
our
test
here
and
maybe
we
can
get
a
feedback
loop
going
on
all
right.
This
thing
just
failed
because
this
isn't
working
and
that's
fine
here
when
I
call
write
file,
it
expected
five
arguments,
but
I
only
got
one.
That's
pretty.
A
Yeah
yeah,
so
let
me
let
me
get
some
context
to
where
we're
at
so
rename
is
really
interesting
to
how
we
need
to
implement
this,
because
at
any
point
we
rename
we
are
either
going
to
have
the
thing
we're
renaming
is
gonna,
be
a
file
or
a
directory,
it
can
exist
in
writable
or
not
or
it
can
exist
in
readable
or
not
so
if
it
doesn't
exist
in
readable
and
it
just
exists,
then
writable.
A
If
it's
a
file
and
it
it
exists
in
readable
or
it
does
exist
in
writable
and
in
readable,
then
we
can
still
just
rename
the
writable
one,
but
we
do
need
to
make
sure
that
we've
marked
as
deleted
the
readable
one,
and
so
we
have
internal
methods
for
doing
this,
where
we
can
Mark
things
as
a
lead.
So
that's
where
here
we're
marking
as
deleted
the
old
path
for
the
readable
system.
A
So
this
this
thing
we've
we've
handled.
That's
great
this
one.
If
it
doesn't
exist
in
writable
yet
and
it
does
exist
in
readable
and
it's
a
file,
we
need
to
basically
create
a
new
file
on
the
writable
system,
with
the
readables
content
and
stuff
and
still
mark
it
as
the
leader.
So
that's
where
this,
if
condition,
is
basically
trying
to
implement
these
different
paths
but
marking
as
deleted
is
what
needs
to
happen?
No
matter
what
but
write
file.
A
I
I
need
more
arguments,
because
I
need
to
also
read
the
content,
so
I
think
I'm
going
to
I
need
to
get
the
content
from
the
readable
file
yeah.
Let
me
read
the
file
the
old
pass
and
we
won't
pass
an
encoding
there's
a
thing
where
I
can
say
where
these
file
flags
are
like
how
I'm
opening
the
file?
It's
weird,
the
weird
file
system,
API
stuff.
This
is
stuff
Beyond,
My,
Control,.
A
A
A
Can
that's
yes,
yes
and
I
can
actually
do
this.
I
can
so
here's
the
other
interesting
thing
since
the
original
file
system
is
read,
only
I
need
to
make
it
a
writable
mode
which
we
actually
have.
We
have
a
function
for
this
is
lovingly
borrowed
from
the
that's
lovingly
borrowed
from
the
original
implementation
to
great
cool.
A
So
this
we've
we've
completed
this
block.
The
last
block
which
we
have
not
completed
is
that
these
are
directories
and
we're
renaming
that's
where
things
get
next
level,
but
let's
see
if
we
can
get
our
feedback
loop
going,
that's
be
great,
but
I'm
still
not
able
to
run
anything
yet
because
here
I
have
this
open
method
which
I
haven't
implemented,
I'm,
not
entirely
sure
what
this
open
method
needs
to
do,
I'm
pretty
sure
this
is
going
to
be
way
easier
than
the
rename.
A
So
we
can
take
a
quick,
Divergence
and
Implement
open
based
on
what
the
old
implementation
was
going
to
be.
Maybe
we're
we're
good.
Please
stop
me
if
I'm
like,
if
I'm
taking
us
down
a
really
weird.
B
No,
no,
so
sorry,
it's
a
side
track,
but
I
just
wanted
to
make
sure
it
was.
It
was
public
knowledge
before
I
suggested
it,
but
next
next
week
we
should
totally
see
it
quick
and
take
gitlab
AI
for
a
spin
yeah.
A
A
B
B
B
C
A
B
I
I,
it
must
be,
it
must
be:
okay,
yeah
there's
in
the
vs
code,
kitlab
extension,
there's,
there's
configurables
now
for
the
AI,
assist
server
and
API
key
Etc.
So.
A
So,
honestly,
those
like,
if
something
isn't
making
sense
like
that's,
really
good
feedback,
I,
really
want
it's
right
now.
The
strategy
is
so
right
now
the
task
at
hand
is
this
method
which
this
is
the
old
implementation,
and
you
can
see
the
Callback
stuff
and
we
got
you
know
some
switching
happening.
B
B
Making
sense
it's
just
crazy
as
I
say
how
like
what
you're
kind
of
doing
is.
Is
this
low
level
kind
of
like
okay
I
need
to
write
a
file
copy
command?
A
file?
Read
Commander
file,
move
command
folder,
you
know
like
old
school
Reinventing,
the
wheel,
I
guess,
but
clearly,
not
quite
yeah.
A
So
so
a
lot
of
the
motivation
here
is
I
mean
so
one
we
get
so
much
usability
wins
using
vs
code
as
a
web
ID,
which
is
so
sweet
like
drag
and
drops
right
clicking.
A
You
know
the
command
palette,
extensions
down
the
line,
so
much
usability
lens.
On
top
of
that,
the
abstraction
that
it
requires
of,
like
reading
from
a
file
system
is
and
reading
from
a
source
control
provider
is,
is
gonna,
be
miles
more
reliable
than
what
we
currently
have
in
the
web
ID
because
of
the
web
ID.
A
We
we've
built
this
in-memory
file
system
as
a
glorious
map
of
path
to
it's,
either
a
tree
or
a
blob
and
there's
a
lot
of
duplicated
data
there
and
we
keep
track
of
our
changes,
which
is
causes
lots
of
lots
of
weird
quirks
when
someone
like
creates
a
new
direct
new
directory,
renames
it
and
then
like
deletes
it.
The
renames
and
old
things
are
there.
Keeping
track
of
those
changes
is
a
really
hard
problem,
as
opposed
to
calculating
the
change
between
your
old
and
new
file
system.
A
C
B
We
got
protection
for,
but
if,
if
you
browser
kind
of
crashes
or
your
Machinery,
you
know
that
well,
is
there
a
danger
of
doing
a
lot
of
work
in
the
browser,
fs
and
kind
of
losing
well.
A
Nelson
well
I
think,
what's
cool
is
adhering
to
this
interface
like
vs
code
has
a
number
of
like
internal
stuff
for
those
kind
of
situations.
So
we
just
kind
of
adhere
to
that
interface
and
provide
what
vs
code
wants
and
we'll
potentially
gets
things
like
that
out
of
the
box.
I
know
for
sure
we
won't
get.
Maybe
the
whole
file
system
change.
A
We
could
like.
We
can
Implement
that,
but
that
level
of
protection,
but
I
do
know
like
out
of
the
box.
It
tries
to
recover
and
protect
your
like
active
file.
If
that
was
open
or
something
which
is
awesome,
which
is
interesting,
there's
there's
still
a
lot
of
growth
that
we
had
here,
so
we're
definitely
in
the
first
iteration
phase,
but
there's
so
much
promise.
It
is
quite
an
enjoyable
experience
using
it
so
far,
but
clearly
we're
still
implementing
it.
So
I'll
try
to
stop
selling
this
on
it.
A
So
I'm
looking
at
this
thing,
and
so
this
open
method
is
really
interesting.
So
this
is
a
method
having
a
little
bit
of
context
into
here.
This
is
a
method
that
some
sort
of
internal
brow
graphs
thing
is
using
to
implement
things
like
write,
file
or
read
file.
A
And
so
it's
anticipating
us
to
implement
this
method
and
return
some
sort
of
reference
to
a
file
for
it
to
run
operations
on
it
looks
like
we
can.
It
looks
like
a
lot
of
these.
We
can
just
pass
through
to
the
writable
file
system.
B
A
I,
don't
know
I'm
not
going
to
think
about
it,
because
I
really
just
need
to
copy
this
thing
kind
of
over,
so
I'm,
actually
or
better.
If
it
works,
that's
what
we're
trying
to
do
I'm
going
to
copy
this
over
literally,
let's,
let's
see
if
we
can
implement
it
all
right,
so
I
can
call
Scott
on
this.
A
There
we
go
great
I
get
my
stat
if
we
actually
so
the
way
these
callbacks
work
is.
If
this
thing
is
falsy,
then
we
end
up
in
this
land.
A
So
we
can
handle
this
situation
first
and
this
thing
will
be
falsy
if
there's
an
error.
Actually
so
so
we
end
up
here
in
all
right.
We
caught
some
sort
of
error.
Oh
we're
not
async
put
in
stat,
then
I,
guess
we
do
this.
You
know
the
old,
the
old
switcheroo.
A
This
is
we
have
a
helper
for
this.
This
is
doing
make
make
Derpy
on
the
routable.
Yes,
it's
got
to
be
unreadable
and
with
their
name
of
blue
path,.
A
A
C
A
Yeah
I
think
it's
great,
so
we
can
do
if
I
don't
know
what
path
not
existing.
I'm.
A
A
A
But
I
can
understand
that
I
I
think
it's
probably
better
not
to
optimize
too
early,
so
I'm
fine
with
so
then
I
can
just
return
yeah.
We
can
just
return
I,
guess
right.
It
will
open
there's
no
callbacks
yay
great.
So
then,
if
we're
not
creating
a
file,
oh
wait,
but
this
is
if
it
now
exists,
yeah,
that's
how
buds
get
introduced.
A
If
it
doesn't
exist
and
we're
not
creating
a
file,
then
I'm
going
to
throw
API
error
and
I
want
to
see
so
that
came
from
this
whole
patch
block
we
just
copied
over
now
we
don't
need
that.
That's
great
big
call!
Yes
hey!
You
said
you
weren't
going
to
be
helpful.
What
are
you
doing
being
helpful.
A
Which
I'll
just
copy
over
here
I
mean?
How
do
you
guys
feel
about
keeping
the
switch
here?
Do
we
like
being
switchy.
A
C
A
Cool
to
see
I
don't
know,
but
then
also
like
variable
decorations.
Inside
of
these
can
I
I,
don't
think
variable
decorations
are
scoped
within
a
case
I
think
they
they
kind
of
complete
the
whole
block
as
well
I'm
going
to
translate
I'm
going
to
transform
it
to
an
if,
because
I
just.
This
is
a
lot
of
body
for
I'm.
C
Was
about
to
say
a
minida
I'm,
not
a
switch
guy
either,
but
there's
so
many
switches
in
this
code
base
going
on
there's
kind
of
things
consistent,
but
it's
probably
okay
to
introduce
it.
C
A
A
But
let's
let's
try
it
with:
let's
try
with
this.
So
if
that.
A
C
A
A
A
C
A
I,
don't
want
to
do
it
cool
so
if
we're
here
not
sure
what
this
is,
but
it
wants
for
some
reason
we're
doing
the
make
dirt
P
thing
again
and
let's
just
double
check-
that's
what's
happening
here.
So
if
I
jump
to.
A
Their
name
stat
their
names
that
create
parents.
Yes,
this
is
doing
make
therapy,
so
we
can
just
do
that.
Make.
C
A
A
B
I
have
this
issue
working
with
Android
and
Java
and
I
I
haven't
mastered
it
yet,
but
bad
like
network
activity
done
in
background
threads
with
callbacks
and
yeah
it.
It
makes
me
kind
of
like
in
a
ball
and
that's.
A
B
I'm
I'm
not
not
expert
enough
as
I'd
like
to
be,
and
the
the
stuff
that
I've
been
working
on
in
the
past
is
quite
dated
so
like
running
on
Android,
four
five,
that
kind
of
thing
so
quite
old
audience
of
java
and
it
doesn't
support
like
xamarin
or
kotlin
or
or
all
the
things
that
would
make
my
life
a
lot
easier.
Yeah,
yeah,
hey.
C
They're
doing
a
real,
quick
Google,
it
doesn't
seem
like
Java,
has
anything
related
c-sharp
just
to
have
it
C.
A
B
B
Like
the
original,
like
Visual
Basic,
six
I
think
it
got
up
to
before.
It
then
went
to
visual
basic.net
and
then
you
kind
of
had
your
C
sharp
and
VB
different
sort
of
flavors
I.
Guess
if
that's
the
right
term
and
you
used
to
have
the
immediate
window
and
the
immediate
window,
you
could
could
do
that
kind
of
eyebrows.
B
Yes,
yes,
yes,
yes,
yeah
I,.
B
A
A
Yeah
that
wasn't
code
and
then
okay.
A
A
C
A
All
right
guess
it
likes
it
to
look
like
this
all
right,
we're
getting
really
close.
B
A
A
A
Okay,
it
looks
like
they're
doing
something
to
to
update
its
size,
so
stats
not
size.
How
interesting
I
guess
negative
one
then
they're
going
to
update
the
size.
I
look
at
see.
This
is
also
an
issue
with
their
callback
approach.
Like
look
how
many
of
these
like
exclamation
marks
they
had
to
add.
This
is
like
telling
typescript
forget
the
fact
that
this
thing
can
be
nullable.
A
Just
trust
me
I
know
it's
not,
and
you
want
to
always
avoid
anything
like
that
in
typescript,
but
with
callbacks,
it's
it's
tough
because
it
really
could
be,
and-
and
it
doesn't
always
know
that
in
advance,
so
rewriting
it
in
this
prom
space
approach
is
so
much
nicer
because
we
could
be
assured
this
is
that
it's
this
or
it
rejected,
do
we
we
get
all
that
handling
for
free,
bling,.
A
Okay,
we're
just
following
following
the
thing
here
and
then
they
they
have.
This
thing
called
the
overlay
file.
So
that's
the
one
weird
thing:
let's
see
if
we
can
find
that's
got
to
be
okay,
so
they
just
created
this
thing
called
an
overlay
file
which
implements
their
file
interface,
so
I'm
thinking
I'm
just
going
to
create
a
new,
a
new
class
for
this.
A
A
A
B
A
A
Okay,
so,
instead
of
creating
the
new
file
thing
here,
maybe
as
a
oh,
it's
it's
upset
because
it
doesn't
want
the
ifs.
Sorry,
maybe
I
can
this
class,
which
is
my
implementation
class,
can
receive
in
this
Constructor
a
factory
for
something
like
a
file,
because
the
situation
is
at
this
level.
A
I
don't
have
anything
that
implements
browser
fs's
file
system
because
I'm
trying
to
just
deal
with
promises
right
now
and
I
wanted
to
just
take
interfacing
with
that
file
system
bit
I
wanted
to
encapsulate
that
as
one
problem
and
implementing
this
with
promises
is
one
problem,
and
so
that,
but
the
situation
is
this,
API
is
expecting
some
sort
of
file
reference
for
us
to
get
the
right
implementation.
A
A
A
B
I
I
think
it's
just
like
I
I
realize
that
you're
trying
to
just
kind
of
recreate
you
know
just
I
was
word
adapt
my
gray,
whatever
the
term
is
but
I
struggle
without
the
context
like
I
said,
I,
don't
really
know
what
the
purpose
of
overlap,
what
what
is
an
overlay
for?
What
is
a
preload
file?
What
is
it
so
I.
B
Know
I've
I've
done
something
like
this
before,
where
I
I
thought
that
I
only
needed
to
take
like
a
few
pieces
across
and
I
brought
a
few
pieces
and
I
was
like
that's
not
a
reference
to
this,
and
that's
got
reference
to
these
two
things
and
before
I
knew
it.
I
was
rewriting
the
entire
thing
which
I
didn't
really
intend
to
do,
but
I'm
not
sure
how
far
down
the
rabbit
hole,
you're
intending
or
prepared
or
expecting
to
go.
A
Yeah
so
I
think
oh
gosh,
this
thing
has
done
a
really.
This
has
done
a
really
poor
job
on
something.
A
A
This
is
just
this
one
module
that
implements
these
interfaces
and
stuff
so
I
want
to
just
instead
of
using
their
module,
which
had
some
issues
we're
gonna
we're
going
to
do
this
ourselves,
which
isn't
you
know,
is
less
than
ideal,
but
it's
just
the
situation
we're
in
and
thankfully
we
can
have
tests
for
this
thing,
and
now
we
have
a
little
bit
more
control
over
it
and
stuff
like
that.
But.
A
Some
quirky
things
that,
like,
for
instance,
just
ran
into
this
situation
with
file
needing
a
reference
to
file
system,
but
I
think
I
can
still
get
around
by
keeping
the
implementation
pretty
free
from
all
of
those
dependencies
and
I
can
so
what
I
think
I'm
going
to
need,
though,
is
I'm
going
to
have
some
sort
of
function
where
I
can
create
overlaid
file
is
going
to
be
a
function
that
takes
in.
A
Where
is
it?
Where
is
here
yeah
that
takes
in
like
all
this
stuff.
C
A
B
The
good
thing
is
that,
through
this
I'm
saying
that
definitely
I
fully
appreciate
why
you're
you're
not
looking
to
push
anything
Upstream
because
you're
not
tweaking
a
few
things,
you're
you're,
taking
a
completely
different
approach.
You
know
by
by
doing
away
with
these
callbacks,
so
I.
B
It
might
lend
itself
well
to
this
being
abstracted
to
its
own
sort
of
module
or
package
or
something
in
the
future,
because
then
other
people
can
more
easily
use
or
benefit
leverage
and
contribute
again
Upstream
to
this,
without
it
being
yeah
like
tied
specifically
to
the
get
that
project
100.
A
And
so
that's
also
one
of
the
things.
One
of
the
approaches
we
take
with
this
pack
with
this
project
too,
is
these
are
the
different
things
that
make
this
all
work
are
sub
packages
awesome
awesome.
It
is
all
in
its
own
package,
which
is
going
to
be
really
powerful
because
we
could
reuse
the
same
file
system
that
would
run
the
web
ID.
It's
the
same
file
system
that
could
run
Snippets
or
any
other
kind
of
in
editing
in
browser
file
system,
editing
experience.
We
could
reuse
these
things
as
well,
which
would
be
really
great.
A
B
A
Yeah,
because,
what's
really
gnarly
in
the
web
ID
is
you
have
dependencies
from
random
places
all
over
the
place
and
circular
dependencies,
and
it
just
makes
reusing
that
thing,
let
alone
comprehending
that
thing
really
difficult.
B
A
Did
not
do
a
good
job.
I
did
not
do
a
good
job,
promoting
the
comprehension
of
this
piece
today,
but
part
of
that
is
because
the
task
at
hand
is
just
moving
over
this.
A
This
module
from
the
third
party
and
I
myself
have
just
kind
of
chosen
like
there's
a
lot
here
that
we
don't
need
to
control,
because
we
just
need
to
implement
this
interface
and
so
I'm
not
really
thinking
about
details
too
much,
except
for
the
operations
like
rename
our
buggy.
We,
we
did
have
to
readdress
that,
but
this
has
been
super
helpful
for
me,
so
I
appreciate.
A
B
A
Yeah,
it's
it's
common
man.
So,
like
the
the
deadline
is
deadline
and
then
we
don't
really
have
deadlines,
but
we
we.
We
are
I'm
I'm
heads
down
focused
on
this
entirely,
and
so
the
goal
is
long-term
goal
that
we're
really
shooting
for
and
I
think
this
is
communicated
and
an
issue,
but
pretty
soon.
A
A
B
I
can't
imagine
anyone
being
overly
attached
to
you
know:
I
went
by
it
provides
awesome
functionality,
but
I
I
think
when
you
compare
it
to
vs
code,
it's
in
another
league
right.
A
We
obviously
have
the
feature
flag
off,
but
if
you
wanted
to
locally
turn
on
vs
code,
web
ID
feature
flag,
you,
you
would
see
it,
but
this
is
a
standalone
repository
which
has
been
really
powerful
because
it
lets
us
make,
because
this
is
really
a
standalone
application
that
integrates
with
gitlab
so
right
now,
I'm
in
our
projects,
Pages
website-
and
we
these
are
like
the
parameters
that
really
just
kick
off
the
web.
Id
is
like
hey:
what's
your
project
path
and
ref,
and
there
you
go
yeah
so
and.
A
Anyone
can
see
this
right
now,
and
so
we
have
a
nice
little
modal
saying
that
nice,
but
we
load
it
up
the
file
system.
This
is
using.
This
is
using
the
third
party
overlay
FS,
which
I'm
now
re-implementing.
Thankfully,
there's
like
integration
tests
for
this
stuff,
so
I
feel
a
level
of
like
security
with
that.
So.
A
Yeah,
so
here's
the
situation,
here's
the
situation
is
like,
but
man
there's
so
much
works
out
of
the
box
so
nicely
like
even
loading
images
was
like
knowing
the
history
of
the
web.
Ide
like
this
was
a
situation
of
like
how
do
you
tell
what's
a
binary
file
and,
what's
not
like
don't,
have
to
worry
about
any
stuff,
it's
working
really
nicely
the
one
thing
so
I
have
an
MR
open
to
register
the
source
control,
because
when
we
have
a
separation
between
readable
and
writable
file
systems,
that's
great.
A
A
The
situation
with
overlay
FS
was
a
surprise,
but
what
has
happened
is
if
you're
doing
something
like
a
directory,
rename
it
wasn't
working
and
then,
when
I
fixed,
that,
if
I
did
a
directory,
rename
back
that
wasn't
working
and
I'm
glad
to
have
discovered
that
and
thankfully
it's
just
a
implementation
pivot.
It's
not
like
a
big
architectural
pivot,
but
we
just
have
to
when
I
dug
into
why
it
wasn't
working.
A
It
was
clear
to
me
yeah.
This
is
why
you
don't
write
callback.
How
code,
because
there's
there's
bugs
like
we
called
the
Callback
multiple
times
accidentally
and
like
that,
wasn't
our
code,
that's
the
third
party,
so
I
was
like
all
right.
We
need
to
I,
don't
I,
don't
feel
optimistic
about
this
module,
so
we're
gonna
try
to
do
it
ourselves,
because
it's
not
that
algorithm
is
like
that's
all
it's
doing
and
there's
a
lot
of
operations
are
really
trivial.
A
Rename
is
the
most
non-trivial
operation
and
open
was
kind
of
weird
that
we
just
did
together,
but
but
yeah
so
trying
to
fix
this
file
operation
was
not
expecting
on
needing
to
do
that.
But
that's
that's
where
we're
at
and
then
but
it's
I
feel
awesome.
B
A
Vote,
yeah
yeah,
it's
gonna,
be
really
exciting.
We're
gonna
have
more
like
gitlab
branding
and
integrated
into
it
as
well.
So
that's
that's
part
of
task
to
me
and
Enrique,
like
Chad,
Himachal
and
Tomas,
and
the
editor
team
we're
all
pretty
focused
on
it.
So
right.
C
B
A
B
Worries
have
a
great
day.